1. REST风格
REST(Representational State Transfer)是一种软件架构风格,主要用于构建基于HTTP协议的Web服务。RESTful服务通过URL来表示资源,通过HTTP方法(GET、POST、PUT、DELETE)来操作资源。Spring MVC提供了强大的支持来构建RESTful应用程序
- 资源表示:资源通过URL来表示
- 无状态性:每个请求都包含了所有必要的信息,服务器不存储任何客户端状态
- 统一接口:通过HTTP标准方法操作资源
- 自描述性消息:通过HTTP头信息和状态码传递信息
2. Spring表单及数据校验
Spring框架为处理Web表单提供了强大的支持,特别是与数据校验相结合,使得表单数据处理更加简单和高效
(1) Spring表单标签
Spring提供了一系列自定义的JSP标签库,用于简化表单开发。这些标签与Spring MVC框架无缝集成,可以轻松绑定表单数据和模型属性
常用表单标签:
<form:form>
:生成表单标签,绑定模型对象。<form:input>
:生成输入框,绑定模型属性。<form:password>
:生成密码输入框。<form:textarea>
:生成文本区域。<form:checkbox>
:生成复选框。<form:radiobutton>
:生成单选按钮。<form:select>
:生成下拉列表
<form:form method="post" modelAttribute="supplier">
<form:input path="supCode" />
<form:input path="supName" />
<form:input path="supContact" />
<form:input path="supPhone" />
<form:input path="supAddress" />
<form:input path="supFax" />
<form:input path="supDesc" />
<form:input type="file" path="companyLicPic" />
<input type="submit" value="保存" />
</form:form>
(2) 数据校验
Spring提供了强大的数据校验功能,通过注解和Validator
接口实现。常用的校验注解有:
@NotNull
:字段不能为空@NotEmpty
:字段不能为空且长度不为0@Size
:字段长度范围@Pattern
:正则表达式匹配@Min
和@Max
:字段值范围
在Spring MVC控制器中,可以通过@Valid
注解启用校验,并使用BindingResult
获取校验结果
public class Supplier {
@NotEmpty(message = "供货商编码不能为空!")
private String supCode;
@NotEmpty(message = "供货商名称不能为空!")
private String supName;
@NotEmpty(message = "联系人不能为空!")
private String supContact;
@Pattern(regexp ="^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", message = "手机号格式不正确!")
private String supPhone;
}
3. SpringMVC实现文件上传
文件上传是Web应用中的常见需求,Spring MVC提供了便捷的文件上传支持,主要包括单文件上传和多文件上传
(1) 单文件上传
Spring MVC通过MultipartFile
接口来处理上传的文件。需要在Spring配置文件中启用Multipart解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000"/>
</bean>
控制器示例:
@PostMapping("/add")
public String add(@Valid Supplier supplier, BindingResult bindingResult, HttpSession session,
@RequestParam("companyLicPic") MultipartFile attach, HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return "supplier/add";
}
// 文件上传处理
if (!attach.isEmpty()) {
// 上传逻辑
}
// 保存供应商逻辑
return "redirect:/sys/supplier/list";
}
(2) 多文件上传
多文件上传可以通过MultipartFile[]
数组来处理多个文件。
控制器示例:
@PostMapping("/add")
public String add(@Valid Supplier supplier, BindingResult bindingResult, HttpSession session,
@RequestParam("companyLicPic") MultipartFile[] attachs, HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return "supplier/add";
}
// 多文件上传处理
for (MultipartFile attach : attachs) {
if (!attach.isEmpty()) {
// 上传逻辑
}
}
// 保存供应商逻辑
return "redirect:/sys/supplier/list";
}