1、SpringMVC的工作原理?
● 用户向服务器发送请求,请求被springMVC前端控制器DispatchServlet捕获;
● DispatcherServle对请求URL进行解析,得到请求资源标识符(URL),然后根据该URL调用HandlerMapping将请求映射到处理器HandlerExcutionChain;
● DispatchServlet根据获得Handler选择一个合适的HandlerAdapter适配器处理;
● Handler对数据处理完成以后将返回一个ModelAndView对象给DisPatchServlet;
● Handler返回的ModelAndView只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver试图解析器将逻辑视图转化为真正的视图View;
● DispatcherServle通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端;
2、SpringMVC常用注解都有哪些?
● @RequestMapping用于请求url映射。
● @RequestBody注解实现接收http请求的json数据,将json数据转换为java对象。
● @ResponseBody注解实现将controller方法返回对象转化为json响应给客户。
3、如何开启注解处理器和适配器?
我们在项目中一般会在springmvc.xml中通过开启mvc:annotation-driven来实现注解处理器和适配器的开启。
4、如何解决get和post乱码问题?
解决post请求乱码:我们可以在web.xml里边配置一个CharacterEncodingFilter过滤器。设置为utf-8.解决get请求的乱码:有两种方法。对于get请求中文参数出现乱码解决方法有两个:
● 修改tomcat配置文件添加编码与工程编码一致。
● 另 外 一 种 方 法 对 参 数 进 行 重 新 编 码 String userName = new String(request.getParameter(“userName”).getBytes(“ISO8859-1”),“utf-8”);
5、谈谈你对Spring的理解?
Spring是一个开源框架,为简化企业级应用开发而生。Spring可以是使简单的JavaBean实现以前只有EJB才能实现的功能。Spring是一个IOC和AOP容器框架。
● Spring容器的主要核心是:
控制反转(IOC),传统的java开发模式中,当需要一个对象时,我们会自己使用new或者getInstance等直接或者间接调用构造方法创建一个对象。而在spring开发模式中,spring容器使用了工厂模式为我们创建了所需要的对象,不需要我们自己创建了,直接调用spring提供的对象就可以了,这是控制反转的思想。
依赖注入(DI),spring使用JavaBean对象的set方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程,就是依赖注入的思想。
面向切面编程(AOP),在面向对象编程(oop)思想中,我们将事物纵向抽成一个个的对象。而在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。AOP底层是动态代理,如果是接口采用JDK动态代理,如果是类采用CGLIB方式实现动态代理
6、Spring中的设计模式有哪些?
● 单例模式——spring中两种代理方式,若目标对象实现了若干接口,spring使用jdk的java.lang.reflect.Proxy类代理。若目标兑现没有实现任何接口,spring使用CGLIB库生成目标类的子类。单例模式——在spring的配置文件中设置bean默认为单例模式。
● 模板方式模式——用来解决代码重复的问题。比如:RestTemplate、JmsTemplate、JpaTemplate
● 前端控制器模式——spring提供了前端控制器DispatherServlet来对请求进行分发。
● 试图帮助(viewhelper)——spring提供了一系列的JSP标签,高效宏来帮助将分散的代码整合在试图中。
● 依赖注入——贯穿于BeanFact