springMVC执行原理
在狂神说的spirngMVC视频中了解到了springMVC的执行原理
springMVC是对servlet的优化(底层还是用servlet写的),在原始的servlet中依然需要用户对自己的请求进行响应(比如重定向等操作),SpringMVC将这些操作另其一层 交给DispatcherServlet和其SpringMVC的相关组建执行,简化了操作。
根据此图,大致分析下SpringMVC的执行流程:
- 首先用户发送请求给服务器,服务器将请求(url)传递给DispatcherServlet
- DispatcherServlet首先将请求的url 传给HandlerMappe(处理器映射器),其分析请求的处理程序,找到其在服务器的位置,传给DispatcherServlet。
- DispatcherServlet将位置信息传给HandlerAdapter(处理器适配器),其会执行处理程序,调用service和dao层,返回将结果数据和跳转页面,返回给DispatcherServlet
- DispatcherServlet将数据结果和跳转页面传给ViewReslver(视图解析器),视图解析器会将页面指定,并将数据渲染到页面上。
- DispatcherServlet跳转到指定页面。
SpringMVC入门
- 导入jar包
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<!--servlet表达式-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!--jsp-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<!--EL表达式-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
配置springmvc-servlet.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<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 class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--BeanNameUrlHandlerMapping这个处理器会根据传的url地址 在文件总查找相同的bean的name 在根据处理器映射器穿的位置 传给处理器适配器执行-->
<bean id="/hello" class="com.controller.HelloController"/>
</beans>
处理程序
package com.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("msg","HelloSpringMVC!");
System.out.println("程序执行");
mv.setViewName("hello");
return mv;
}
}