1.SpringMVC基本概述
Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一
采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性
– 在 web.xml 中配置 DispatcherServlet
– 加入 Spring MVC 的配置文件
– 编写处理请求的处理器,并标识为处理器
– spring-aop-4.0.0.RELEASE.jar
– spring-beans-4.0.0.RELEASE.jar
– spring-context-4.0.0.RELEASE.jar
– spring-core-4.0.0.RELEASE.jar
– spring-expression-4.0.0.RELEASE.jar
– spring-web-4.0.0.RELEASE.jar
– spring-webmvc-4.0.0.RELEASE.jar
![](https://i-blog.csdnimg.cn/blog_migrate/8c809f4fdd8f3c6bb82a9efccaae5bad.png)
<!-- The front controller of this Spring Web application, responsible for handling all application requests -->
<!-- 向服务器注册前端控制器 -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<!--DispatcherServlet指的是SpringMVC的前端控制器,给服务器使用,创建servlet对象 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 用于制定SpringMVC配置文件的路径以及名称 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<!-- 用servlet-mapping制定请求映射的路径 -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<!-- 用url-pattern指定拦截的请求路径 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
![](https://i-blog.csdnimg.cn/blog_migrate/d18a787a5c5fb69abd91d851d1666b43.png)
点击Next输入文件名springmvc.xml,再点Next,在以下三项前打勾√
在Open Type中查找 InternalResourceViewResolver,获得其全路径
在springmvc.xml文件中添加
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
在web.xml文件中可以不设置初始化参数,也就是不写<init-param>
但是要将spring.xml文件改名为 springDispatcherServlet-servlet.xml,并移动到WEB-INF目录下
@RequestMapping(value="/sayHello",method=RequestMethod.GET,params={"username","pwd!=123"})
public String SUCCESS(){
System.out.println("111");
return "success";
}
@RequestMapping()可以定义在类上,也可以定义在方法上
– 类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录
– 方法处:提供进一步的细分映射信息。相对于类定义处的 URL
@RequestMapping 的 value、method、params 及 heads 分别表示请求URL、请求方法、请求参数及请求头的映射条件,他们之间是与的关系,联合使用多个条件可让请求映射 更加精确化
params表示及含义
– *:匹配文件名中的任意字符
– **:** 匹配多层路径
– /user/**/createUser: 匹配 /user/createUser、/user/ aaa/bbb/createUser 等 URL
– /user/createUser ??:匹配 /user/createUser aa、/user/createUser bb 等 URL
HTTP 协议里面,四个表示操作方式的动词:
<a href="${pageContext.request.contextPath }/getOrderById/1">okok</a> <form action="${pageContext.request.contextPath }/postOrderById/2" method="post"> <input type="submit" value="Submit"/> </form> <form action="${pageContext.request.contextPath }/putOrderById/3" method="post"> <input type="hidden" name="_method" value="put"/> <input type="submit" value="Submit"/> </form> <form action="${pageContext.request.contextPath }/deleteOrderById/4" method="post"> <input type="hidden" name="_method" value="delete"/> <input type="submit" value="Submit"/> </form>
超链接<a>是get请求,浏览器 form 表单只支持 GET 与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与 DELETE 请求。需要在form表单中添加隐藏域,name为‘method',value为’POST/DELETE'
同时需要在web.xml文件中配置 HiddenHttpMethodFilter
<!-- HiddenHttpMethodFilter过滤器可以将POST请求转化为PUT请求和DELETE请求 --> <filter> <filter-name>hiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>hiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
@RequestMapping(value="/getOrderById/{id}",method=RequestMethod.GET) public String getOrderById(@PathVariable(value="id") Integer id){ //调用service层方法 System.out.println(id); return SUCCESS; } @RequestMapping(value="/postOrderById/{id}",method=RequestMethod.POST) public String postOrderById(@PathVariable(value="id") Integer id){ //调用service层方法 System.out.println(id); return SUCCESS; } @RequestMapping(value="/putOrderById/{id}",method=RequestMethod.PUT) @ResponseBody public String putOrderById(@PathVariable(value="id") Integer id){ //调用service层方法 System.out.println(id); return SUCCESS; } @RequestMapping(value="/deleteOrderById/{id}",method=RequestMethod.DELETE) @ResponseBody public String deleteOrderById(@PathVariable(value="id") Integer id){ //调用service层方法 System.out.println(id); return SUCCESS; }
因为在tomcat8.0中不支持PUT和DELETE方法,所以需要@ResponseBody,否则405错误
4.使用@RequestParam绑定请求参数值
@RequestMapping(value="/testRequestParam",method=RequestMethod.POST) public String testRequestParam(@RequestParam(value="username") String name,@RequestParam(value="password",required=false,defaultValue="123456789") String password){ System.out.println(name+"---"+password); return SUCCESS; }
在jsp页面
<form action="${pageContext.request.contextPath }/testRequestParam" method="post"> Username:<input type="text" name="username"/> Password:<input type="password" name="password"/> <input type="submit" value="Submit"/> </form>
@RequestParam可以从jsp页面获取参数
<!-- 解决中文乱码问题 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>