将OneNote笔记与Word文档链接的两种方法(onenote怎样打开word文档)
857
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
返回显示信息
3)
在upload.jsp文件中添加表单
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 { ListFileItem
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小时内删除侵权内容。