SpringMVC工作流程原理

1、什么是Spring mvc?

Spring MVC: 它是属于Spring基本架构里面的一个组成部分,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面,所以我们在后期和 Spring 进行整合的时候,几乎不需要别的什么配置。
  SpringMVC 是类似于 Struts2 的一个 MVC 框架,在实际开发中,接收浏览器的请求响应,对数据进行处理,然后返回页面进行显示,但是上手难度却比 Struts2 简单多了。而且由于 Struts2 所暴露出来的安全问题,SpringMVC 已经成为了大多数企业优先选择的框架。

2、Spring MVC的组件:

1、 前端控制器 DispatcherServlet
  作用: 接收请求、响应结果 相当于转发器
  有了DispatcherServlet 就减少了其它组件之间的耦合度
2、 处理器映射器HandlerMapping
  作用: 根据请求的URL来查找Handler
3、 处理器适配器HandlerAdapter
  作用: 按照特定的规则(HandlerAdapter要求的规则)去执行Handler
  注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler
4、 处理器Handler
5、 视图解析器 View Resolver
  作用: 进行视图的解析 根据视图逻辑名解析成真正的视图(view)
6、 视图View
  View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf。。。)

3、SpringMVC工作流程原理图:

SpringMVC工作流程原理图
SpringMVC流程:

  • 1、 用户发送请求至前端控制器 DispatcherServlet
  • 2、 DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
  • 3、 处理器映射器 HandlerMapping 找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet
  • 4、 DispatcherServlet 调用 HandlerAdapter 处理器适配器。
  • 5、 HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。
  • 6、 Controller执行完成返回 ModelAndView
  • 7、 HandlerAdapter 将controller执行结果 ModelAndView 返回给 DispatcherServlet
  • 8、 DispatcherServletModelAndView 传给 ViewReslover 视图解析器。
  • 9、 ViewReslover 解析后返回具体View。
  • 10、DispatcherServlet 根据View进行渲染视图(即将模型数据填充至视图中)。
  • 11、 DispatcherServlet 响应用户。

4、案例

1、导入相关jar包:

相关jar包

2、web.xml文件配置

<!-- Springmvc前端配置 -->
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- contextConfigLocation配置Springmvc加载的配置文件(配置处理器映射器、适配器等)
		如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml)
	 -->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:spring-servlet.xml</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>

3、创建配置文件spring-servlet.xml文件,名称可以自定义。并配置处理器和映射器。

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- 处理器映射器 将bean的name作为url进行查找 ,
	              需要在配置Handler时指定beanname(就是url) 所有的映射器都实现 
		 HandlerMapping接口。
	 -->
	<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

	<!-- 配置 Controller适配器 -->
	<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
</beans>

4、创建自定义Controller

/**
 * 自定义控制器
 * 必须实现Controller接口
 * @author 叶小陌
 *
 */
public class UserController implements Controller{

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("本方法被调用了...");
		ModelAndView view = new ModelAndView();
		view.setViewName("/index.jsp");
		return view;
	}
}

5、测试效果

测试

------------------------------------------------华丽分割线------------------------------------------------

5、使用注解方式

1、修改配置文件开启注解

描述

2、配置如下

在spring-servlet.xml文件中配置:

<!-- 开启自动包扫描 -->
   <context:component-scan base-package="com.sxt.controller"/>
   <!-- 开启使用注解方式 -->
   <mvc:annotation-driven/>
3、Controller中使用注解:
@Controller
public class HelloController {

	@RequestMapping("/h1")
	@ResponseBody
	public void hello(Integer id, String name, String address, String[] hobby) {
		for (String string : hobby) {
			System.out.println(string);
		}
	}
	
	@RequestMapping("/h2")
	@ResponseBody
	public void user(User user) {
		System.out.println(user);
	}	
}

猜你喜欢

转载自blog.csdn.net/LOYE_YOU/article/details/89339535