Servlet上传

来源:互联网 发布:熊猫tv淘宝买的竹子 编辑:程序博客网 时间:2024/05/17 02:32

1 写上传的jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>上传</title></head><body><!-- image/*     text/css   text/javascript   --><form action="upload.do" method="post" enctype="multipart/form-data"><input type="text" name="username"/><!-- name是用来在后台servlet中获取当前文件内容,name的命名可以随意 --><input type="file" name="file"/><br/><!-- 是一个隐藏的控件 --><input type="hidden" id="token" name="token"/><input id="submit_btn" type="button" value="提交" onclick="submit1()"/></form><script type="text/javascript" src="js/jquery-3.1.1.js"></script><script type="text/javascript">$.get("token.do",function(data,status){$("#token").val(data);});function submit1(){$("#submit_btn").hide();alert("--");$("form").submit();}</script></body></html>


其中,利用Ajax来实现异步请求,获取token,之所以要用到token是为了防止用户重复提交。
2 写UploadServlet

import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;import com.mysql.fabric.xmlrpc.base.Data;@MultipartConfigpublic class UploadServlet extends HttpServlet{private Random random = new Random();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//---}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//System.out.println("---" + req.getParameter("file"));String username = req.getParameter("username");String token = req.getParameter("token");Object defaultToken = req.getSession().getAttribute("token");System.out.println(token + "---" + defaultToken);//比较用户提交的Token和系统本身的TOken是否一致if (token != null && defaultToken!=null && token.equals(defaultToken.toString())){//一旦匹配成功,将系统中的Token销毁req.getSession().removeAttribute("token");System.out.println("---" + username);//获取从页面上传递过来的文件Part part = req.getPart("file");String name = part.getSubmittedFileName();System.out.println(part.getSubmittedFileName());System.out.println(part.getName());//获取当前时间的毫秒long time = new Date().getTime();int randomNum = random.nextInt(Integer.MAX_VALUE);name = time+"_"+randomNum+"_"+name;//创建输出流,用来在服务器磁盘上输出文件File file = new File("E:\\"+name);FileOutputStream fos = new FileOutputStream(file);//获取输入流InputStream is = part.getInputStream();byte[] buffer = new byte[1024];int len=0;while((len=is.read(buffer)) != -1){//将文件写入服务器磁盘fos.write(buffer, 0, len);}fos.flush();fos.close();is.close();} }}
3 写TokenServlet

import java.io.IOException;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 制造Token的一个类 */public class TokenServlet extends HttpServlet{private Random random = new Random(); @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//制造Tokenint token = random.nextInt(Integer.MAX_VALUE);req.getSession().setAttribute("token", token);resp.getWriter().write(String.valueOf(token));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}}