SpringMVC
框架(一)
一、简介
1.1 SpringMVC
概述
Spring MVC
属于SpringFrameWork
的后续产品,是Spring
为展现层提供的基于MVC
设计理念的优秀的Web
框架,是目前最主流的MVC
框架。
Spring MVC
通过一套MVC
注解,让POJO
成为处理请求的控制器,而无须实现任何接口。
天生与Spring
框架集成(如IOC
容器、AOP
等),而且支持REST
风格的URL
请求。
1.2 SpringMVC
处理请求的简单路程图
基本步骤:
- 客户端请求提交到
DispatcherServlet
- 由
DispatcherServlet
控制器查询一个或多个HandlerMapping
,找到处理请求的Controller
;DispatcherServlet
将请求提交到Controller
(也成为Handler
);Controller
调用也务逻辑处理后,返回ModelAndView
;DispatcherServlet
查询一个或多个ViewResoler
视图解析器,找到ModelAndView
指定的视图;- 视图负责将结果显示到客户端
1.3 SpringMVC
中的主要组件
DispatcherServlet
:前端控制器Controller
:页面控制器/处理器,做的是MVC
中的C
的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理。HandlerMapping
:请求映射到处理器,找谁来处理,如果映射成功返回一个HandlerExecutionChain
对象(包含一个Handler
处理器(页面控制器)对象、多个HandlerInterceptor
拦截器对象);HandlerAdaptor
:处理器适配器;ViewResolver
:视图解析器,找谁来处理返回的页面。把逻辑视图解析为具体的View,进行这种策略模式,很容易更换其他视图技术;MultipartResolver
:文件上传解析器HandlerExceptionResolver
:异常处理器
二、案例(Hello SpringMVC
)
创建Web工程
2.1 jar
包
2.2 在web.xml
配置前端控制器DispatcheServlet
<!--配置前端控制器 -->
<servlet>
<servlet-name>dispatcherServlet</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>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
2.3 在src
目录下创建SpringMVC
的配置文件,并命名为springmvc.xml
<!--配置自动扫描的包-->
<context:component-scan base-package="com.springmvc"/>
<!--配置视图解析器-->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置前缀属性-->
<property name="prefix" value="/WEB-INF/views/"/>
<!--配置后置属性-->
<property name="suffix" value=".jsp"/>
</bean>
2.4 在index.jsp
页面中添加一个超链接
<a href="${pageContext.request.contextPath}/helloworld">Hello SpringMVC</a>
2.5 创建控制器/处理器
@Controller
public class HelloWorld {
@RequestMapping(value = "/helloworld")
public String helloWorld(){
System.out.println("Hello SpringMVC!");
return "success";
}
}
2.6 在WEB-INF/views
目录下创建视图页面success.jsp
随便写点儿页面
2.7 Hello World
请求流程图解
三、通过@RequestMapping
注解映射请求
@RequestMapping
注解可以添加到类上,也可以添加到方法上
- 标记在类上:提供初步的请求映射信息。相对于
WEB
应用的根目录- 标记在方法上:提供进一步的细分映射信息。相对于标记在类上的
URL
3.1 @RequestMapping
注解常用的属性
3.1.1 value
属性
- 用来设置要映射的请求地址
- 值的类型是
String
类型的数组,所以可以同时设置多个映射的地址
3.1.2 method
属性
- 用来设置映射的请求方式
- 值的类型是
RequestMethod
枚举类型的数组 - 请求方式有
Get
、Post
、Put
、Delete
等
3.1.3 可以使用 params
和 headers
来更加精确的映射请求,而且支持简单的表达式
params
属性(了解)
- 用来设置请求地址中必须包含的请求参数
- 值的类型是
String
类型的数组- 各种表达式说明:
1.param1
: 表示请求必须包含名为param1
的请求参数
2.!param1
: 表示请求不能包含名为param1
的请求参数
3.param1 != value1
: 表示请求包含名为param1
的请求参数,但其值不能为value1
4.{"param1=value1", "param2"}
: 请求必须包含名为param1
和param2
的两个请求参数,且param1
参数的值必须为value1
headers
属性(了解)
- 用来设置请求地址中必须包含的请求头
- 值的类型
String
类型的数组
3.2 @RequestMapping
支持 Ant
风格的路径(了解)
3.2.1 Ant
风格资源地址支持3种匹配符
- ?:匹配一个字符
- *:匹配任意字符
- **:匹配多层路径
@RequestMapping("testAnt/?/ant")
public String testAnt(){
System.out.println("测试Ant风格的URL:testAnt/?/ant");
return SUCCESS;
}
@RequestMapping("testAnt/*/ant")
public String testAnt2(){
System.out.println("测试Ant风格的URL:testAnt/*/ant");
return SUCCESS;
}
@RequestMapping("testAnt/**/ant")
public String testAnt3(){
System.out.println("测试Ant风格的URL:testAnt/**/ant");
return SUCCESS;
}
页面连接