• spring in action 5.1 小结 spring mvc起步


    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
    @Email 验证是否是合法的邮箱
    @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注解后面。

  • 相关阅读:
    编译impala2.0.0
    CentOS 7 安装Boost 1.61
    CentOS 6.4 编译安装LLVM3.3,Clang和Libc++
    批量修改dos文件到unix
    git win7 dos下设置代理
    vim源码编译启用python
    一张图看懂天津市教育云服务平台
    关于git中Pageant开机启动且自动关联秘钥
    Windows 10安装pip方法
    大数据中心的业务研发路线
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/7055661.html
Copyright © 2020-2023  润新知