系列文章目录
文章目录
- 系列文章目录
- SpringspringMVC的执行流程 一句话概括/快速记
- 面试题
- 1、什么是Spring MVC ?简单介绍下你对springMVC的理解?
- 2、Springmvc的优点
- 3、springMVC和struts2的区别有哪些
- 4、SpringMVC怎么样设定重定向和转发的
- 5、SpringMvc怎么和AJAX相互调用的?
- 6、如何解决POST请求中文乱码问题,GET的又如何处理呢?
- 7、Spring MVC怎么做异常处理
- 8、SpringMvc的核心入口类是什么,Struts1,Struts2的分别是什么
- 9、SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决
- 10、SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代
- 11、@RequestMapping注解用在类上面有什么作用
- 12、怎么样把某个请求映射到特定的方法上面
- 13、如果在拦截请求中,我想拦截get方式提交的方法,怎么配置
- 14、怎么样在方法里面得到Request,或者Session
- 15、如果想在拦截的方法里面得到从前台传入的参数,怎么得到
- 16、SpringMvc中函数的返回值是什么
- 17、SpringMvc用什么对象从后台向前台传递数据的
- 18、SpringMvc中有个类把视图和数据都合并的一起的,叫什么
- 19、当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理
- 20、@ResponseBody注解作用
- 总结
SpringspringMVC的执行流程 一句话概括/快速记
核心控制器(DispatcherServlet )捕获请求,查找 Hander,执行 Handler,选择 ViewResolver,通过
ViewResoler 渲染视图并返回
具体步骤:
1)用户向服务器发送请求,请求被 Spring 前端控制 Servelt DispatcherServlet
捕获;
2)DispatcherServlet 对请求 URL 进行解析,得到请求资源标识符(URI)。然后
根据该 URI,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象 (包括
Handler 对象以及 Handler 对象对应的拦截器),最后以 HandlerExecutionChain 对象
的形式返回;
3)DispatcherServlet 根据获得的 Handler,选择一个合适的 HandlerAdapter。
(附注:如果成功获得 HandlerAdapter 后,此时将开始执行拦截器的 preHandler(…)
方法)
4) 提取 Request 中的模型数据,填充 Handler 入参,开始执行 Handler
(Controller)。 在填充 Handler 的入参过程中,根据你的配置,Spring 将帮你做一些
额外的工作:
HttpMessageConveter: 将请求消息(如 Json、xml 等数据)转换成一个对象,
将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如 String 转换成 Integer、Double 等
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化
日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到 BindingResult
或 Error 中
5)Handler 执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;
6)根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已经注册
到 Spring 容器中的 ViewResolver)返回给 DispatcherServlet ;
7)ViewResolver 结合 Model 和 View,来渲染视图
8)将渲染结果返回给客户端
面试题
1、什么是Spring MVC ?简单介绍下你对springMVC的理解?
Spring MVC是一个基于MVC架构的用来简化web应用程序开发的应用开发框架,它是Spring的一个模块,无需中间整合层来整合 ,它和Struts2一样都属于表现层的框架。在web模型中,MVC是一种很流行的框架,通过把Model,View,Controller分离,把较为复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
2、Springmvc的优点
(1)它是基于组件技术的。全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java组件.并且和Spring提供的其他基础结构紧密集成
(2)不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)
(3)可以任意使用各种视图技术,而不仅仅局限于JSP
(4) 支持各种请求资源的映射策略
(5)它应是易于扩展的
3、springMVC和struts2的区别有哪些
区别:
(1)springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。
(2)springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),
struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
(3)Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,
springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,
最后又将 ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl
4、SpringMVC怎么样设定重定向和转发的
举例:
(1)在返回值前面加"forward:“就可以让结果转发,譬如"forward:user.do?name=method4”
(2)在返回值前面加"redirect:“就可以让返回值重定向,譬如"redirect:http://www.baidu.com”
5、SpringMvc怎么和AJAX相互调用的?
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :
(1)加入Jackson.jar
(2)在配置文件中配置json的映射
(3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解
6、如何解决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配置文件添加编码 URIEncoding="utf-8"与工程编码一致,如下:
②另外一种方法对参数进行重新编码:ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码
String userName = new String(request.getParamter(“userName”).getBytes(“ISO8859-1”),“utf-8”)
7、Spring MVC怎么做异常处理
可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可
8、SpringMvc的核心入口类是什么,Struts1,Struts2的分别是什么
SpringMvc的是DispatchServlet,
Struts1的是ActionServlet,
Struts2的是StrutsPrepareAndExecuteFilter
9、SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决
是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段
10、SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代
一般用@Conntroller注解,表示是表现层,不能用用别的注解代替
11、@RequestMapping注解用在类上面有什么作用
答:是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
12、怎么样把某个请求映射到特定的方法上面
答:直接在方法上面加上注解@RequestMapping,并且在这个注解里面写上要拦截的路径
13、如果在拦截请求中,我想拦截get方式提交的方法,怎么配置
可以在@RequestMapping注解里面加上method=RequestMethod.GET
14、怎么样在方法里面得到Request,或者Session
直接在方法的形参中声明request,SpringMvc就自动把request对象传入
15、如果想在拦截的方法里面得到从前台传入的参数,怎么得到
直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样
16、SpringMvc中函数的返回值是什么
返回值可以有很多类型,有String, ModelAndView,但一般用String比较好
17、SpringMvc用什么对象从后台向前台传递数据的
通过ModelMap对象,可以在这个对象里面用put方法,把对象加到里面,前台就可以通过el表达式拿到
18、SpringMvc中有个类把视图和数据都合并的一起的,叫什么
ModelAndView
19、当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理
要加上@ResponseBody注解
20、@ResponseBody注解作用
注解 @ResponseBody,使用在控制层(controller)的方法上
作用:将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端。
当加上@ResponseBody注解后不会解析成跳转地址 会解析成相应的json格式的对象 集合 字符串或者xml等直接返回给前台 可以通过 ajax 的“success”:fucntion(data){} data直接获取到
总结