深入剖析SSM框架之SpringMvc

本文深入探讨了SpringMVC框架的用途、核心组件及配置,包括Servlet配置、请求映射、参数处理、视图解析和国际化。通过实例讲解了SpringMVC如何处理各种请求方式、RESTful风格、过滤器、异常处理、类型转换和数据格式化。最后,文章还介绍了Spring与MyBatis的整合步骤。
摘要由CSDN通过智能技术生成
  • Spring需要导入的Jar包

    1.jar
    spring-aop.jar
    spring-bean.jar
    spring-context.jar
    spring-core.jar
    spring-web.jar

  • SpringMvc框架需要导入的Jar包

    spring-webmvc.jar
    commons-logging.jar

报错NoClassDefFoundError:缺少jar

SpringMvc的意义

Servet - Springmvc
jsp ->Servlet (Springmvc)->Jsp

url

springmvc配置文件 springmvc.xml
选中常用的命名空间:beans aop context mvc

普通的servlet流程:
请求-url-pattern -交给对应的servlet去处理

如果现在想用springmvc,而不是普通的servlet,如何告知程序?-如何让springmvc 介入程序:
需要配置一个 Springmvc自带的servlet

通过以下配置,拦截所有请求,交给SpringMVC处理:

<servlet>
  	<servlet-name>springDispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  			<param-name>contextConfigLocation</param-name>
  			<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
  	<servlet-name>springDispatcherServlet</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>

其中:

<url-pattern>.action</url-pattern>

  • /:一切请求 ,注意不是 /*
  • /user:拦截以 /user开头的请求
  • /user/abc.do :只拦截该请求
  • .action:只拦截 .action结尾的请求

项目中同时兼容 springMVC和Servlet

 <servlet-mapping>
  	<servlet-name>springDispatcherServlet</servlet-name>
  	<url-pattern>.action</url-pattern>
  </servlet-mapping>

  <servlet>
  	<servlet-name>springDispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  			<param-name>contextConfigLocation</param-name>
  			<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>

通过

指定springmvc配置文件的路径,如果要省略,必须放到 默认路径:

/WEB-INF/springDispatcherServlet-servlet.xml

映射是去匹配@RequestMapping注解,可以和方法名、类名不一致
通过method指定 请求方式(get post delete put)
@RequestMapping(value=“welcome”,method=RequestMethod.POST) //映射

  • 设置name="xxxx"的情况:
    params= {“name2=zs”,“age!=23”}

    name2:必须有name="name2"参数

    age!=23 : a.如果有name=“age”,则age值不能是23
    b.没有age
    !name2 :不能name="name2"的属性

  • ant风格的请求路径

    ? 单字符

    任意个字符(0或多个)
    任意目录

@RequestMapping(value=“welcome3/**/test”)
接受示例:

a href=“welcome3/abc/xyz/abccc/test”

  • 通过@PathVariable获取动态参数
    public String welcome5(@PathVariable(“name”) String name ) {
    System.out.println(name);
    return “success” ;
    }

  • Springmvc: REST风格 :软件编程风格

    • GET : 查

    • POST :增

    • DELETE :删

    • PUT :改

  • 普通浏览器 只支持get post方式 ;其他请求方式 如 delelte|put请求是通过 过滤器新加入的支持。

    springmvc实现 :put|post请求方式的步骤
    a.增加过滤器

<!-- 增加HiddenHttpMethodFilte过滤器:目的是给普通浏览器 增加 put|delete请求方式 -->
<filter>
		<filter-name>HiddenHttpMethodFilte</filter-name>
		<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>

</filter>

<filter-mapping>
		<filter-name>HiddenHttpMethodFilte</filter-name>
		<url-pattern>/*</url-pattern>
</filter-mapping>

b.表单

<form action="handler/testRest/1234" method="post">
	<input type="hidden"  name="_method" value="DELETE"/>
	<input type="submit" value="删">
</form>

i:必须是post方式
ii:通过隐藏域 的value值 设置实际的请求方式 DELETE|PUT

c.控制器

@RequestMapping(value="testRest/{id}",method=RequestMethod.DELETE)
		public String  testDelete(@PathVariable("id") Integer id) {
			System.out.println("delete:删 " +id);
			//Service层实现 真正的增
			return "success" ;//  views/success.jsp,默认使用了 请求转发的 跳转方式
		}

通过 method=RequestMethod.DELETE 匹配具体的请求方式

此外,可以发现 ,当映射名相同时@RequestMapping(value="testRest),可以通过method处理不同的请求。

过滤器中 处理put|delete请求的部分源码:

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
	HttpServletRequest requestToUse = request;
	if ("POST".equals(request.getMethod()) && request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) == null) {
		String paramValue = request.getParameter(this.methodParam);
		if (StringUtils.hasLength(paramValue)) {
			requestToUse = new HttpMethodRequestWrapper(request, paramValue);
		}
	}
	filter
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值