SpringMVC,spring的模型-视图-控制器框架是围绕这一个**DispatcherServlet(前端控制器)**来设计的。这个servlet可以把请求分发到各个处理器上面,并支持可配置的处理器映射,视图渲染,本地化,时区与主题渲染等,甚至还支持文件上传。
流程
1、浏览器http请求到DispatcherServlet
2、HandlerMapping寻找处理器
由DispatcherServlet(前端控制器)查询一个或者多个HandlerMapping(处理器映射),找到处理请求的Controller。
3、调用Controller
DispatcherServlet将请求提交到Controller。Controller调用业务逻辑处理后,返回ModelAndView。
4、DispatcherServlet查询ModelAndView,处理视图映射并返回模型。
DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
5、ModelAndView反馈浏览器HTTP
http相应,视图负责将结果显示到客户端。
常用注解
@requestMapping:用于处理请求地址映射的注解,可用于方法或者类上。用于类上,表示此类的所有相应请求的方法都是以改路径作为父路径。
@controller:用于标注控制层组件,用于标记在一个类上,标明此类是一个SpringMVC的controller对象。分发处理器将会扫描使用了该注解的类的方法,并且检测此方法是否用@requestMapping标注,可以把request请求的header部分值绑定到方法的参数上。
@responseBody:异步请求,用于将controller方法返回的对象,通过适当的httpMessageConverter转换为指定格式,写入到response对象的body数据区。返回的数据不是html标签的页面,而是其他某种格式的数据时(json,xml)使用
@restController:相当于@controller和@resposeBody的组合效果。
@service:用于标注业务组件层。
@requestParam:主要用于在springMVC后台控制层获取参数,类似一种是request.getParameter(“name”)。
@requestHeader:可以吧request请求的header部分的值绑定到方法的参数上。
springMVC设定重定向和转发
重定向:在返回值前加"redirect",例如:“redirect:http://baidu.com”
转发:在返回值前加"forward",例如:“forward:user.do?name=method4”
如何解决post请求中文乱码,get乱码
1、解决post请求乱码问题。
在web.xml文件中设置一个CharacterEncodingFilter过滤器,设置为utf-8。
<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-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
2、get请求中文乱码解决方案。
01、修改tomcat配置文件添加编码与工程编码相同
<ConnectorURIEncoding=“utf-8” connectionTimeout=“20000” port=“8080” protocol=“HTTP/1.1” redirectPort=“8443”/>
02、对参数进行重新编码
String username = new String(request.getParamter(“username”).getBytes(“ISO8859-1”),“utf-8”)
SpringMVC想拦截get方式提交的方法如何配置
可以在@requestMapping注解中加上method=RequestMethod.GET,
@requestMapping注解中加上method=RequestMethod.POST
写了那个就能拦截到哪种提交请求
SpringMVC如何在方法里面得到request或者session
直接在方法的形参中进行声明即可。
前台很多参数传入,并且属于一个对象
直接在方法中声明这个对象,springMVC会自动把属性赋值到这个对象中