SpringMVC常见面试题

本文详细阐述了SpringMVC的工作流程,包括DispatcherServlet的作用、URL解析、请求处理和视图解析等。同时,解答了POST和GET请求中文乱码的处理方式,并对比了SpringMVC与Struts2的区别。讨论了SpringMVC控制器的单例模式及其应对策略,以及@Controller、@RequestMapping等注解的使用场景。此外,还介绍了如何处理特定请求方式、请求参数,以及如何与AJAX交互和使用拦截器。最后,提到了ModelAndView对象在数据传递中的角色以及Session数据的管理。

SpringMVC常见面试题
1.简单的谈一下SpringMVC的工作流程?
在这里插入图片描述

1.启动服务器的时候配置在web.xml文件中的中央控制器【DispatcherServlet】被初始化完成,并且加载配置的springMVC的配置文件。
2.客户端浏览器发送http请求。
3.http请求被中央控制器【DispatcherServlet】拦截,转交给url解析器解析。
4.Url解析器解析http请求,得到具体的请求路径。
5.Url解析器将解析得到的具体的请求路径返回给中央控制器【DispatcherServlet】。
6.中央控制器【DispatcherServlet】将得到的具体的请求路径转交给控制器适配器。
7.控制器适配器根据具体的请求路径查找与之对应的请求处理类。
8.请求处理类就执行具体的请求处理,得到ModelAndView对象【1.数据。2.跳转地址】,将ModelAndView对象交给控制器适配器,控制器适配器将ModelAndView对象返回给中央控制器【DispatcherServlet】。
9.中央控制器【DispatcherServlet】将ModelAndView对象转交给视图解析器去解析。
10.视图解析器解析ModelAndView对象,得到一个具体的数据显示路径,将这个具体的数据显示路径返回给中央控制器【DispatcherServlet】。
11.中央控制器【DispatcherServlet】得到具体的数据显示路径之后,将路径所代表的资源转换执行成一个html数据。
12.将转换执行后的html数据返回给客户端浏览器。
2.如何解决POST请求中文乱码问题,GET的又如何处理呢?
在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>

以上可以解决post请求乱码问题。
对于get请求中文参数出现乱码解决:修改tomcat配置文件添加编码与工程编码一致,如下:

3.SpringMVC与Struts2的主要区别?
4.SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
springmvc controller默认的是单例singleton的
如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了,因此,只要controller中不定义属性,那么单例完全是安全的。
1、不要在controller中定义成员变量。
2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope(“prototype”),将其设置为多例模式
5. SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代?
@Controller @RestController 可以使用@Component去代替
6.@RequestMapping注解用在类上面有什么作用?
可以作用在java类,表示配置这个java类的访问路径;
7.怎么样把某个请求映射到特定的方法上面?
@RequestMapping也可以作用在请求处理方法上,表示配置这个请求处理方法的访问路径
8.如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?
@RequestMapping注解的method–限制请求的访问方式
@RequestMapping(value=“/my”,method=RequestMethod.GET)
9.如果在拦截请求中,我想拦截提交参数中包含"type=test"字符串,怎么配置?
可以在@RequestMapping注解里面加上params=“type=test”
10.我想在拦截的方法里面得到从前台传入的参数,怎么得到?
直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样

http://127.0.0.1:8080/test?name=zhansgan
Public  void  getName(String name){

}
Public  void  getName(HttpServletRequest req){
   Req.getPramter(“name”);
}
  1. 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
    直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面
    12.怎么样在方法里面得到Request,或者Session?
    直接在方法的形参中声明HttpServletRequest,SpringMvc就自动把request对象传入
    13.SpringMvc中函数的返回值是什么?
    返回值可以有很多类型,有String, ModelAndView,当一般用String比较好
    14.SpringMvc怎么处理返回值的?
    SpringMvc根据配置文件中InternalResourceViewResolver的前缀和后缀,用前缀+返回值+后缀组成完整的返回值
  2. SpringMVC怎么样设定重定向和转发的?
    在返回值前面加"forward:“就可以让结果转发,譬如"forward:user.do?name=method4” 在返回值前面加
    16.SpringMvc用什么对象从后台向前台传递数据的?
    通过ModelMap对象,可以在这个对象里面用put方法,把对象加到里面,前台就可以通过el表达式拿到
    ModelAndView----addObject(“name”,”zhangsan”)
    17.SpringMvc中有个类把视图和数据都合并的一起的,叫什么?
    叫ModelAndView
    18.怎么样把ModelMap里面的数据放入Session里面?
    可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key
    19.SpringMvc怎么和AJAX相互调用的?
    .通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象
    .具体步骤如下
    .1.加入Jackson.jar
    .2.在配置文件中配置json的映射
    .3.在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解
    20.当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理?
    要加上@ResponseBody注解
    21.SpringMvc里面拦截器是怎么写的?
    .有两种写法,一种是实现接口,另外一种是继承适配器类,然后在SpringMvc的配置文件中配置拦截器即可:
.<!-- 配置SpringMvc的拦截器 -->
.<mvc:interceptors>
.<!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 -->
.<bean id="myInterceptor" class="com.et.action.MyHandlerInterceptor"></bean>
.<!-- 只针对部分请求拦截 -->
.<mvc:interceptor>
.<mvc:mapping path="/modelMap.do" />
.<bean class="com.et.action.MyHandlerInterceptorAdapter" />
.</mvc:interceptor>
.</mvc:interceptors>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值