一、springmvc 概述
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦
二、springmvc的实现
1 、在 web.xml 中配置 DispatcherServlet 2、 加入 Spring MVC 的配置文件3、编写处理请求的处理器,并标识为处理器4、编写视图
加入以下jar包
jar 包:• commons-logging-1.1.3.jar– spring-aop-4.0.0.RELEASE.jar– spring-beans-4.0.0.RELEASE.jar– spring-context-4.0.0.RELEASE.jar– spring-core-4.0.0.RELEASE.jar– spring-expression-4.0.0.RELEASE.jar– spring-web-4.0.0.RELEASE.jar– spring-webmvc-4.0.0.RELEASE.jar
web.xml文件的配置
配置 DispatcherServlet :DispatcherServlet 默认加载 /WEB-• INF/<servletName-servlet>.xml 的 Spring 配置文件, 启动 WEB 层 的 Spring 容器。可以通过 contextConfigLocation 初始化参数自定 义配置文件的位置和名称
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>Archetype Created Web Application</display-name> <!-- 配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELETE 或 POST 请求 --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
创建 Spring MVC 配置文件: 配置自动扫描的包
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!--自动扫描包 搜索spring控件 --> <context:component-scan base-package="com.mvc.example"></context:component-scan> <!-- 视图页面配置 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/views/</value> </property> <property name="suffix"> <value>.jsp</value> </property> <!--自定义视图解析 --> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> <property name="order" value="100"></property> </bean> <!-- 配置直接转发的页面 --> <!-- 可以直接相应转发的页面, 而无需再经过 Handler 的方法. --> <mvc:view-controller path="/success" view-name="success"/> <!-- 在实际开发中通常都需配置 mvc:annotation-driven 标签 --> <mvc:annotation-driven></mvc:annotation-driven> </bean> </beans>
创建请求处理器类
@Controller public class Hello { @RequestMapping(value="hello",method=RequestMethod.GET) public ModelAndView heelo() { System.out.println("hello"); ModelAndView mv = new ModelAndView("sucess");//指定视图 //向视图中添加所要展示或使用的内容,将在页面中使用 mv.addObject("message", "aaa"); mv.addObject("name","name"); return mv; } }
@RequestMapping
Spring MVC 使用 @RequestMapping 注解为控制器指定可• 以处理哪些 URL 请求 在控制器的类定义及方法定义处都可标注
• @RequestMapping 类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录– 方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若– 类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目录 DispatcherServlet 截获请求后,就通过控制器上
• @RequestMapping 提供的映射信息确定请求所对应的处理 方法。
映射请求参数、请求方法或请求头
@RequestMapping 映射请求
Ant 风格资源地址支持 3 种匹配符:• ?:匹配文件名中的一个字符– *:匹配文件名中的任意字符– **:** 匹配多层路径– @RequestMapping 还支持 Ant 风格的 URL:• /user/*/createUser: 匹配 – /user/aaa/createUser、/user/bbb/createUser 等 URL /user/**/createUser: 匹配 – /user/createUser、/user/aaa/bbb/createUser 等 URL /user/createUser??: 匹配 – /user/createUseraa、/user/createUserbb 等 URL
@PathVariable 映射 URL 绑定的占位符
带占位符的 URL 是 Spring3.0 新增的功能,该功能在 • SpringMVC 向 REST 目标挺进发展过程中具有里程碑的 意义 通过 @PathVariable 可以将 URL 中占位符参数绑定到控• 制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过 @PathVariable("xxx") 绑定到操作方法的入参中.
REST风格
HiddenHttpMethodFilter:浏览器 form 表单只支持 GET • 与 POST 请求,而DELETE、PUT 等 method 并不支 持,Spring3.0 添加了一个过滤器,可以将这些请求转换 为标准的 http 方法,使得支持 GET、POST、PUT 与 DELETE 请求。
<mvc:annotation-driven /> 会自动注•册RequestMappingHandlerMapping、RequestMappingHandlerAdapter与ExceptionHandlerExceptionResolver三个bean。还将提供以下支持:•支持使用ConversionService实例对表单参数进行类型转换–支持使用@NumberFormat annotation、@DateTimeFormat–注解完成数据类型的格式化支持使用@Valid注解对JavaBean 实例进行JSR 303 验证–支持使用@RequestBody和@ResponseBody注解
HttpMessageConverter<T>HttpMessageConverter<T>是Spring3.0 新添加的一个接•口,负责将请求信息转换为一个对象(类型为T),将对象(类型为T)输出为响应信息HttpMessageConverter<T>接口定义的方法:•Boolean canRead(Class<?> clazz,MediaTypemediaType): 指定转换器–可以读取的对象类型,即转换器是否可将请求信息转换为clazz类型的对象,同时指定支持MIME 类型(text/html,applaiction/json等)Boolean canWrite(Class<?> clazz,MediaTypemediaType):指定转换器–是否可将clazz类型的对象写到响应流中,响应流支持的媒体类型在MediaType中定义。LIst<MediaType> getSupportMediaTypes():该转换器支持的媒体类–型。T read(Class<? extends T> clazz,HttpInputMessageinputMessage):–将请求信息流转换为T 类型的对象。void write(T t,MediaTypecontnetType,HttpOutputMessgae–outputMessage):将T类型的对象写到响应流中,同时指定相应的媒体类型为contentType。