1、什么是MVC
- MVC是一种分离业务逻辑、数据、视图的设计模式,分层设计,并发开发。
- Model模型:业务处理与数据存取;
- View视图:数据显示;
- Controller:处于模型与视图中间,处理用户交互;
2、什么是Spring MVC
- Spring MVC基于Java,实现MVC设计模式的轻量级web框架;
- 分离业务逻辑、数据、视图,简化开发;
3、Spring MVC的优点
- 可以支持各种视图技术,而不仅仅局限于JSP;
- 与Spring框架集成(如IoC容器、AOP等);
- 清晰的角色分配:前端控制器 , 处理器映射, 处理器适配器, 视图解析器;
- 支持各种请求资源的映射策略;
4、SpringMVC流程
- 外部请求达到dispatcherServelt中心调度器;
- 注册器将请求分发给Controller控制器;
- 控制器将请求传递给Model进行业务处理和数据存储;
- Model将处理结果返回给控制器;
- 控制器返回一个ModelAndView给中心控制器;
- 中心控制将其给view视图解析器进一步处理;
- View将处解析后的视图返回到中心控制器;
- 中心控制器进行渲染返回给前端用户;
5、SpringMVC主要组件
- 前端控制器DispatherServelt;
- 处理器Handler;(需开发)
- 处理器映射器:根据url查找处理器;
- 处理器适配器:执行处理器;
- 视图解析器:进行视图解析;
- 视图View;(需开发)
6、什么是DispatcherServlet
- 中心控制器DispatcherServlet,用来处理所有的HTTP请求和响应;
7、什么是Spring MVC框架的控制器
- 控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现;
- 控制器解析用户输入并将其转换为一个由视图呈现给用户的模型;
- Spring用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器。
8、SpringMVC常用注解
- @Controller:标记控制器对象;
- @RequestMapping:映射请求路径到控制器;
- @PathVariable:处理url中参数;
- @RequestParam:处理body中参数;
- @ResponseBody:封装成一个返回对象;
- @Service:服务层;
- @ModelAttibute:该注解方法在Controller每个方法执行前执行;
- @RestController = @ResponseBody + @Controller
9、SpringMVC如何解决线程安全性问题
- Controller默认是单列的;
- 避免在Controller中使用实例变量;
- 使用ThreadLocal变量;
10、Spring MVC的控制器是不是单例模式?有什么问题?怎么解决?
- 是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的;
11、Spring MVC怎么样设定重定向和转发的?
-
转发:在返回值前面加"forward:";
-
重定向:在返回值前面加"redirect:";
12、Spring MVC怎么和AJAX相互调用的
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :
-
加入Jackson.jar;
-
在配置文件中配置json的映射;
-
在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解;
13、如何解决POST请求中文乱码问题,GET的又如何处理呢
(1)解决post请求乱码问题:
- 在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;
(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”)
14、如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象
- 直接在方法中声明这个对象,Spring MVC就自动会把属性赋值到这个对象里面;
15、Spring MVC里面拦截器是怎么写的(自定义拦截器)
- 实现HandlerInterceptor接口;
- 继承适配器类,在接口方法当中实现处理逻辑;
- 然后在Spring MVC的配置文件中配置拦截器即可;
- 提供preHandle、postHandle、afterCompletion 三种方法;
16、拦截器Interceptor与过滤器Fileter区别
- Fileter是Servelt的支持,任何java web工程都可以使用,只能存在于web程序中,基于函数回调,只在servelt前后起作用;
- Interceptor是Spring容器内的,只有使用了SpringMVC框架的工程才能使用,可以作用于web、application等程序中,基于java反射机制,能够在方法前、中、后执行;
17、SpringMVC异常处理
- @Controller+@ExceptionHandler:处理当前controller异常;
- @ControllerAdvice+@ExceptionHandler:处理全局异常;
18、SpringMvc如何实现文件上传
- 客户端post提交input = file;
- 服务端使用MultipartFile类型接收,transto(new file());