- 浏览: 170060 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
yinvent:
谢谢,终于找到一个可以用的例子!
struts2学习之一简单范例 -
锅巴49:
学习了,不错.
使用 Spring 2.5 注释驱动的 IoC 功能 -
fooky:
你好,今天在配置spring secutiry3,想让系统先从 ...
spring security 配置文件小结(逐步深化到url级别) -
lj508:
你好啊 请教你个问题
我用那个纯jsp上传时
怎么运行时根本没 ...
Sturt2学习之十二---文件上传 -
641216927:
我还是一个struts2新手。
有个问题请教一下:
同时在t ...
struts2学习之一简单范例
一、纯jsp文件上传
1、新建文件夹upload
内含upload.jsp,result.jsp
1)upload.jsp需要指定method="post"和enctype="multipart/form-data"
<body> <form action="result.jsp" method="post" enctype="multipart/form-data"> Information: <input type="text" name="info"><br> File: <input type="file" name="file"><br> <input type="submit" name="submit" value=" submit "> </form> </body>
2)result.jsp(真正开发的时候不会这么去写的,这里为了了解这个过程)
<body> <% InputStream is = request.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String buffer = null; while((buffer = br.readLine()) != null) { out.print(buffer + "<br>"); } %> </body>
当然以前jsp可以用的是smartupload组件
二、纯apache的Commons项目内的FileUpload上传文件
基本它已经做好了90%,我们修改一下就可以!
struts2它可以选择三种方式
1、默认的就是apache的Commons项目内的FileUpload,从官方网站上下载commons-fileupload-bin.zip
commons-io-bin.zip,解压缩。里面包含了jar,文档api,源代码等
本部分来阐述FileUpdate的使用
2、源代码
1)upload2.jsp
<body> <form action="/struts2/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" value="submit"> </form> </body>
2)UploadServlet.java
import java.io.File; import java.io.IOException; import java.io.OutputStream; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.omg.CORBA.portable.InputStream; public class UploadServlet extends HttpServlet { @SuppressWarnings("unchecked") public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //先 生成一个工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); String path = request.getRealPath("/upload"); //若你上传的文件比较小几十k,那么会将文件直接放在内存中 //当上传文件比较大时,那么会先放到一个临时目录中,setRepository就是来设置这个目录 的。 factory.setRepository(new File(path)); //当上传文件超出下面的大小时,那么会先放到一个临时目录中,setSizeThreshold就是来设置这个目录 的。 factory.setSizeThreshold(1024 * 1024); //生成ServletFileUpload实例 ServletFileUpload upload = new ServletFileUpload(factory); try {//list封装了客户端传过来所有属性 List<FileItem> list = upload.parseRequest(request); for (FileItem item : list) {//item.isFormField()来判断是否简单 的类型,true表示简单的属性。 if (item.isFormField()) { String name = item.getFieldName();//获得字段名字 String value = item.getString("gbk");//获得字段值 System.out.println(name); request.setAttribute(name, value); } else { String name = item.getFieldName(); String value = item.getName(); //获得文件名,先去掉路径。(因为有的浏览器返回的全部路径+文件名;有的是光返回文件名) int start = value.lastIndexOf("\\"); String fileName = value.substring(start + 1); request.setAttribute(name, fileName); //这一句话相当于以下注释的所有内容,是提供 的一个便捷的操作 item.write(new File(path,fileName)); // OutputStream os = new FileOutputStream(new File(path, // fileName)); // // InputStream is = item.getInputStream(); // // byte[] buffer = new byte[400]; // // int length = 0; // // while ((length = is.read(buffer)) > 0) // { // os.write(buffer, 0, length); // } // // os.close(); // // is.close(); } } }
3)web.xml增加以下内容
<servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>com.test.servlet.UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/UploadServlet</url-pattern> </servlet-mapping> 注释掉<!-- <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> -->
4)result2.jsp
<body>
username: ${requestScope.username }<br>
password: ${requestScope.password }<br>
file1: ${requestScope.file1 }<br>
file2: ${requestScope.file2 }
</body>
三、Struts2文件上传(更加简单方便)
1、WebRoot目录下upload.jsp文件
<s:form action="upload" theme="simple" enctype="multipart/form-data"> <table align="center" width="50%" border="1"> <tr> <td> username </td> <td> <s:textfield name="username"></s:textfield> </td> </tr> <tr> <td> password </td> <td> <s:password name="password"></s:password> </td> </tr> <tr> <td> file1 </td> <td > <s:file name="file"></s:file> </td> </tr> <tr> <td> file2 </td> <td > <s:file name="file"></s:file> </td> </tr> <tr> <td> file3 </td> <td > <s:file name="file"></s:file> </td> </tr> <tr> <td> <s:submit value=" submit "></s:submit> </td> <td> <s:reset value=" reset "></s:reset> </td> </tr> </table> </s:form>
2、struts.xml文件加入以下内容
<action name="upload" class="com.test.action.UploadAction"> <result name="success">/uploadResult.jsp</result> </action>
3、uploadaction.java
package com.test.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { private String username; private String password; private List<File> file;//file文件体 private List<String> fileFileName;//fileFileName文件名 private List<String> fileContentType;//fileContentType文件类型, //这三个名字命名不能改,上传多个文件时系统会一一对应 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public List<File> getFile() { return file; } public void setFile(List<File> file) { this.file = file; } public List<String> getFileFileName() { return fileFileName; } public void setFileFileName(List<String> fileFileName) { this.fileFileName = fileFileName; } public List<String> getFileContentType() { return fileContentType; } public void setFileContentType(List<String> fileContentType) { this.fileContentType = fileContentType; } @Override public String execute() throws Exception { for (int i = 0; i < file.size(); ++i) {//这里一定要用字节流,不要用字符流 InputStream is = new FileInputStream(file.get(i)); //获得当前应用的根路径,ServletActionContext对应Servlet的Action的上下文 //也可以写绝对路径d:/doucument/ String root = ServletActionContext.getRequest().getRealPath( "/upload"); File destFile = new File(root, this.getFileFileName().get(i)); //文件输出流,接受的参数表示目的文件 OutputStream os = new FileOutputStream(destFile); byte[] buffer = new byte[400]; int length = 0; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } is.close(); os.close(); } return SUCCESS; } }
4、uploadResult.jsp
<body> username: <s:property value="username"/><br> password: <s:property value="password"/><br> file: <s:property value="fileFileName"/> </body>
5、让系统字符集支持中文
在我们的struts.xml文件可以配置
<constant name="struts.i18n.encoding" value="gbk"></constant>
其实以后很多的strust框架中的default.properties文件中的很多内容都可以在我们的struts.xml通过<constant></constant>来赋值更改。
<constant name="struts.multipart.saveDir" value="c:\"></constant>
default.properties文件中部分字段说明
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakarta
以上三行表示struts上传功能对应的三种方式,其中第三种对应对应apache的fileupload
struts.multipart.saveDir=
struts.multipart.maxSize=2097152
表示上传后文件的保存路径和最大允许上传的文件为2M
三、Struts2文件上传(由客户端指定文件个数)
1、改写客户端文件WebRoot目录下upload.jsp文件
<head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Insert title here</title> <script type="text/javascript"> function addMore() { var td = document.getElementById("more"); var br = document.createElement("br"); var input = document.createElement("input"); var button = document.createElement("input"); input.type = "file"; input.name = "file"; button.type = "button"; button.value = "Remove"; button.onclick = function() { td.removeChild(br); td.removeChild(input); td.removeChild(button); } td.appendChild(br); td.appendChild(input); td.appendChild(button); } </script> </head> <body> <table align="center" width="50%"> <tr> <td> <s:fielderror cssStyle="color:red" /> </td> </tr> </table> <s:form action="upload" theme="simple" enctype="multipart/form-data"> <table align="center" width="50%" border="1"> <tr> <td> username </td> <td> <s:textfield name="username"></s:textfield> </td> </tr> <tr> <td> password </td> <td> <s:password name="password"></s:password> </td> </tr> <tr> <td> file </td> <td id="more"> <s:file name="file"></s:file><input type="button" value="Add More.." onclick="addMore()"> </td> </tr> <tr> <td> <s:submit value=" submit "></s:submit> </td> <td> <s:reset value=" reset "></s:reset> </td> </tr> </table> </s:form> </body>
2、服务器端不用修改
四、Struts2文件上传(限制类型)
(限制类型),Struts2文件上传内部已经实现好了。
只需要在struts.xml文件中增加一个拦截器就好了,同时设置好相应的参数
<action name="upload" class="com.test.action.UploadAction"> <result name="success">/uploadResult.jsp</result> <result name="input">/upload.jsp</result><!--指strut处理错误时,自动地跳到input页面,此处需要配置--> <interceptor-ref name="fileUpload"> <param name="maximumSize">409600</param><!--指每一个文件的大小--> <param name="allowedTypes">application/vnd.ms-powerpoint</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref><!--只要你配置拦截器,默认的必须加上--> </action>
说明:这里拦截器一般配置在result标签下面,
至于<param name="allowedTypes">application/vnd.ms-powerpoint</param>
里面的类型可以参考tomcat目录下的文件web.xml,该文件中的一个个<mime-type>类型都显示了这些类型的表示。例如
<mime-mapping> <extension>ppt</extension> <mime-type>application/vnd.ms-powerpoint</mime-type> </mime-mapping>
在message.propertiers资源文件中增加上传文件错误的提示信息
struts.messages.error.content.type.not.allowed=上传文件类型不允许,请重试!
struts.messages.error.file.too.large=上传文件过大,请重试!
当然右侧中文需要改成ascii,那么这里左侧的key是如何想出来的呢
也是通过上面 default.properties文件字段所得到的。
发表评论
-
webwork Action中获取request, response,session对象的方法
2009-04-16 17:25 1622webwork Action中获取request ... -
不依赖XML代码粘合创建Struts 2应用程序
2009-04-07 15:32 1405不依赖XML代码粘合创建Struts 2应用程序 原文地址:h ... -
struts.properties粗解
2009-04-07 14:28 1362原文章地址:http://fratemity1314.spac ... -
Struts2学习之十五-声明式的异常处理
2009-04-06 22:32 854看下文前可以先参考: http://blog.chinaun ... -
struts2学习之十四----其他知识点
2009-04-06 19:31 1254一、struts2探索学习完一定需要实际去运行,这样才能有更加 ... -
Sturt2+spring整合
2009-04-01 17:55 1111一、相应的spring的jarStruts2-spring-p ... -
Sturt2学习之十三---文件下载
2009-04-01 17:01 1003Sturt2学习之十三---文件下载1、download.js ... -
struts学习之十一-----国际化
2009-04-01 10:59 1035一、java对国际化的支持 ... -
struts2学习之九---拦截器
2009-04-01 10:34 1201拦截器实现机制一、回忆“java反射与动态代理二.txt”,因 ... -
struts2学习之八校验框架--非字段校验
2009-04-01 01:16 1243一、非字段校验 用属性来校验字段和字段检验刚好是参照物相反 ... -
struts2学习之七校验框架--字段校验
2009-04-01 00:23 1510struts2学习之七校验框架--字段校验(使用xml文件)一 ... -
struts2学习之六输入校验
2009-03-31 21:53 1506一、输入校验与类型转化的关系 遇到类型转换错误的时候(也就是说 ... -
struts2学习之五(最基本的)输入校验
2009-03-31 21:51 905一、register.jsp注册页面 //以下第一两句 的作用 ... -
struts2学习之四、类型转换2
2009-03-31 17:50 820<h3><font color=" ... -
struts2学习之三、类型转换
2009-03-31 17:08 874struts2学习之三、类型转 ... -
struts2学习之二------基本验证
2009-03-31 15:39 967struts2学习之二----基本 ... -
struts2学习之一简单范例
2009-03-31 14:45 2173简单范例1、下载struts2.0.11-all.rar 2、 ...
相关推荐
java struts2入门学习实例--使用struts2快速实现多个文件上传
NULL 博文链接:https://zhenjw.iteye.com/blog/312108
本版本支持elasticsearch java语言远程命令执行及文件上传elasticsearchgroov语言远程命令执行及文件上传struts2-005,struts2-009,struts2-013,struts2-016,struts2-019,struts2-020,struts2-devmode,struts2...
struts2中实现文件上传 struts2中实现CRUD struts2中的OGNL struts2的新表单标志的使用 struts2与AJAX一 struts2与AJAX二 struts2与AJAX三 struts2中用Spring实现IOC struts2中的零配置与IOC struts2介绍之使用连接...
使用struts2框架的一个文件上传demo。。大家互相学习学习,里面有注释了,觉得好的顶一下吧。
著名的K8_Struts2_漏洞利用工具,可利用Struts2_漏洞进行任意代码执行和任意文件上传。 本工具仅供学习交流,请勿用于任何非法活动。
这是我结合网络资源。。和我对一些平时知识积累做的一个文件上传。。可能还存在漏洞。。请爱学者补全。。它将是一个完美的文件上传资料。。希望能给你的学习带来方便
struts2 实现多文件上传功能,是一个很好的学习参考资料
struts2+jsp 文件上传,供大家一起共同分享学习。
本书内容非常全面,涵盖了众多书籍所有知识要点,并结合作者自己经验总结而编写,内容相当丰富,是查找技术的好帮手及学习Struts2的不二选择 众所周知,一般书籍为了销售需要,往往很少的知识点,却需要添加大量的...
struts2学习笔记和源码,struts2原理。文件上传、i18n等等
Struts是第一款真正意义上按照MVC架构模式搭建的Web开发框架。《Struts 2完全学习手册》全面讲述...《Struts 2完全学习手册》适合大专院校在校学生、网站开发人员、Struts学习和开发人员以及编程爱好者学习和参考。
学习struts 2的一本入门书籍,内容浅显易懂,共分12个包,part01----part12,全部下载后才能解压,不需要资源分。由于以前上传的压缩包有问题,所以重新上传新的压缩包,与原来的压缩包不一样,但pdf文件是一样的。
学习struts 2的一本入门书籍,内容浅显易懂,共分12个包,part01----part12,全部下载后才能解压,不需要资源分。由于以前上传的压缩包有问题,所以重新上传新的压缩包,与原来的压缩包不一样,但pdf文件是一样的。
学习struts 2的一本入门书籍,内容浅显易懂,共分12个包,part01----part12,全部下载后才能解压,不需要资源分。由于以前上传的压缩包有问题,所以重新上传新的压缩包,与原来的压缩包不一样,但pdf文件是一样的。
学习struts 2的一本入门书籍,内容浅显易懂,共分12个包,part01----part12,全部下载后才能解压,不需要资源分。由于以前上传的压缩包有问题,所以重新上传新的压缩包,与原来的压缩包不一样,但pdf文件是一样的。
学习struts 2的一本入门书籍,内容浅显易懂,共分12个包,part01----part12,全部下载后才能解压,不需要资源分。由于以前上传的压缩包有问题,所以重新上传新的压缩包,与原来的压缩包不一样,但pdf文件是一样的。
学习struts 2的一本入门书籍,内容浅显易懂,共分12个包,part01----part12,全部下载后才能解压,不需要资源分。由于以前上传的压缩包有问题,所以重新上传新的压缩包,与原来的压缩包不一样,但pdf文件是一样的。
学习struts 2的一本入门书籍,内容浅显易懂,共分12个包,part01----part12,全部下载后才能解压,不需要资源分。由于以前上传的压缩包有问题,所以重新上传新的压缩包,与原来的压缩包不一样,但pdf文件是一样的。
学习struts 2的一本入门书籍,内容浅显易懂,共分12个包,part01----part12,全部下载后才能解压,不需要资源分。由于以前上传的压缩包有问题,所以重新上传新的压缩包,与原来的压缩包不一样,但pdf文件是一样的。