Spring MVC
Spring MVC 是Spring Framework 提供的 web 组件 它的实现基于 MVC 的设计模式:Model(模型层)、View(视图层)、Controller(控制层)。
- Spring MVC 的执行流程:
- 客户端发送请求给前端控制器(DispatcherServlet)
- 前端控制器根据请求路径地址,调用对应的处理器
- 处理器再调用对应的业务方法,得到相应的业务数据
- 处理器将组装好的数据返回给前端控制器
- 前端控制器将获取的 ModelAndView 对象传给视图解析器
- 视图解析器对 ModelAndView 进行解析,解析完毕后,返回解析好的数据
- 前端控制器获取到数据,经过渲染,再展示给客户端
- Spring MVC 的优点: 1、支持各种视图技术,不仅仅是jsp 2、与Spring框架集成 3、支持各种请求资源的映射策略
- Spring MVC的主要组件? DispatcherServlet 前端控制器 HandlerMapping 处理器映射器 HandlerAdapter 处理器适配器 Controller 控制器 Handler 适配器 ViewResolver 视图解
- 如何实现跨域访问? 两种方式:使用 JSONP 和 或在服务器端设置运行跨域。
- @RequestMapping 注解的常用属性有哪些?
常用属性如下:
- Value:指定 URL 请求的实际地址, @RequestMapping(value = “/hello”)
- method:指定请求的 method 类型,如get/post; @RequestMapping(method=RequestMethod.POST)
- param:指定请求参数中必须包含的参数名称
- HTTP 状态码及对应的含义
- 400:错误请求,服务器不理解请求的语法
- 401:未授权,请求要求身份验证
- 403:禁止访问,服务器拒绝请求
- 404:未得到对应的资源
- 500:服务器内部错误,服务器遇到错误,无法完成请求
- 502:错误网关
- 504:网关超时
- 怎样在方法里面得到Request,或者Session? 答:直接在方法的形参中声明request,SpringMvc就自动把request对象传入。
- forward 和 redirect 的区别
- forward 表示请求转发,请求转发是服务器的行为;redirect 表示重定向,重定向是客户端行为。
- forward 是服务器请求资源,服务器直接访问,把请求的资源转发给浏览器,地址不变,只用到一个请求;redirect 是服务器发送一个状态码告诉浏览器重新请求新的地址,地址发生改变,用到多个请求。
- forward 转发页面和转发的页面可以共享 request 里面的数据,redirect 不能共享数据。
- forward 比 redirect 效率更高。
- Spring MVC 有几种获取 request 的方式 三种方式: ①:从请求参数中获取 ②:通过 @RequestContextHolder 上下文获取 request 对象 ③:通过自动注入的方式
- Spring MVC 的控制器是不是单例模式,如果是,有什么问题,怎么解决? 答:是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。
- Spring MVC 的常用注解有哪些?
- @Controller:用于标记某个类为控制器
- @RequestBody:注解实现将controller方法返回对象转化json对象响应给客户.
- @ResponseBody:标识返回的数据不是 HTML 页面,而是 JSON、XML
- @Component:标识为 Spring 的组件
- @Configuration:用于定义配置类
- @RequestMapping:用于处理请求url映射的注解,可用在类或方法上。
- @Autowired:自动装配对象
- Spring MVC 怎么和AJAX相互调用的? 通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 : (1)加入Jackson.jar (2)在配置文件中配置json的映射 (3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。
- 如何解决POST请求中文乱码问题,GET的又如何处理呢? post:在web.xml中配置一个CharacterEncodingFilter过滤器 get:①修改tomcat配置文件添加编码与工程编码一致;另外一种方法对参数进行重新编码
- Spring MVC 里面拦截器是怎么写的: 有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可:
- 拦截器的使用场景有哪些? 日志记录:可用记录请求日志,便于信息监控和信息统计 权限管理:可用于用户登录状态的检查 统一安全处理:可用于统一的安全校验或参数的加密/解密