SpringMVC的流程:
浏览器 【Http请求】==>
{
DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求
<load-on-startup>1</load-on-startup>是启动顺序,让这个Servlet随Servletp容器一起启动。
}
前端控制器(DispatcherServlet) ==>
{
前端控制器是大脑,以下每次流程之后,都要返回给前端控制器
}
处理请求的映射(HandlerMapping)
{
SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到Controller
DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上
} 【找寻控制器,找不到就给defaultHandler通过http响应回浏览器,找到则经过拦截器后交由控制器处理业务】 ==>
控制器(Controller) ==>
处理请求的映射(HandlerAdapter)==>
{
AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上。返回ModleAndView(数据和视图)
}
视图解析器(ViewResolver) ==>
{
UrlBasedViewResolver类 通过配置文件,把一个视图名交给到一个View来处理
InternalResourceViewResolver类,比上面的类,加入了JSTL的支持
得到具体的 数据 和 视图
}
http://www.cnblogs.com/baiduligang/p/4247164.html
https://www.cnblogs.com/jiyukai/p/7629498.html
二、MVC的理解
属于表现层的框架。在web模型中,MVC是一种很流行的框架,通过把Model,View,Controller分离,把较为复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
三、Spring MVC的转发和重定向
(1)在返回值前面加"forward:"就可以让结果转发,譬如"forward:user.do?name=method4"
(2)在返回值前面加"redirect:"就可以让返回值重定向,譬如"redirect:http://www.baidu.com"
另外,jsp的转发和重定向:
转发:
request.getRequestDispatcher("success.jsp").forward(request,response);
在服务器组件收到用户请求后。经过它的处理后有传递给了另一个组件。不修改用户的请求码。各组件处理完之后在返回给用户,例如主页面的框架。
用户请求-----》服务器-------》组件1-------》组件2------->服务器-------》用户
(请求不变)
重定向:
response.sendRedirect("success.jsp");
在服务器组件收到用户请求后。经过处理修改用户请求。在返回给用户。这样用户再次使用这个请求就会被动的使用新的请求了。(重定向一般是为了防止用户提交完数据后点浏览器刷新或点后退之后产生重复提交)
用户请求-----》服务器-------》组件------>服务器-------》用户-------》新的请求
(修改用户请求)
四、解决POST请求中文乱码问题,GET的又如何处理呢?
(1)解决post请求乱码问题:
在web.xml中加入:
<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>
(2)get请求中文参数出现乱码解决方法有两个:
①修改tomcat配置文件添加编码与工程编码一致,如下:
<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
②另外一种方法对参数进行重新编码:
String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。
五、SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
答:是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。
六、@RequestMapping注解用在类上面有什么作用?
答:是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
七、如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?
答:可以在@RequestMapping注解里面加上method=RequestMethod.GET。
八、在springMVC中 获取request、response、session
一般spring MVC当中,我们将采用注解的方式进行数据的获取;在BaseController中加入如下代码;
protected HttpServletRequest request;
protected HttpServletRequest request;
protected HttpServletResponse response;
protected HttpSession session;
@ModelAttribute
public void setReqAndRes(HttpServletRequest request, HttpServletResponse response){
this.request = request;
this.response = response;
this.session = request.getSession();
}
说明:ModelAttribute的作用
1)放置在方法的形参上:表示引用Model中的数据
2)放置在方法上面:表示请求该类的每个Action前都会首先执行它,也可以将一些准备数据的操作放置在该方法里面。
九、SpringMVC接收前台传递过来的值