Spring MVC面试整理
-
Spring MVC执行过程
-
客户端的请求提交到dispatcherServlet
-
DispatcherServlet查询一个或者多个handlermapping ,找请求的Controller
-
DispatcherServlet将请求提交给Controller, Controller调用完毕后返回modelAndView
-
DispatcherServlet查询一个或多个对应的前端控制器,将modelAndView传递给指定的前端控制器
-
将渲染完的视图返回给客户端
-
-
SpringMVC的Controller为单例的尽量不要设置属性,而是在方法中
-
@RequestMapping注解用在类上面代表该类方法的父路径
-
SpringMVC与Struts2的主要区别
-
SpringMVC的前端控制器为一个Servlet 而Struts为Filter
-
SpringMVC的Controller为单例,而Struts2的Action为多例
-
SpringMVC没有值栈的概念,Struts有值栈
- SpringMVC是方法参数绑定,而Struts是属性绑定
-
-
SpringMVC的拦截器
-
类实现接口HandlerInterceptor,实现方法,方法分别对应方法执行前 , 执行后 , 页面渲染后
-
然后在配置文件中配置拦截器
-
多个拦截器一起执行的时候preHandler按照配置的顺序执行,剩下的两个拦截器都要在preHandler返回为True时才能执行.
-
postHandler和afterCompletion按照配置顺序的逆序调用
-
-
json
-
@ResponseBody 输出json
-
@requestbody 接受json 转化为pojo
-
-
上传文件
-
前端规则
-
在配置文件中配置多媒体
-
在Controller中用MultipartFile来接受文件
-
-
三大组件和核心
-
核心 : DispatcherServlet(前端控制器)
-
三大组件 :
-
ViewResolver : 视图解析器()
-
HandlerMapping : 处理器映射器组件(查找路径名对应的Handler)
-
HandlerAdapter : 处理器适配器组件(执行Handler)
-
-
主要的注解
-
@requestmapping() // 方法的访问路径value,method=post 限制请求的方式为get/post
-
@Controller
-
@ResponseBody
-
@RequestBody
-
-
拦截规则
-
/* 拦截所有,包括jsp
-
/ 拦截除了jsp以外的资源
-
-
Controller的返回值
-
ModelAndView : 返回视图和参数
-
Model : 在方法中传递Model,返回值为String , 直接return 视图
-
Void : 什么也不反回
-
-
重定向和请求转发
- 在路径前面添加关键字
return 'redirect:/item/itemlist.action'
return 'forward:/item/itemlist.action'
- 在路径前面添加关键字
-
参数绑定
public ModelAndView toEdit(Integer id,HttpServletRequest request,HttpServletResponse response,HttpSession session)
-
异常处理
-
继承HandlerExceptionResolver 实现对应的方法,对错误进行处理
-
springmvc配置
<bean class="com.lyh.exception.CustomerException"></bean>
-
-
拦截提交参数中包含"type=test"字符串
可以在@RequestMapping注解里面加上params="type=test"
-
SpringMvc用什么对象从后台向前台传递数据的
- 通过ModelMap对象,可以在这个对象里面用put方法,把对象加到里面,前台就可以通过el表达式拿到
-
怎么样把ModelMap里面的数据放入Session里面
- 可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key
-
SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决
- 是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段