SpringMVC笔记

SpringMVC笔记

一、常用注解类:

注意:使用注解之前,一定要spring-mvc.xml配置文件中配置

<context:componet-scan/> 

扫描注解。
例如:

<context:component-scan base-package="com.ztz" />

即扫描 com.ztz 包及其子包下的所有注解。

  1. Controller : 控制器类,标识该类为控制器类
  2. RequestMapping : 可用于控制器类定义和方法定义处,就是一个映射,如果定义在类上,相当于struts2中的配置文件中包的命名空间,如果定义在方法上,相当于struts2中一个action的名字。
    属性:value, method, consumes, produces, params, headers

    (1) value:请求方法的路径,如果不带其他属性,value可以省略,

    @RequestMapping("/login") 的格式,它等同于@RequestMapping(value = "/login")

    (2) method:请求的方式,有POST、GET、PUT、DELETE等,如果不写,表示接受任意请求方式。也可以使用数组指定多个请求方式

    @RequestMapping(value = "/login", method = {RequestMethod.POST, RequestMethod.GET})

    (3)consumes:指定请求提交内容的类型(Content-Type),可以是application/json、text/html等,当然它可以是一个字符串或者是一个字符串数组

    @RequestMapping(value = "/login",consumes={“application/json”, “text/html”})

    (4) produces:指定返回的内容类型,和consumes类似。可以是数组也可以是一个字符串。

    (5)param:表示某个请求必须包含该 参数=值 才会触发该方法

        @RequestMapping(value = "/login",param=“param=value”)

    表示只有当参数param等于value时才可以触发该方法,其中=可以换成!= ,表示当参数param不等于value时才会执行该方法。同样,也可以时数组也可以时字符串。当然也可以不指定具体参数的值,只有一个paramName,表示必须有此参数才会触发该方法。也可以使用!paramName,表示没有此参数时才会触发。

    (6)header:请求头Header中必须包含某些指定的参数值才会触发该方法。

        @RequestMapping(value = "/login",header= “content-type=text/*”)

    占位符
    这里写图片描述

  3. Componet 当不确定一个类是控制类还是Service类还是DAO类,使用该注解。

  4. Service 标识一个类为业务逻辑类
  5. Repository 标识一个类为DAO类
    这里写图片描述

    这里写图片描述

AutoWired和Resource注解的异同
这里写图片描述

推荐使用Resource注解。

二、其他注解类:

  1. PathVariable:当RequestMapping使用动态参数时配合其使用。
    这里写图片描述

    这里写图片描述
    最后一个使用了正则表达式

  2. RequestParam : SpringMVC在后台获取参数的方式有两种
    一种是 request.getParameter(“name”);
    另一种就是使用RequestParam注解
    属性:value、required、defaultValue
    这里写图片描述
    注意:参数类型尽量不要使用int,long而是其对应的包装类Integer、Long
    (3) CookieValue
    这里写图片描述

(4) SessionAttributes

这里写图片描述

(5) ResponseBody
这里写图片描述
这里写图片描述
(6) RequestHeader
这里写图片描述

三、SpringMVC数据校验

概述:
JSR 303 用于对Java Bean 中的字段的值进行验证,使得验证逻辑从业务代码中脱离出来。
是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回
一般用于表单提交页面(如用户名必填、只能由数字字母组成等等)
JSR 303 校验框架注解类:
这里写图片描述

Hibernate Validator扩展注解类:
这里写图片描述

实现数据校验步骤:

1、在pom.xml中添加以下jar包依赖
<!-- 自动加载 validation-api依赖和sl4j相关依赖-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.1.3.Final</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.1</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.1</version>
        </dependency>
        <!-- 自动加载 validation-api依赖和sl4j相关依赖-->
2、在spring-mvc.xml中配置
<!-- validator引用自定义,为了实现国际化-->
    <mvc:annotation-driven validator="validator" />
    <!-- 下面这两个是为了实现国际化的配置-->
    <bean id="validator"
          class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
        <!-- 如果不加默认到 使用classpath下的 ValidationMessages.properties -->
        <property name="validationMessageSource" ref="messageSource" />
    </bean>
    <!--
    basename引用的是 resources文件夹下的i18n文件夹下的messages文件,一共有两个
    一个是messages.properties,一个是messages_zh_CN.properties
    -->
    <bean id="messageSource"
          class="org.springframework.context.support.ResourceBundleMessageSource"
          p:basename="i18n/messages" />

这里写图片描述

3、在成员变量上添加注解
public class User implements Serializable {
    //message="{...}" 这是为了实现国际化,如果没有要求,可以直接写你要提示的信息
    //非空验证
    @NotEmpty(message="{NotEmpty.user.userName}")
    private String userName ;
    //通过 正则表达式验证
    @Pattern(regexp="[0-9a-zA-Z]{6,30}", message="{Pattern.user.password}")
    private String password ;
    //长度限制验证
    @Length(min=2, max=100, message="{Length.user.realName}")
    private String realName ;
    //邮箱验证
    @Email(message="{Email.user.email}")
    private String email ;
    @NotNull(message = "{NotNull.user.age}")
    //范围验证
    @Between(min = 18, max = 45)
    private Integer age ;
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getRealName() {
        return realName;
    }
    public void setRealName(String realName) {
        this.realName = realName;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
4、在Controller测试

注册的JSP代码

<form action="doRegister.html" method="post">
            <p>
                ${ERR_userName }<br>
                <span>用户名:</span><input type="text" name="userName">
            </p>
            <p>
                ${ERR_password }<br>
                <span>密    码:</span><input type="password" name="password">
            </p>
            <p>
                ${ERR_realName }<br>
                <span>真实姓名:</span><input type="text" name="realName">
            </p>
            <p>
                ${ERR_email }<br>
                <span>邮    箱:</span><input type="text" name="email">
            </p>
            <p>
                ${ERR_age }<br>
                <span>年    龄:</span><input type="text" name="age">
            </p>            
            <p>
                <input type="submit" value="注册">
            </p>
        </form>

Controller代码

@RequestMapping(value = "/doRegister", method = RequestMethod.POST)
    //这里添加了一个 @Valid 注解,标识要对user参数进行验证,result用来收集验证结果,map相当于一个session
    public String doLogin(@Valid User user, BindingResult result, ModelMap map){
        // 如果入参有问题,返回注册页面
        if (result.hasErrors()) {
            List<FieldError> errorList = result.getFieldErrors();
            for(FieldError error : errorList){
                System.out.println(error.getField() + "*" + error.getDefaultMessage());
                map.put("ERR_" + error.getField(), error.getDefaultMessage());
            }
            return "/WEB-INF/jsp/register.jsp";
        }
        // 这里省略注册代码
        return "/WEB-INF/jsp/registersuccess.jsp";
    }
四、SpringMVC中的拦截器与异常处理
1、装配与自定义拦截器

通常作用于 日志记录、权限检查、性能监控、通用行为

2、定义一个Interceptor类两种方式:

(1)、实现HandlerInterceptor或者继承HandlerInterceptoradapter
(2)、HandlerInterceptor中的三个方法

A、  preHandle(HttpServletRequest request,HttpServletResponse response,Object handle); 请求处理之前调用。
B、  postHandle(HttpServletRequest request,HttpServletResponse response,Object handle,ModelAndView modelAndView); 请求处理之后调用。
C、  afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handle,Exception ex); 整个请求结束后(渲染了对应的视图之后)调用。

3、 配置拦截器
这里写图片描述

五、异常处理

这里写图片描述

这里写图片描述

六、SpringMVC与数据库的交互

1、 JdbcTemplate连接数据库
这里写图片描述

这里写图片描述

2、 Mybatis框架连接数据库
待续。。。。。

内容未完,结束线先行
—————————-这里是结束线—————————————

– 2017-08-02 11:20

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值