Springmvc面试
1 Springmvc执行流程
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler
可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括 Model和view
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
2 Springmvc的优点
(1)它是基于组件技术的。全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java组件.并且和Spring提供的其他基础结构紧密集成.
(2)不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)
(3)可以任意使用各种视图技术,而不仅仅局限于JSP
(4) 支持各种请求资源的映射策略
(5)它应是易于扩展的
3 SpringMVC怎么样设定重定向和转发的?
(1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"
(2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"
4 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等等)
5 Springmvc 中如何解决 GET | POST请求中文乱码问题?
GET方式:
每次发生请求之前对URL进行编码:
例如:Location.href="/encodeURI"(“http://localhost/test/s?name=中文&sex=女”);
更简便的方法,在服务器端配置URL编码格式:修改tomcat的配置文件server.xml:
只需增加 URIEncoding=“UTF-8” 这一句,然后重启tomcat即可。
<ConnectorURIEncoding="UTF-8"
port="8080" maxHttpHeaderSize="8192" maxThreads="150"
minSpareThreads="25" maxSpareThreads="75"connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8" />
POST方式:
可以每次在request解析数据时设置编码格式:request.setCharacterEncoding(“utf-8”);
也可以使用编码过滤器来解决,最常用的方法是使用Spring提供的编码过滤器:
在Web.xml中增加如下配置(要注意的是它的位置一定要是第一个执行的过滤器):
<filter>
<filter-name>charsetFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
该过滤器要做的其实就是强制为所有请求和响应设置编码格式:
request.setCharacterEncoding(“utf-8”);
response.setCharacterEncoding(“utf-8”);
6 Springmvc 和struts2的区别有哪些?
springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。
springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
7 SngMvc怎么和AJAX相互调用的?
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :
1 加入Jackson.jar
2 在配置文件中配置json的映射
3 在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。
8 SpringMvc里面拦截器是如何使用
定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。
preHandle :进入 Handler方法之前执行,用于身份认证、身份授权,比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
postHandle:进入Handler方法之后,返回modelAndView之前执行,应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图
afterCompletion:执行Handler完成执行此方法,应用场景:统一异常处理,统一日志处理
拦截器配置:
针对HandlerMapping配置(不推荐):springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该 拦截器。(一般不推荐使用)
类似全局的拦截器:springmvc配置类似全局的拦截器,springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中
2 SpringMVC常用注解
7 SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代?
8如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?Springmvc 中拦截器如何使用
9怎样在方法里面得到Request,或者Session?
10如果想在拦截的方法里面得到从前台传入的参数,怎么得到?
11如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
12 SpringMvc中函数的返回值是什么?
13 SpringMvc用什么对象从后台向前台传递数据的?
15 Spring中IOC的作用与原理?对象创建的过程。
25 Springmvc 工作原理是什么?
27 Springmvc 中对于文件的上传有哪些需要注意
28 springmvc 中当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理
29 Springmvc 中对于文件的上传有哪些需要注意