SpringMVC实用技术

文件上传下载

在这里插入图片描述

MultipartResolver接口

  • MultipartResolver接口定义了文件上传过程中的相关操作,并对通用性操作进行了封装
    • MultipartResolver接口底层实现类CommonsMultipartResovler
    • CommonsMultipartResovler并未自主实现文件上传下载对应的功能,而是调用了apache的文件上传下载组件
<dependency> 
   <groupId>commons-fileupload</groupId> 
   <artifactId>commons-fileupload</artifactId> 
   <version>1.4</version>
</dependency>

文件上传下载实现

在这里插入图片描述

服务器上传文件注意事项

  1. 文件命名问题,获取上传文件名,并解析文件与扩展名
file.getOriginalFilename();
  1. 文件名过长问题
  2. 文件保存路径
ServletContext context = request.getServletContext();
String basePath = context.getRealPath("/uploads");
File file = new File(basePath+"/");
if(!file.exists()) file.mkdirs();
  1. 文件重名问题
String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();

Rest

在这里插入图片描述

Rest行为约定方式

在这里插入图片描述

Restful 开发入门

@RestController
public class UserController {
     @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
     public String restGet(@PathVariable String id){
          System.out.println("restful is running ....get:"+id);
          return "success.jsp"; 
          }
     @RequestMapping(value = "/user/{id}",method = RequestMethod.POST)
     public String restPost(@PathVariable String id){
          System.out.println("restful is running ....post:"+id);
          return "success.jsp"; 
          }
     @RequestMapping(value = "/user/{id}",method = RequestMethod.PUT)
     public String restPut(@PathVariable String id){
          System.out.println("restful is running ....put:"+id);
          return "success.jsp"; 
          }
     @RequestMapping(value = "/user/{id}",method = RequestMethod.DELETE)
     public String restDelete(@PathVariable String id){
          System.out.println("restful is running ....delete:"+id);
          return "success.jsp"; 
          } 
}
  • 开启 SpringMVC对Restful风格的访问支持过滤器,即可通过页面表单提交PUT与DELETE请求
<filter> 
     <filter-name>hiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter> 
<filter-mapping>
     <filter-name>hiddenHttpMethodFilter</filter-name> 
     <servlet-name>DispatcherServlet</servlet-name>
</filter-mapping>
  • 页面表单使用隐藏域提交请求类型,参数名称固定为_method,必须配合提交类型method=post使用
<form action="/user/1" method="post"> 
     <input type="hidden" name="_method" value="PUT"/>
     <input type="submit"/>
</form>

Restful简化配置

  • Restful 请求路径简化配置方式
    在这里插入图片描述

表单校验

表单校验的重要性

在这里插入图片描述

表单校验分类

  • 校验位置:
    • 客户端校验
    • 服务端校验
  • 校验内容与对应方式:
    • 格式校验
      • 客户端:使用JS技术,利用正则表达式校验
      • 服务端:使用校验框架
    • 逻辑校验
      • 客户端:使用Ajax发送要校验的数据,在服务端完成逻辑校验,返回校验结果
      • 服务端:接收到完整的请求后,在执行业务操作前,完成逻辑校验

表单校验规则

-  长度 :列如用户名长度,评论字符数量
-  非法字符:例如用户名组成
- 数据格式:例如Email格式,IP地址格式
- 边界值:例如转账金额上限,年龄上下限
- 重复性:例如用户名是否重复
- ........

表单校验框架

  • JSR(Java Specification Requests) : java规范提案

JSR规范列表

  • 企业应用技术
    • Contexts and Dependency Injection for Java (Web Beans 1.0) (JSR 299)
    • Dependency Injection for Java 1.0 (JSR 330)@postConstruct, @PreDestroy
    • Bean Validation 1.0 (JSR 303)
    • Enterprise JavaBeans 3.1 (includes Interceptors 1.1) (JSR 318)
    • Java EE Connector Architecture 1.6 (JSR 322)
    • Java Persistence 2.0 (JSR 317)
    • Common Annotations for the Java Platform 1.1 (JSR 250)
    • Java Message Service API 1.1 (JSR 914)
    • Java Transaction API (JTA) 1.1 (JSR 907)
    • JavaMail 1.4 (JSR 919)
  • Web应用技术
    • Java Servlet 3.0 (JSR 315)
    • JavaServer Faces 2.0 (JSR 314)
    • JavaServer Pages 2.2/Expression Language 2.2 (JSR 245)
    • Standard Tag Library for JavaServer Pages (JSTL) 1.2 (JSR 52)
    • Debugging Support for Other Languages 1.0 (JSR 45)
  • 模块化(JSR 294)
    • Swing 应用框架(JSR 296)
    • JavaBeans Activation Framework (JAF) 1.1 (JSR 925)
    • Streaming API for XML (StAX) 1.0 (JSR 173)
  • 管理与安全技术
    • Java Authentication Service Provider Interface for Containers (JSR 196)
    • Java Authorization Contract for Containers 1.3 (JSR 115)
    • Java EE Application Deployment 1.2 (JSR 88)
    • J2EE Management 1.1 (JSR 77)
  • Java SE中与 Java EE有关规范
    • JCache API (JSR 107)
    • Java Memory Model (JSR 133)
    • Concurrency Utilitie (JSR 166)
    • Java API for XML Processing (JAXP) 1.3 (JSR 206)
    • Java Database Connectivity 4.0 (JSR 221)
    • Java Management Extensions (JMX) 2.0 (JSR 255)
    • Java Portlet API (JSR 286)
  • Web Service技术
    • Java Date 与Time API (JSR 310)
    • Java API for RESTful Web Services (JAX-RS) 1.1 (JSR 311)
    • Implementing Enterprise Web Services 1.3 (JSR 109)
    • Java API for XML-Based Web Services (JAX-WS) 2.2 (JSR 224)
    • Java Architecture for XML Binding (JAXB) 2.2 (JSR 222)
    • Web Services Metadata for the Java Platform (JSR 181)
    • Java API for XML-Based RPC (JAX-RPC) 1.1 (JSR 101)
    • Java APIs for XML Messaging 1.3 (JSR 67)
    • Java API for XML Registries (JAXR) 1.0 (JSR 93)

表单校验框架

在这里插入图片描述

开启校验

  • 名称:@Valid, @Validated
  • 类型:形参注解
  • 位置:处理器类中的实体类类型的方法形参前方
  • 作用:设定对当前实体类类型参数进行校验
  • 范例:
@RequestMapping(value = "/addemployee")
public String addEmployee(@Valid Employee employee) {
      System.out.println(employee);
}
  • 注意:开启校验仅能对实体类类型参数进行,校验是对实体类类型参数中的属性进行校验

设定校验规则

  • 名称:@NotNull
  • 类型:属性注解 等
  • 位置:实体类属性上方
  • 作用:设定当前属性校验规则
  • 范例:
public class Employee{
    @NotNull(message = "姓名不能为空")
    private String name;//员工姓名
}
  • 每个校验规则所携带的参数不同,根据校验规则进行相应的调整
  • 具体的校验规则查看对应的校验框架进行获取

获取校验信息

在这里插入图片描述

校验器

在这里插入图片描述

嵌套校验

  • 名称:@Valid
  • 类型:属性注解
  • 位置:实体类中的引用类型属性上方
  • 作用:设定当前引用类型属性中的属性开启校验
  • 范例:
public class Employee {
     @Valid
     private Address address; 
}
  • 注意:开启嵌套校验后,被校验对象内部需要添加对应的校验规则

分组校验

  • 通一个模块,根据执行的业务不同,需要校验的属性会有不同

    • 新增用户
    • 修改用户
  • 对不同种类的属性进行分组,在校验时可以指定参与校验的字段所属的组类别

    • 定义组(通用)
public interface GroupOne {
}
  • 为属性设置所属组,可以设置多个
@NotEmpty(message = "姓名不能为空",groups = {GroupOne.class})
private String name;//员工姓名

  • 开启组校验
public String addEmployee(@Validated({GroupOne.class}) Employee employee){
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值