Jsp上传文件到Servlet

1.上传文件
a.引入2个jar(复制到lib文件夹下)
   apache: commons-fileupload.jar组件
    commons-fileupload.jar依赖 commons-io.jar

b.
代码:
前台jsp:
    
    表单提交方式必须为post
    在表单中必须增加一个属性 enctype="multipart/form-data"

后台servlet:
    

注意的问题:
    上传的目录  upload :
    1.如果修改代码,则在tomcat重新启动时 会被删除
        原因:当修改代码的时候,tomcat会重新编译一份class 并且重新部署(重新创建各种目录)
    
    2.如果不修改代码,则不会删除
        原因: 没有修改代码,class仍然是之前的class

因此,为了防止 上传目录丢失: a.虚拟路径    b.直接更换上传目录 到非tomcat目录:String path = "D:\\study\\upload";

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


	
学号:
姓名:
上传文件:
package org.student.servlet;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import sun.awt.datatransfer.DataTransferer.ReencodingInputStream;

/**
 * Servlet implementation class UploadServlet
 */
public class UploadServlet extends HttpServlet {
 

	 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置请求、响应的编码
		request.setCharacterEncoding("utf-8"); 
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=UTF-8");
		
		//上传
		try {
			FileItemFactory factory = new DiskFileItemFactory();
		
			ServletFileUpload upload = new ServletFileUpload(factory);
		// 通过parseRequest解析form中的所有请求字段,并保存到 items集合中(即前台传递的sno sname
		// mydoc此时就保存在了items中)
			List items = upload.parseRequest(request);
		//// 遍历items中的数据(item=sno sname mydoc)
			Iterator iter = items.iterator();
			
			while(iter.hasNext()) {
				FileItem item =iter.next();
				String itemName = item.getFieldName();
				int sno=-1;
				String sname =null;
				// 判断前台字段 是普通form表单字段(sno sname),还是文件字段
				if(item.isFormField()) {
					if(itemName.equals("sno")) {//根据name属性 判断item是sno sname 还是 mydoc
						sno=Integer.parseInt(item.getString("utf-8"));
					}else if (itemName.equals("sname")) {
						sname = item.getString("utf-8");
							
					}else {
						System.out.println("其他字段");
					}
					
				}else {//mydoc
					//文件 上传 
					//getFieldName  是获取的普通表单字段的那么值
					String filename =item.getName();//获取文件名
				/*	
					获取文件内容并上传
			                     定义文件路径:指定上传的位置服务器路径:
			           	1.可以写死例如获取服务器路径D:\\study\\apache-tomcat-8.5.30\\wtpwebapps\\UpAndDown\\upload
			                   其中UpAndDown是项目名 upload是文件夹名
			            2.也可以写成动态获取服务器路径  request.getSession().getServletContext().getRealPath("upload") 
			            	upload是文件夹名
			    */
			        String path =request.getSession().getServletContext().getRealPath("upload") ;
			        
			        File file = new File(path,filename);
			        item.write(file);
			        System.out.print(filename+"上传成功");
			        return;//结束
				}
				
				
				
				
			}
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		doGet(request, response);
	}

}


 

Jsp上传文件到Servlet_第1张图片

 

你可能感兴趣的:(JSP)