Spring MVC基础(面试)

一、上来就是什么是Spring MVC?

首先,Spring MVC 就是一个MVC 框架,可以帮助我们更简洁的进行web 的开发,天生与Spring 框架集成。通过把Module、View、Controller 分离,将web 层职责进行解耦,方便组内人员之间的配合。

二、Spring MVC 的流程

Spring MVC 流程图

  1. 客户端发送请求,直接到DispatcherServlet(它的作用就是接收响应请求);
  2. DispatcherServlet 根据请求信息调用HandlerMapping,解析请求对应的Handler;
  3. 解析到Handler 后开始由HandlerAdapter 适配器处理(Handler 也就是我们说的Controller 控制器);
  4. HandlerAdapter 会根据Handler调用真正的Handler 处理器处理请求,并处理相应的业务;
  5. 处理完业务返回一个ModuleAndView 对象,Module 是返回的数据对象,View 是逻辑上的View;(还可以返回String类型)
  6. DispatcherServlet 把ModuleAndView 交由ViewResolver 视图解析器处理,ViewResolver 会根据逻辑View 查找到实际的View;
  7. DispatcherServlet 会把返回的Module 交由View 进行渲染;
  8. 把view 返回给请求者。

3. Spring MVC 和Struts2 有什么区别?

  1. Spring MVC 的核心是基于Servlet 即DispatcherServlet。
    Struts2 的核心是基于Filter 即StrutsPreparedAndExecuteFilter。
  2. Spring MVC 是基于类中的方法开发的,传递参数到方法的形参上,所以可以是单例模式也可以是多例模式。
    Struts2 是基于类开发的,传递的参数通过类的属性传递,所以只能设计成多例的。
  3. Spring MVC 由request 来解析请求内容,然后由其内部的getParameter 给方法中的形参赋值,再把后台处理过的数据通过ModuleAndView 对象存储,Module 存储数据,View存储返回的页面,再把对象通过request 传递给页面。
    Struts2 采用的是值栈存储请求以及响应数据,OGNL 存取数据。

4. Spring MVC 怎样设置重定向和转发?

  1. 重定向:在返回值前面添加redirect
  2. 转发:在返回值前面添加forward

5. Spring MVC 是怎样和Ajax 交互的?

Jackson 框架可以把Java 里面的对象直接转换成js 能识别的json 对象。

  1. 导入Jackson jar包;
  2. 配置文件中配置json 的映射;
  3. 方法里面可以直接返回Object、list 等,但是要在方法上面加@ResponseBody 注解。

6. 如何解决get、post 中文乱码的问题?

  1. 解决get 请求:
    方式一:Tomcat 默认编码是 ISO-8859-1,所以可以通过修改tomcat 配置编码为utf-8 处理,但不建议;
    方式二:将请求的数据从ISO-8859-1 转换成utf-8 编码即可。

  2. 解决post 请求:
    直接对Request 对象设置编码格式为utf-8。

7. Spring MVC 如何向前端传递数据?

  1. 使用Module 对象(常用)。 如:module.addAttribute(“user”, user);
  2. 使用HttpServletRequest。如:request.setAttribute(“user”, user);
  3. 使用Map。如:map.put(“names”, Arrays.asList(“caoyc”,“zhh”,“cjx”));

8. Spring MVC 拦截器怎么写?

拦截器:在一个请求发生前,发生时,发生后都可以对请求拦截。
作用:权限认证、解决乱码、操作日志记录、性能监控、异常处理等。
自定义拦截器:

  1. 继承HandlerInterceptorAdapter 类

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    	// 该方法在action 执行之前执行,可以实现对数据的预处理(如:编码;防止重复提交安全控制)
    	//如果方法返回true,则继续执行action。返回false 则拦截请求。
    }
    
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    	//在action 执行后执行,生成视图前执行。在这里有机会修改视图层数据
    }
    
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    	//最后执行,通常释放资源,处理异常。
    	//可以根据ex 是否为空来进行相应的的异常处理
    }
    
    1. 单个拦截器的执行流程
      单个连接器的执行流程
  2. 多个拦截器的执行流程(Interceptor1拦截器配置在前)多个拦截器的执行流程

  3. 注册拦截器(在XML 文件中配置)

    //拦截单个bean
    <mvc:interceptors>
      	 <bean id="myInterceptor" class="com.admol.web.MyInterceptor" />
    </mvc:interceptors>
    	
    //拦截部分指定请求
    <mvc:interceptors>
      <!-- path:需要拦截的请求,不写时会拦截所有请求 -->
    	 <mvc:mapping path="/*.htm" />  
    	 <bean id="myInterceptor" class="com.admol.web.MyInterceptor" />
    </mvc:interceptors>
    
    //多个拦截器
    <mvc:inteceptors>
    	<bean id="myInterceptor1" class="com.admol.web.MyInterceptor1" />
    	<bean id="myInterceptor2" class="com.admol.web.MyInterceptor2" />
    </mvc:inteceptors>
    
    
  4. 其它实现方式
    实现接口:HandlerInterceptor
    实现接口:WebRequestInterceptor

9. 过滤器怎么写?

  1. 实现Filter 接口
import javax.servlet.*;
import java.io.IOException;
public class Handler implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
		
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		
    }

    @Override
    public void destroy() {
		
    }
}

10. 过滤器与拦截器的区别

  1. 过滤器
    优点: 依赖于Servlet 容器,在实现上基于回调函数,可以几乎所有的请求进行过滤。
    缺点: 过滤器实例只能在容器初始化时调用一次。如修改字符编码;在过滤器中修改HttpServletRequest 的一些参数(低俗文字、危险文字)。
  2. 拦截器
    优点: 依赖于web 框架,在实现上是基于Java 反射机制,属于面向切面编程的一种运用。由于是基于web 框架的调用,因此可以使用依赖注入进行一些业务操作,同时一个拦截器实例在controller 生命周期内可以多次调用。
    缺点: 只能对controller 进行拦截,对一些比如访问静态资源的请求是无法拦截的。

可参考文章

11. Spring MVC 与Spring

1. Spring 容器和Spring MVC 容器的配置

  1. Spring 框架整个核心概念中,容器是核心思想,就是用来管理bean 的整个生命周期,但是在一个项目中容器不可能只有一个,Spring 可以包含多个容器,而且容器包含上下层关系。
  2. 常见场景:一个项目中引入了Spring 和Spring MVC 两个框架。Spring 是根容器,Spring MVC 是子容器。Spring MVC 可以访问Spring 容器中的Bean,Spring 不能访问Spring MVC 中的bean,如果配置不当常常会出现奇怪的问题:如Controller 方法无法拦截,Bean 被多次加载等问题。
  3. 一般这样明确边界:Spring 根容器负责所有其他非Controller 的Bean 的注册,Spring MVC 只负责Controller 相关的bean 注册。

2. Spring 容器与SpringMVC 容器的联系与区别

  1. ContextLoadListener 中创建Spring 容器主要用于整个web 程序需要共享的组件,比如Dao、数据库的ConnectionFactory等。
  2. DispatcherServlet 创建的Spring MVC 容器主要用于和该Servlet 相关的一些组件,比如Controller、ViewResolver 等。

3. ServletContext(Servlet 上下文) 和Spring MVC 的关系

  1. 服务器会为每一个工程创建一个对象即ServletContext,这个对象是全局唯一的,且工程中所有Servlet 共享这个ServletContext。
  2. Spring 启动的过程就是Servlet IoC 容器启动的过程,对于web 程序而言,IoC 容器的启动过程即使建立上下文的过程,为后面的Spring IoC 容器提供宿主环境。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值