SpringMVC
# 1 什么是SpringMVC?
SpringMVC是一个轻量级的web框架。
SpringMVC把web应用分成几个清晰的模块,分别是model、view、controller。
SpringMVC可以使用各种视图技术,不仅仅局限于jsp。
# 2 SpringMVC的执行流程
1.客户端发送请求到前端控制器DispatcheServlet。
2.DispatcheServlet通过处理器映射器HandlerMapping获取处理器Handler。(处理器映射器返回处理器执行链,包含处理器Handler和拦截器HandlerInterceptor)。
3.DispatcheServlet通过处理器适配器HandlerAdapter执行Handler。(Handler也就是controller)
4.Handler执行完后返回ModelAndView给到DispatcheServlet。
5.DispatcheServlet将ModelAndView传给ViewResolver(视图解析器)做解析。
6.ViewResolver(视图解析器)解析完返回View视图对象给到DispatcherServlet。
7.DispatcherServlet把Model数据填充到View试图对象中。
8.响应用户。
# 3 SpringMVC怎么样设定重定向和转发的?
(1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"
(2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"
# 4 SpringMVC常用的注解
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
# 5 SpingMVC中控制器的注解
一般用@Controller注解,也可以使用@RestController。
@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。
# 6 POST及GET请求中文乱码问题
(1)解决post请求乱码问题:
在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8。
(2)get请求中文参数出现乱码解决方法有两个:
① 修改tomcat配置文件添加编码与工程编码一致,如下:
② 另外一种方法对参数进行重新编码:
ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。
# 7 SpringMVC控制器是不是单例?有什么问题?
1.是单例模式。
2.在多线程访问的时候有线程安全问题。
3.解决方案是在控制器里面不能写可变状态量,如果需要这些可变状态,可以使用ThreadLocal机制解决,为每个线程单独生成一份变量副本,独立操作,互不影响。
# 8 拦截请求中,怎么拦截get方式提交的方法?
可以在@RequestMapping注解里面加上method=RequestMethod.GET。
# 9 怎样在方法里面得到Request,或者Session?
直接在方法的形参中声明request,SpringMvc就自动把request对象传入。