Spring全家桶面试题(二)之SpringMVC

67. 说说你是如何解决 get 和 post 乱码问题?

(1)解决post请求乱码问题:在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf­8;

</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配置文件添加编码与工程编码一致,如下:

<ConnectorURIEncoding=“utf‐8” connectionTimeout=“20000” port=“8080” protocol=“HTTP/1.1” redirectPort=“8443”/>

②另外一种方法对参数进行重新编码:

String userName = new String(request.getParamter(“userName”).getBytes(“ISO8859‐1”),“utf‐8”)
ISO8859­1是tomcat默认编码,需要将tomcat编码后的内容按utf­8编码。

(3)确保前端请求的数据不是乱码,确保开发工具和文件本身的编码为utf-8

68. Spring MVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?

1、控制器也是一个bean,默认是单例。
2、单例的Bean如果有状态则线程不安全,如果无状态则线程安全(有状态指有成员变量声明在类中)

  • 将成员变量声明在方法中
  • 设置为多例,借助ThreadLocal存储成员变量
  • 加同步锁,性能极差

69.请描述Spring MVC的工作流程?描述一下 DispatcherServlet 的工作流程?

(1)用户发送请求至前端控制器DispatcherServlet;
(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成映射器执行链)一并返回给DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;
(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析(因为需要通过视图解析器加上前缀和后缀);
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)成静态的html;
(11)DispatcherServlet响应用户。
在这里插入图片描述

70.SpringMVC怎么和AJAX相互调用的?

(1)加入Jackson.jar(如果是fastJson的jar包,就需要配置)
(2)在配置文件中配置json的消息转换器.(jackson不需要该配置HttpMessageConverter)

<!‐‐它就帮我们配置了默认json映射‐‐> 
 <mvc:annotation‐driven conversion‐service="conversionService" >
 </mvc:annotation‐driven>

(3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。(那么就不用考虑视图解析和渲染过程了)

在这里插入图片描述

75.SpringMVC的拦截器和过滤器有什么区别?执行顺序?

拦截器不依赖于servlet容器,过滤器依赖与servlet容器。
拦截器只能对action请求(DispatcherServlet 映射的请求)起作用,而过滤器则可以对几乎所有的请求起作用。
拦截器可以访问容器中的Bean(DI),而过滤器不能访问(基于spring注册的过滤器也可以访问容器中bean)。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值