Spring MVC
Spring MVC是目前主流的MVC设计模式的企业级框架,是Spring的一个子模块,开发起来无需整合。
MVC设计模式
将应用程序分成Controller、Model、View ,Contrller接收客户端请求,调用Model生成业务数据,传递给View层展示。
开发SpringMVC程序
1、jar包
spring-aop.jar
spring-beans.jar
spring-context-jar
spring-expression.jar
spring -core.jar
spring -web.jar
Commons-logging.jar
spring-webmvc.jar
第一个SpringMVC程序
Servlet--->SpringMVC
jsp -> Servlet(SpringMVC) ->Jsp
普通的servlet流程 请求 url-pattern -----> 交给对应的servlet去处理
如何让Springmvc介入程序
通过配置一下web.xml,拦截所有请求,交给SpringMVC处理
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value> 类加载器 加载springmvc.xml
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
配置springmvc.xml
<!-- 扫描有注解的包 -->
<context:component-scan base-package="com.xingwei.handler"></context:component-scan>
<!-- 配置视图解析器(InternalResourceViewResolver) -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
流程
通过<a href="welcome">first springmvc -welcome</a> ——>发出请求 ——>被@RequestMapping("welcome")拦截
——>返回一个success ——>通过视图解析器的前缀后缀去拼接 <property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
——>/views/success.jsp
完整的代码罗列
<!--index.jsp-->
<a href="welcome">first springmvc -welcome</a>
<!--跳到Controller-->
//接口 注解 配置 注解
@Controller //控制器
public class SpringMVCHandler {
@RequestMapping("welcome")
public String welcome() {
return "success" ;
}
}
<!--返回success,通过视图解析器去拼接-->
<!-- 配置视图解析器(InternalResourceViewResolver) -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--找到/views/success.jsp-->
welcome to spring mvc
通过以下配置,让程序扫描springmvc.xml配置文件
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
指定springmvc配置文件的路径 ,如果要省略 必须放到 默认路径:/WEB-INF/springDispatcherServlet-servlet.xml
一般默认是放到类路径,不放这里,默认的名称springmvc.xml
运行以上程序,可以发现
映射 是去匹配@RequestMapping注解 可以和方法名、类名不一致 默认是使用了请求转发的方式
通过method指定 请求方式(get post delete put)
@RequestMapping(value = "welcome",method = RequestMethod.POST,params = {"name2=zs","age!=23"})
name2="name2"
name指的是前台表单输入框中是name引号里的name age指的是前台表单输入框中name引号里的age
age!=23 a.如果有name="age" 则值不能是23,b.没有age也可以
Spring MVC 的核心组件
-
DispatcherServlet:前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。
-
Handler:处理器,完成具体的业务逻辑,相当于 Servlet 或 Action。
-
HandlerMapping:DispatcherServlet 接收到请求之后,通过 HandlerMapping 将不同的请求映射到不同的 Handler。
-
HandlerInterceptor:处理器拦截器,是一个接口,如果需要完成一些拦截处理,可以实现该接口。
-
HandlerExecutionChain:处理器执行链,包括两部分内容:Handler 和 HandlerInterceptor(系统会有一个默认的 HandlerInterceptor,如果需要额外设置拦截,可以添加拦截器)。
-
HandlerAdapter:处理器适配器,Handler 执行业务方法之前,需要进行一系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到 JavaBean 等,这些操作都是由 HandlerApater 来完成,开发者只需将注意力集中业务逻辑的处理上,DispatcherServlet 通过 HandlerAdapter 执行不同的 Handler。
-
ModelAndView:装载了模型数据和视图信息,作为 Handler 的处理结果,返回给 DispatcherServlet。
-
ViewResolver:视图解析器,DispatcheServlet 通过它将逻辑视图解析为物理视图,最终将渲染结果响应给客户端。
Spring MVC 的工作流程
-
客户端请求被 DisptacherServlet 接收。
-
根据 HandlerMapping 映射到 Handler。
-
生成 Handler 和 HandlerInterceptor。
-
Handler 和 HandlerInterceptor 以 HandlerExecutionChain 的形式一并返回给 DisptacherServlet。
-
DispatcherServlet 通过 HandlerAdapter 调用 Handler 的方法完成业务逻辑处理。
-
Handler 返回一个 ModelAndView 给 DispatcherServlet。
-
DispatcherServlet 将获取的 ModelAndView 对象传给 ViewResolver 视图解析器,将逻辑视图解析为物理视图 View。
-
ViewResovler 返回一个 View 给 DispatcherServlet。
-
DispatcherServlet 根据 View 进行视图渲染(将模型数据 Model 填充到视图 View 中)。
-
DispatcherServlet 将渲染后的结果响应给客户端。
Spring MVC 流程非常复杂,实际开发中很简单,因为大部分的组件不需要开发者创建、管理,只需要通过配置文件的方式完成配置即可,真正需要开发者进行处理的只有 Handler 、View。