<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- spring 的form标签 -->
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用户管理</title>
</head>
<body>
<sf:form method="post" modelAttribute="user" enctype="multipart/form-data">
username:<sf:input path="username"/> <sf:errors path="username"/><br>
password:<sf:password path="password"/> <sf:errors path="password"/><br>
email:<sf:input path="email"/> <sf:errors path="email"/><br>
Attach:<input type="file" name="attachs"/><br>
Attach:<input type="file" name="attachs"/><br>
<input type="submit" value="添加用户"/>
</sf:form>
</body>
</html>
Controller端的add动作代码:
//添加用户 post请求 @RequestParam("attachs")MultipartFile[] attachs 因为使用了数组所有不会自动转换,必须使用@RequestParam
@RequestMapping(value="/add",method=RequestMethod.POST)
public String add(@Validated User user , BindingResult br,@RequestParam("attachs")MultipartFile[] attachs,HttpServletRequest req) throws IOException{//一定要紧跟validated之后,写验证结果类
if(br.hasErrors()){
//如果有错误显示add试图
return "user/add";
}
//文件上传
String realpath = req.getSession().getServletContext().getRealPath("/resources/upload");
System.out.println(realpath);
for(MultipartFile attach:attachs){
if(attach.isEmpty()) continue;
File f = new File(realpath+"/"+attach.getOriginalFilename());
FileUtils.copyInputStreamToFile(attach.getInputStream(), f);
}
users.put(user.getUsername(), user);
return "redirect:/user/users"; //客户端跳转
}
Spring beans文件配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
>
<!-- 组件扫描 -->
<context:component-scan base-package="com.test.controller"/>
<!-- 注解驱动 -->
<mvc:annotation-driven/>
<!-- 映射静态资源 -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<!-- 内部资源视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 引入jstl标签库所使用,帮助文档建议加上,不加应该也可以 -->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
<!-- 全局异常配置 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 注入Properties -->
<property name="exceptionMappings">
<props>
<!-- error是jsp页面 -->
<prop key="com.test.exception.UserException">error</prop>
</props>
</property>
</bean>
<!-- 文件上传解析器 ,id必须是multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置最大上传5M -->
<property name="maxUploadSize" value="5000000" />
</bean>
</beans>