1. 简单的谈一下SpringMVC的工作流程?
启动服务器的时候配置在web.xml文件中的中央控制器【DispatcherServlet】被初始化完成,并且加载配置的springMVC的配置文件。
客户端浏览器发送http请求,被中央控制器拦截,转交给url解析器解析得到具体的请求路径,并返回给中央控制器;中央控制器将得到的具体请求路径转交给控制器适配器查找与之对应的请求处理类执行具体的请求处理,得到ModelAndView【1.数据。2.跳转地址】对象并交给控制器适配器且返回给中央控制器;中央控制器将ModelAndView对象转交给视图解析器解析得到一个具体的数据显示路径,中央控制器得到具体的数据显示路径后,将路径所代表的资源转换执行成一个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配置文件添加编码与工程编码一致,如下:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
3. SpringMVC与Struts2的主要区别?
Struts2 | SpringMvc |
---|---|
Struts2 的核心是基于一个Filter即StrutsPreparedAndExcuteFilter | SpringMvc的核心是基于一个Servlet即DispatcherServlet(前端控制器) |
Struts2是基于类开发的,传递的参数是通过类的属性传递(属性驱动和模型驱动),所以只能设计成多例prototype | SpringMvc是基于类中的方法开发的,也就是一个url对应一个方法,传递参数是传到方法的形参上面,所以既可以是单例模式也可以是多例模式singiton |
Struts2采用的是值栈存储请求以及响应数据,OGNL存取数据 | SpringMvc采用request来解析请求内容,然后由其内部的getParameter给方法中形参赋值,再把后台处理过的数据通过ModelAndView对象存储,Model存储数据,View存储返回的页面,再把对象通过request传输到页面去。 |
4. SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
springmvc controller默认的是单例singleton的
如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了,因此,只要controller中不定义属性,那么单例完全是安全的。
1、不要在controller中定义成员变量。
2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope(“prototype”),将其设置为多例模式
5. SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代?
一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。
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”);
}
11. 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面
12. 怎么样在方法里面得到Request,或者Session?
直接在方法的形参中声明HttpServletRequest,SpringMvc就自动把request对象传入
13. SpringMvc中函数的返回值是什么?
返回值可以有很多类型,有String, ModelAndView,当一般用String比较好
14. SpringMvc怎么处理返回值的?
SpringMvc根据配置文件中InternalResourceViewResolver的前缀和后缀,用前缀+返回值+后缀组成完整的返回值
15. 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>
更多推荐
最新总结SpringMVC常见面试题
发布评论