SpringMVC简介
SpringMVC是基于MVC的web层应用框架。偏向前端而不是基于业务逻辑层。是Spring框架的拓展。简而言之,Spring能用的他都能用,Spring有些用起来复杂的功能Spring使其变得更加方便。
SpringMVC使用
1.导包
基于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
2.写配置
<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>
3.SpringMvc配置文件
<!-- 配置映射解析器,自动匹配前缀和后缀 -->
<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>
<!--想要访问静态资源还有一种办法就是配置静态资源注解-->
<resources mapping="/resources/**" location="/resources/" />
<resources mapping="/resources/Js/**" location="/resources/Js/" />
<resources mapping="/resources/Css/**" location="/resources/Css/" />
4.经典HelloWorld
@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地址可以进行模糊匹配
?:能替代任意一个字符
*:能替代任意多个字符,和一层路径
**:能替代多层路径
@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可以强制要求只有携带指定参数才处理
@RequestMapping(value="Test03",param={"name","gender"})
3.RequestMapping可以强制要求只有指定请求头才处理
@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")
@RequestMapping(value="/test5")
public String Test05(
@RequestParam(value = "name", defaultValue = "小王",required = false) String name)
//defaultValue设置默认值
//required设置是否必须需要携带
6.@RequestHeader:可以获取任意请求头
@RequestHeader=request.getHeader("xxx")
@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()
@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
@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"
}
10.Spring MVC可以通过原生API:session.setAttribute("msg","value")或request.setAttribute传值,也可以通过Model model,Map<String, Object> map,modelMap map传值,在SpringMvc中更推荐用Map和Model传值更加方便。
@RequestMapping("/Tes08")
public String AddStudent(Student student,Model model,Map map)
{
model.addAttribute("modelmessage","model成功了");
map.put("mapmessage", "map也成功了");
return "success"
}
记住一件事:不管是Model、Map还是ModelMap,他们的底层都实现了ExtendedModelMap,而ExtendedModelMap被BindingAwareModelMap实现,因此Modle、Map、ModelMap的Class都是BindingAwareModelMap,到了最后他们都会被viewResolver包装成ModleAndView通过render()方法渲染给前端界面
11.@SessionAttributes,该注解很少使用,用法是当方法往model或map里面放数据时同时也在Session中放一份。
@SessionAttributes(value={"name"},types={String.class})
@Controller
public class TestController {
@RequestMapping("/Test09")
public String handle01(Map<String, Object> map){
map.put("name", "小王");
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")。
SpringMvc执行顺序
客户端请求提交到DispatcherServlet->遍历HandlerMapping->根据HandlerMapping找到对应的Handler->遍历Adapter适配器找到能处理请求对应的适配器->将请求提交到Hanlder中的Adapter->处理完成返回ModelAndView->通过ViewResolver找到ModelAndView指定视图->调用render方法渲染页面。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。