Struts2学习笔记14:Struts2的文件上传和下载【续】

网友投稿 765 2022-05-28

Struts2学习笔记14:Struts2的文件上传和下载【续】

第十二讲

学习内容:

通过实例,实现非基于struts2的文件上传

使用文件

下载地址:

http://apache.mirror.phpchina.com/commons/io/binaries/commons-io-1.4-bin.zip

commons-io-1.4.jar

下载地址:

http://apache.freelamp.com/commons/fileupload/binaries/commons-fileupload-1.2.1-bin.zip

commons-fileupload-1.2.1.jar

将上面的两个jar包导入到项目中——WebRoot/WEB-INF/lib目录中

步骤:

1)

在src目录中新建包"upload",在包中新建Servlet文件,名为

UploadServlet.java

,URL设置为"/uploadservlet"

2)

在WebRoot中新建文件夹"upload",在该文件中建立两个JSP文件,分别名为:upload.jsp和result.jsp

upload.jsp

显示上传文件页面

result.jsp

Struts2学习笔记14:Struts2的文件上传和下载【续】

返回显示信息

3)

在upload.jsp文件中添加表单

enctype="multipart/form-data">

username:


password:


file1:

file2:

4)

在result.jsp文件中使用EL表达式显示返回信息

username: ${requestScope.username }

password: ${requestScope.password }

file1:${requestScope.file1 }

fiel2:${requestScope.file2 }

5)

编写UploadServlet.java文件,代码如下:

@SuppressWarnings( { "deprecation", "unchecked" })    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        DiskFileItemFactory factory = new DiskFileItemFactory();  //磁盘文件项目工厂         String path = request.getRealPath("/upload"); //获取实时路径为"/upload",其中根目录为WebRoot         factory.setRepository(new File(path));  //大于设定的阈值大小的文件暂时存放目录         factory.setSizeThreshold(1024 * 1024);  //设置的大小超出该指定值,则直接写到磁盘         ServletFileUpload upload = new ServletFileUpload(factory);          //上传文件中最重要的类,处理上传文件信息         try {            List list = upload.parseRequest(request);  //请求的Servlet的请求解析             // @return A list of FileItem instances parsed from the             // request, in the order that they were transmitted.                         //使用循环遍历list             for (FileItem item : list) {                //一个item对应于表单中的一项                 if (item.isFormField()) { //判断item是一般的form字段还是file字段                     //如果是一般字段则运行下面的代码,否则运行else语句中的语句                     String name = item.getFieldName(); //获取属性名                     String value = item.getString("utf-8"); //通过一种编码格式获取属性值                     request.setAttribute(name, value); //将name属性名和value属性值放置到request的属性中                     //将来使用EL表达式进行读取                 } else {                    String name = item.getFieldName(); //获取field名                     String value = item.getName(); //获取field属性值                     //下面代码用于解析文件名,因为有的浏览器在进行文件上传的时候,将文件的路径与文件名都包含进去,                     //而有的浏览器在进行文件上传的时候,仅包含文件名,所以需要进行解析                     int start = value.lastIndexOf("//"); //获取file中最后"/"的出现位置                    //在最后"/"后面接的是文件名                     String fileName = value.substring(start + 1); //获取文件名,从最后出现斜杠的位置后开始读取字符串                     request.setAttribute(name, fileName); //将name属性名和文件名放置到request的属性中                     //将来使用EL表达式进行读取                                         //第一个方法,一个简便的上传文件方法,可以代替下面的语句                                         //方便的方法写上载的项目到磁盘。客户端代码不关心与否的项目是储存在内存中,或                     //磁盘在一个临时位置。他们只想写上载项目到一个文件中。 //                  try { //                      item.write( new File(path,fileName) ); //                  } catch (Exception e) { //                      e.printStackTrace(); //                  }                     //比较复杂的上传文件的方法,第二个方法                     //新建一个输出流,         格式为文件输出流    建立一个File对象构造方法节中加入文件路径和文件名                     OutputStream os = new FileOutputStream(new File(path,                            fileName));                    //建立一个输入流,从item中获取输入流                     InputStream is = item.getInputStream();                    //将输入流中的信息方法输出流中                     byte[] buffer = new byte[400];//定义一个字节数组,缓冲400                     int length = 0;                    while ((length = is.read(buffer)) > 0) { //length大于0,表示还有内容                         os.write(buffer, 0, length); //将buffer中的信息,写出,起始位置0,长度length                     }                    is.close(); //关闭输入流                     os.close(); //关闭输出流                 }            }            //请求转发到result.jsp页面中,将request和response都传到result.jsp中             request.getRequestDispatcher("/upload/result.jsp").forward(request,                    response);        } catch (FileUploadException e) {            e.printStackTrace();        }    }}

6)

注释掉wem.xml文件中的filter元素,本实例是非基于struts2的编程。

7)

运行。

JSP Struts

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎么查找执行比较慢的sql语句
下一篇:“互联网+”大赛最重磅直播来了!技术大咖带你玩转华为云命题
相关文章