3.1 SpringMVC的执行流程
用户发送请求至前端控制器DispatcherServlet。
DispatcherServlet收到请求调用HandlerMapping处理器映射器。
处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
DispatcherServlet调用HandlerAdapter处理器适配器。
HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
Controller执行完成返回ModelAndView。
HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
ViewReslover解析后返回具体View。
DispatcherServlet根据View进行染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户。
3.2 SpringMVC注解解析
@RequestMapping作用:用于建立请求URL和处理请求方法之间的对应关系位置:
类上,请求URL的第一级访问目录。此处不写的话,就相当于应用的根目录
方法上,请求URL的第二级访问目录,与类上的使用@ReqquestMapping标注的-级目录一起组成访问虚拟路径属性
value: 用于指定请求的URL。它和path属性的作用是一样的
method:用于指定请求的方式
params: 用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样
age:
params ={“accountName”},表示请求参数必须有accountName
params =["moeny!100”},表示请求参数中money不能是100
3.3 SpringMVC注解解析
1.mvc命名空间引入命名空间: xmIns:context=" http://www,springframeworkorg/schema/context!
xmIns :mvc=" http://www.springframework.org/schema/mvc"约束地址: http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframeworkorg/schema/mvc http://www.springframework.org/schema/mve/spring-mvc.xsd 2.组件扫描SpringMvc基于spring容器,所以在进行springMvc操作时,需要将controller存储到spring容器中,如果使用@Controller注解标注的话,就需要使用 <context:component-scan base-package=“com.jian.controller"/>进行组件扫描
3.4 SpringMVC的XML配置解析
1.视图解析器SpringMvc有默认组件配置,默认组件都是 DispatcherServlet.properties配置文件中配置的,该配置文件地址 org/springframework/web/servlet/DispatcherServlet.properties,该文件中配置了默认的视图解析器,如下:org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver翻看该解析器源码,可以看到该解析器的默认设置,如下:REDIRECT_URL_PREFIX = "redirect :" --重定向前缀FORWARD_URL_PREFIX = "forward:" --转发前缀(默认值)prefix = ""; --视图名称前缀suffix = ""; --视图名称后级
3.5知识要点
SpringMVC的相关组件
前端控制器: DispatcherServlet
处理器映射器: HandlerMapping
处理器适配器: HandlerAdapter
处理器: Handler
视图解析器: View Resolver
视图: View
SpringMVC的注解和配置
请求映射注解:@RequestMapping
视图解析器配置:REDIRECT_URL_PREFIX = "redirect:"
FORWARD URLPREFIX = "forward:"
prefix="";
suffix="";

packagecom.jian.controller;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping( "/user")//模块
publicclassUserController {
//请求地址 http://localhost:8080/spring_jian_mvc_war_exploded/xxx/quick?name=xxx
//访问xxx模块下的quick模块
@RequestMapping(value="/quick",method=RequestMethod.GET,params= {"username"})//quick是映射地址
publicStringsave(){
System.out.println("Controller save running...");
return"success";
}
}
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--Controller的组件扫描-->
<context:component-scanbase-package="com.jian">
<context:include-filtertype="annotation"expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--配置内部资源视图适配器-->
<beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--/jsp/success.jsp-->
<propertyname="prefix"value="/jsp/"></property><!--前缀-->
<propertyname="suffix"value=".jsp"></property><!--后缀-->
</bean>
</beans>