Struts2学习笔记14:Struts2的文件上传和下载【续】
第十二讲
学习内容:
使用文件
步骤:
1)在src目录中新建包"upload",在包中新建Servlet文件,名为 UploadServlet.java,URL设置为"/uploadservlet" |
2)在WebRoot中新建文件夹"upload",在该文件中建立两个JSP文件,分别名为:upload.jsp和result.jsp upload.jsp 显示上传文件页面 result.jsp 返回显示信息 |
3)在upload.jsp文件中添加表单
<form action="/struts14/uploadservlet" method="post" enctype="multipart/form-data"> username:<input type="text" name="username" /> <br/> password:<input type="password" name="password"/> <br/> file1:<input type="file" name="file1"/><br/> file2:<input type="file" name="file2"/><br/> <input type="submit" name="submit"/> </form> |
|
4)在result.jsp文件中使用EL表达式显示返回信息
username: ${requestScope.username }<br/> password: ${requestScope.password }<br/> file1:${requestScope.file1 }<br/> 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<FileItem> list = upload.parseRequest(request); //请求的Servlet的请求解析 // @return A list of <code>FileItem</code> 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)运行。 |
文章来源: blog.csdn.net,作者:fengda2870,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/fengda2870/article/details/2971776
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)