SpringMVC是基于MVC的web层应用框架。偏向前端而不是基于业务逻辑层。是Spring框架的拓展。简而言之,Spring能用的他都能用,Spring有些用起来复杂的功能Spring使其变得更加方便。html
基于Spring的jar,springMVC只需多导入一个spring-webmvc-4.0.0.RELEASE.jar。总共须要导入的jar包有
commons-logging-1.1.3.jar
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前端
<servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <!--指定SpringMvc配置文件位置--> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <!-- /:会拦截全部请求,可是不会拦截jsp页面,/*会把Jsp页面一块儿拦截了--> <url-pattern>/</url-pattern> </servlet-mapping>
<!-- 配置映射解析器,自动匹配前缀和后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"></property> <property name="suffix" value=".jsp"></property> </bean> <!--定义一个DefaultServletHttpRequestHandler--> <!--该Handler对进入DispatcherServlet的URL进行筛查--> <!--静态资源交给Tomcat的默认Servlet处理--> <!--若是不是静态资源才由dispatcherServlet处理--> <!--注意只配置该语句不配置下面那条语句会致使只能访问静态资源,请求没法找到Adapter,处理访问请求的AnnoationMethodHandlerAdapter不可以使用--> <mvc:default-servlet-handler/> <!--加载SpringMvc默认配置,要和上面的语句一块儿使用由于它会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter--> <mvc:annotation-driven></mvc:annotation-driven>
@Controller public class TestMvc{ //@RequestMapping告诉SpringMVC下面的方法处理什么请求,/表明当前项目,method指定提交方法 @RequestMapping("/hello",method=RequestMethod.POST) public String testMvc(){ System.out.println("正在处理请求"); return "success";//映射解析器,自动添加先后缀,因此此处应该是访问/WEB-INF/Pages/success.jsp }
1.@RequestMapping的URL地址能够进行模糊匹配web
?:能替代任意一个字符 *:能替代任意多个字符,和一层路径 **:能替代多层路径 @RequestMapping(value="/Test?") public String Test(){ System._out_.println("模糊匹配?成功"); return "success"; } @RequestMapping(value="wuhu/*/Test") public String Test01(){ System._out_.println("模糊匹配*成功"); return "success"; }
2.RequestMapping能够强制要求只有携带指定参数才处理spring
@RequestMapping(value="Test03",param={"name","gender"})
3.RequestMapping能够强制要求只有指定请求头才处理express
@RequestMapping(value="Test04",headers={"Accept-Language=zh;q=0.8"})
4.@PathVariable能够获取URL绑定的占位符浏览器
@RequestMapping(value="getName/{name}") public Sting getName(@PathVariable("name") String name) { }
5.@RequestParam能够获取请求参数。
@RequestParam=request.getParameter("xxx")cookie
@RequestMapping(value="/test5") public String Test05( @RequestParam(value = "name", defaultValue = "小王",required = false) String name) //defaultValue设置默认值 //required设置是否必须须要携带
6.@RequestHeader:能够获取任意请求头
@RequestHeader=request.getHeader("xxx")session
@RequestMapping(value="/test6") public String Test06( @RequestParam(value = "name", defaultValue = "小王",required = false) String name,@RequestHeader(value="User-Agent",required=true) String user-agent) //获取用户的浏览器信息
7.@CookieValue获取Cookie的值
@CookieValue=Cookie[] cookies=request.getCookies()mvc
@RequestMapping(value="/test7") public String Test07( @RequestParam(value = "name", defaultValue = "小王",required = false) String name,@RequestHeader(value="User-Agent",required=true) String user-agent,@CookieValue(value="JSESSIONID",required=false)String cookid) //注意JESSIONID是咱们取出不一样会话的关键,session其实都存在一个Map中,每个会话都会有一个特殊的JESSIONID意味着着每个session都有一个key也就是JESSIONID。经过JESSIONID咱们访问Session里的值。
8.SpringMvc中可使用原生Servlet的API如app
@RequestMapping("/orginalApi") public String name( HttpSession session,HttpServletRequest request,HttpServletResponse response) { }
9.POJO类也就是实体类,无需任何操做,SpringMVC会一一匹配,自动封装。
@RequestMapping("/TestPojo") public String AddStudent(Student student) { System.out.println(student); return "success" }
无论是请求、响应中的get或者post乱码均可以经过如下方法解决。
1.Tomcat安装好就给server.xml的8080端口配制出加上"URIEncoding="UTF-8";解决全部的GET乱码问题;
2.在web.xml下写一个Filter:拦截全部请求,进行编码处理
<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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3.不肯意写Filter就在每一次request.getParameter添加request.setCharaterEncoding("utf-8"),在往浏览器写东西以前加上response.setContentType("text/html;charset=utf-8")。
客户端请求提交到DispatcherServlet->遍历HandlerMapping->根据HandlerMapping找到对应的Handler->遍历Adapter适配器找到能处理请求对应的适配器->将请求提交到Hanlder中的Adapter->处理完成返回ModelAndView->经过ViewResolver找到ModelAndView指定视图->调用render方法渲染页面。