1.SpringMVC的流程
1)用户发送请求至前端控制器DispatcherServlet;
2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
4)DispatcherServlet 调用 HandlerAdapter处理器适配器;
5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
6)Handler执行完成返回ModelAndView;
7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
9)ViewResolver解析后返回具体View;
10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
11)DispatcherServlet响应用户。
2.springMVC和struts2的区别有哪些
- springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。
- springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
- Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
3.SpringMVC怎么样设定重定向和转发的
转发:在返回值前面加"forward:",譬如"forward:main"
重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"
4.SpringMvc的控制器是单例模式吗
SpringMvc控制器是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。
5.SpringMvc怎么和AJAX相互调用
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :
1)加入Jackson.jar
2)在配置文件中配置json的映射
3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。
6.如何解决中文乱码问题
1)解决post请求乱码问题:
在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;
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")
7.Spring MVC的主要组件
1)前端控制器 DispatcherServlet(不需要程序员开发)
作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
2)处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的URL来查找Handler
3)处理器适配器HandlerAdapter
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
4)处理器Handler(需要程序员开发)
5)视图解析器 ViewResolver(不需要程序员开发)
作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)
6)视图View(需要程序员开发jsp)
View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)
8.SpringMVC常用注解
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。(params 指定限制请求参数的条件)
@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
@Controller
@ModelAttribute
@SessionAttributes
@PathVariable
8.RESTFUL风格API
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE):从服务器删除资源。