这里针对表单注册功能的关于文件上传方面做了一些总结,前段代码并未打出。
前提(这个给它设置load-on-startup值让它自启动)
//用户注册的初始化的Servlet
public class InitServelet extends HttpServlet{
//创建一个List集合用于保存用户注册的信息:
List<User> list = new ArrayList<User>();
//将list保存到ServletContext作用域中:
this.getServletContext().setAttribute("list", list);
}
前段(JSP)文件上传的基本要素
- 表单必须是post提交方式
- 表单中的必须有文件上传项,文件上传项必须有name属性和值
- 表单的enctype属性必须设置为multipart/form-data
后端(Servlet)
文件数据的接收(需要commons-io.jar和commons-fileupload.jar)文件上传基本操作:
//里面FileItem是一个bean
try {
//定义一个Map集合用于保存接收到的数据
Map<String, String> map = new HashMap<String, String>();
//1. 创建一个磁盘文件项工厂对象DiskFileItemFactory
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory()
//2. 创建一个核心解析类
ServletFileUpLoad servletFileUpload = new ServletFileUpload(diskFileItemFactory);
//3.解析request请求
List<FileItem> list = servletFileUpload.parseRequest(request);
//定一个List集合,用于保存复选框这种类型的多个数据,这里比如爱好(hobby)
List<String> hobbyList = new ArrayList<String>();
//设置文件最终的路径
String url = null;
//4.遍历集合,获得每个FileItem,判断是表单项还是文件上传项
for(FileItem fileItem :list){
//判断是表单项还是文件上传项
if(fileItem.isFormField()){
//普通表单项:
//接受表单项参数的值:
String name = fileItem.getFiledItem();//获得表单项的name属性的值
String value = fileItem.getString("UTF-8");//获得表单项的值
//接受复选框的数据,这里以名称为"hobby"为例
if("hobby".equals(name)){
String hobbyValue = fileItem.getString("UTF-8");
//接收到一个值,将这个值存入hobbyList集合中
hobbyList.add(hobbyValue);
//将[xxx,xxx]的[]去掉
hobbyValue = hobbyList.toString().subSequence(1, hobby.toString().length()-1);
//将爱好的数据存入到Map集合中:
map.put(name, hobbyValue);
} else{
// 将数据存入Map集合中
map.put(name, value);
}
} else{
//获得文件上传的名称
String fileName = fileItem.getName();
if(fileName != null && !"".equals(fileName)){
// 文件上传项
//文件上传功能
//在WebContext新建一个upload文件夹,假设放到那里
//通过工具类获得唯一的文件名
String uuidFileName = UploadUtils.getUUIDFileName(fileName);
//获得文件上传数据
InputStream is = fileItem.getInputItem();
//获得文件上传的路径
String path = this.getServletContext().getRealPath("/upload");
//将输入流对接到输出流就可以了:
url = path + "\\" +uuidFileName;
OutputStream os = new FileOutputStream(url);
//固定代码
int len = 0;
byte[] b = new byte[1024];
while((len = is.read(b)) != -1){
os.write(b, 0, len);
}
is.close();
os.close();
}
}
}
//获得ServletContext对象:
List<User> userList = (List<User>)this.getServeltContext().getAttribute("list");
//校验用户名
for(User u : userList){
if(u.getUserName().equals(map.get("username"))){
request.setAttribute("msg", "用户名已经存在!");
request.getRequestDispatcher("/regist.jsp").forward(request, response);
}
}
//将数据封装到User当中
User user = new User();
user.setUsername(map.get("username"));
user.setPassword(map.get("password"));
user.setSex(map.get("sex"));
user.setHobby(map.get("hobby"));
user.setPath(url);
//将注册用户的信息存入到List集合中:
userList.add(user);
this.getServletContext().setAttribute("list", userList);
//注册成功,跳转到登录页面
request.getSession().setAttribute("username", user.getUsername());
//注意重定向一定要写全项目路径
response.sendRedirect(request.getContextPath()+"/login.jsp");
} catch(FileUploadException e){
e.printStackTrace();
}
文件上传工具类
//文件上传工具类
public class UploadUtils{
//生成唯一的文件名
public static String getUUIDFileName(String fileName){
//将文件名前面的部分进行截取:x x.jpg ----> .jpg
int idx = fileName.lastIndexOf(".");
String extension = fileName.substring(idx);
String uuidFileName = UUID.randomUUID().toString.replace("-", "")+extention;
return uuidFileName;
}
}
登陆页面显示用户信息(jsp)
<%
String username = "";
if(session.getAttribute("username") != null){
username = (String)session.getAttribute("username")
}
%>
网友评论