0 配置 DispatcherServlet 是 spring mvc的核心,常规配置方法可以查看之前博客。springMVC简单例子
在此使用servlet 3 规范和 spring3.1 功能增强。
两个应用上下文,DispatcherServlet 和 ContextLoaderListener
DispatcherServlet 加载包含web组件的bean,如控制器、视图解析器以及处理器映射。
ContextLoaderListener 加载应用中其他的bean,通常是驱动应用后端的中间层和数据层组件。
public class ContactWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { protected Class<?>[] getRootConfigClasses() { return new Class[]{ RootConfig.class}; } protected Class<?>[] getServletConfigClasses() { return new Class[]{ WebConfig.class}; } protected String[] getServletMappings() { return new String[]{"*.action"}; } }
DispatcherServlet 启动的时候汇创建 spring 应用上下文,并加载配置文件或配置类中声明的bean。
getServletConfigClasses() 方法返回带有@Configuration 注释的类,用来定义 DispatcherServlet 的配置类。
getRootConfigClasses() 方法返回带有@Configuration 注释的类,用来配置 ContextLoaderListener 创建的应用上下文bean。
下面是 WebConfig 的配置类,
@Configuration @EnableWebMvc @ComponentScan(basePackages = {"com.huitong.controller", "com.huitong.entity"}) public class WebConfig extends WebMvcConfigurerAdapter{ @Bean public ViewResolver viewResolver() { InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver(); internalResourceViewResolver.setPrefix("/WEB-INF/jsp/"); internalResourceViewResolver.setSuffix(".jsp"); return internalResourceViewResolver; } /** * 将静态资源的请求转发到 Servlet 容器中默认的 Servlet 上, * 而不是 DispatcherServlet 本身处理此类请求 * @param configurer */ @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } }
1)@EnableWebMvc 表示启用Spring MVC ,@ComponentScan 开启组件扫描。
2)viewResolver 方法添加了 InternalResourceViewResolver 视图解析器。
3)configureDefaultServletHandling 方法主要是将静态资源的请求转发到 Servlet 容器中默认的 Servlet 上。
下面是 RootConfig 的配置,因为现在还不需要其他持久层的框架,因此暂时不需要很多配置。
@Configuration @ComponentScan(basePackages = {"com.huitong.dao"}, excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) }) public class RootConfig { }
至此 Spring MVC 框架搭建好了,可以进行简单测试。
1 web应用程序重要特性有状态管理、工作流、验证。HTTP协议是无状态的。
2 从客户端传数据到服务端的方式
1)查询参数
2)表单参数
3)路径变量
3 spring mvc获取参数的方式
3.1 处理查询参数一般使用以下方法
@RequestParam用于将请求参数区数据映射到功能处理方法的参数上。
@RequestParam有三个属性,分别如下:
(1) value 请求参数的参数名,作为参数映射名称;
(2) required 该参数是否必填,默认为true(必填),当设置成必填时,如果没有传入参数,报错;
(3) defaultValue 设置请求参数的默认值;注意查询参数是String类型的。
3.2 处理路径参数更适合于面向资源的请求,mvc提供在@RequestMapping路径中添加占位符。占位符的名称在{}中,占位符部分可以使任意值。
需要和@PathVariable联合使用。如果@PathVariable没有value属性的话,会假设占位符名称和方法的参数名相同。
3.3 通过控制器方法参数接受用户post过来的数据。
3.4 表单校验,注解方式。
从 Spring 3.0 开始,Springmvc 中提供了对java 校验 API 的支持。更详细的信息可以参看 使用 hibernate validator 进行表单验证
注解 | 描述 |
@AssertFalse | 所注解的元素必须是boolean,并且是false |
@AssertTrue | 所注解的元素必须是boolean,并且是true |
@DecimalMax | 必须是数字,并且要小于或等于给定的值 |
@DecimalMin | 必须是数字,并且要大于或等于给定的值 |
@Digits | 必须是数字,必须有指定的位数 |
@Future | 必须是将来的日期 |
@NotNull | 不能为null |
@Pattern | 必须匹配给定的正则表达式 |
@Size | 长度需要符合给定的范围 |
@Null | 验证对象是否为 null |
@NotNull | 验证对象是否不为 null |
@AssertTrue | 验证 Boolean 对象是否为 true |
@AssertTrue | 验证 Boolean 对象是否为 false |
@Max(value) | 验证 Number 和 String 对象是否小于等于指定值 |
@Min(value) | 验证 Number 和 String 对象是否大于等于指定值 |
@DecimalMax(value) | 验证注解的元素值小于等于 @DecimalMax 指定的 value 值 |
@DecimalMin(value) | 验证注解的元素值大于等于 @DecimalMin 指定的 value 值 |
@Digits(integer,fraction) | 验证字符串是否符合指定格式的数字,integer 指定整数精度,fraction 指定小数精度 |
@Size(min,max) | 验证对象长度是否在给定的范围内 |
@Past | 验证 Date 和 Calendar 对象是否在当前时间之前 |
@Future | 验证 Date 和 Calendar 对象是否在当前时间之后 |
@Pattern | 验证 String 对象是否符合正则表达式的规则 |
@NotBlank | 检查字符串是不是 Null,被 Trim 的长度是否大于0,只对字符串,且会去掉前后空格 |
@URL | 验证是否是合法的 url |
验证是否是合法的邮箱 | |
@CreditCardNumber | 验证是否是合法的信用卡号 |
@Length(min,max) | 验证字符串的长度必须在指定范围内 |
@NotEmpty | 检查元素是否为 Null 或 Empty |
@Range(min,max,message) | 验证属性值必须在合适的范围内 |
用于对象属性校验。
此时,注册方法校验使用如下方法
@RequestMapping(value="/register") public String processRegister(@Valid Person person, Errors error){ if(error.hasErrors()){ return "registerform"; } ... }
@Valid注解会告知spring,需要确保这个对象满足校验规则。
注意:如果有校验错误的话,可以通过Errors对象进行访问。Errors对象参数要紧跟在@Valid注解后面。