jsp+servlet文件上传[转+修改]

时间:2022-07-12 21:07:10

源码为网上转载,用于个人学习,我只是在文章中总结了一个上传文件工程的步骤以及方法.

 

---恢复内容开始---

1:新建一个web工程

2:在WEB-INF/lib中导入两个commons-fileupload-1.2jar和commons-io-1.2.jar

3:在web.xml中配置一个名为UploadServlet的servlet,为其配置映射,并且为servlet配置初始化参数filepath,temppath,temppath表示上传文件比较小时(小于我们设定的值)存放的文件夹位置。而filepath表示上传文件较大时(大于我们设定的值)存放的文件夹位置.

具体代码如下

 <servlet>
        <servlet-name>UploadServlet</servlet-name>
        <servlet-class>UploadServlet</servlet-class>
    <init-param>
    <param-name>filepath</param-name>
    <param-value>try1</param-value>
    </init-param>
    <init-param>
        <param-name>temppath</param-name>
        <param-value>try2</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/upload</url-pattern>
</servlet-mapping>

 

4:html页面写form表单

<form method="POST" action="upload" enctype="MULTIPART/FORM-DATA" >     <!--"MULTIPART/FORM-DATA"就是一种用表单提交数据的格式-->

<input type="file" name="file" size="30"/>  

<input type="submit" value="上传"/>

</form>

 

5:UploadServlet.java:

 

首先在UploadServlet定义两个String的变量,分别是temPath以及filePath,其代表的意义在上面以及陈述.

然后在UploadServlet的初始化函数初始化tempPath以及filePath,初始化函数init可以右键点击source选择Override/Implement选择init函数

这里要涉及到获取相对路径和绝对路径的方法

ServletContext = getServletContext();

context.getRealPath("/")表示获得的绝对路径后面再加"/"

context.getContextPath("/")表示获得的相对路径再加“/”

init初始化方法的具体代码如下:

public void init(ServletConfig config) throws ServletException  
    {  
        super.init(config);  
        // 从配置文件中获得初始化参数  
        filePath = config.getInitParameter("filepath");                 //从web.xml中的读取此要初始化的参数
        tempPath = config.getInitParameter("temppath");     //同上
 
        ServletContext context = getServletContext();  
 
        filePath = context.getRealPath(filePath);          //获取此工程的绝对路径            E:\tomcat\webapps\File\try1
        tempPath = context.getRealPath(tempPath);        //获取此工程的绝对路径    E:\tomcat\webapps\File\try2

                                //其实你可以在web.xml中将初始化参数的值设定成你要保存路径的绝对路径,就可以省略这里获取绝对路径                                //的步骤了

  接下来我们再看看doPost方法:

  // doPost  
    public void doPost(HttpServletRequest req, HttpServletResponse res)  
        throws IOException, ServletException  
    {  
        res.setContentType("text/plain;charset=gbk");  
        PrintWriter pw = res.getWriter();  
        try{  
            DiskFileItemFactory diskFactory = new DiskFileItemFactory();      
            // threshold 极限、临界值,即硬盘缓存 1M  
            diskFactory.setSizeThreshold(1024 * 1024);  
            // repository 贮藏室,即临时文件目录  
            diskFactory.setRepository(new File(tempPath));  
          
            ServletFileUpload upload = new ServletFileUpload(diskFactory);  
            // 设置允许上传的最大文件大小 4M  
            upload.setSizeMax(4 * 1024 * 1024);  
            // 解析HTTP请求消息头  
            List fileItems = upload.parseRequest(req);  
            Iterator iter = fileItems.iterator();  
            while(iter.hasNext())  
            {  
                FileItem item = (FileItem)iter.next();  
                if(item.isFormField())    //判断是不是表单输入域,若不是则为文件上传域.
                {  
                    System.out.println("处理表单内容 ...");  
                    processFormField(item, pw);  
                }else{  
                    System.out.println("处理上传的文件 ...");  
                    processUploadFile(item, pw);  
                }  
            }// end while()  
 
            pw.close();  
        }catch(Exception e){  
            System.out.println("使用 fileupload 包时发生异常 ...");  
            e.printStackTrace();  
        }// end try ... catch ...  
    }// end doPost() 


    }

 

 

processFormField(item, pw)处理表单的方法:

 

 private void processFormField(FileItem item, PrintWriter pw)  
        throws Exception  
    {  
        String name = item.getFieldName();  
        String value = item.getString();          
        pw.println(name + " : " + value + "\r\n");  
    }

 

 

processUploadFile(item, pw)处理上传文件的方法:

 

private void processUploadFile(FileItem item, PrintWriter pw)  
        throws Exception  
    {  
        // 此时的文件名包含了完整的路径,得注意加工一下  
        String filename = item.getName();     
        pw.println(filename+"  实验");
        System.out.println("完整的文件名:" + filename);  
        int index = filename.lastIndexOf("\\");  
        filename = filename.substring(index + 1, filename.length());  
 
        long fileSize = item.getSize();  
 
        if("".equals(filename) && fileSize == 0)  
        {             
            System.out.println("文件名为空 ...");  
            return;  
        }  
 
        File uploadFile = new File(filePath + "/" + filename);  
        item.write(uploadFile);  
        pw.println(filename + " 文件保存完毕 ...");  
        pw.println("文件大小为 :" + fileSize + "\r\n");  
    } 

 

第一篇博客文,相信也是一个新的开始.

 

---恢复内容结束---