原文地址:http://www.java3z.com/cwbwebhome/article/article1a/168.html
这是学struts1.2.4自带的例子。所有文件及目录结构请在本站下载。
一、web.xml配置,这里将文件上传配置为upload模块。
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<display-name>Struts Blank Application</display-name>
<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/upload</param-name>
<param-value>/WEB-INF/upload/struts-config.xml</param-value>
</init-param>
|
<script type="text/javascript"><!--
google_ad_client = "pub-1832179689702023";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
//2007-01-10: 336_280
google_ad_channel = "7111701428";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_text = "000000";
google_color_url = "3D81EE";
//--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script>google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);</script>
|
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-html</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-logic</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-nested</taglib-uri>
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-tiles</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
</web-app>
--------------------------------------------------------------------------------
二、struts-config.xml配置和资源文件
--------------------------------------------------------------------------------
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="uploadForm" type="org.apache.struts.webapp.upload.UpLoadForm" />
</form-beans>
<action-mappings>
<action path="/upload" forward="/selfile.jsp" />
<!-- Upload Action -->
<action path="/uploadsAction"
type="org.apache.struts.webapp.upload.UpLoadAction"
name="uploadForm" scope="request" input="input">
<forward name="input" path="/selfile.jsp" />
<forward name="display" path="/display.jsp" />
</action>
</action-mappings>
<!-- 这里设置上传文件的最大值。 -1 不限制大小。缺省值:-1 -->
<controller maxFileSize="2M" inputForward="true" />
<message-resources parameter="org.apache.struts.webapp.upload.UploadResources"/>
</struts-config>
资源文件:UploadResources_zh_CN.properties
maxLengthExceeded=已经超过了上传文件所允许的最大值。
maxLengthExplanation=注意:这个应用程序允许上传文件的最大值是2M。请看"/WEB-INF/upload/struts-config.xml" 文件更改这个值。
三、选择上传文件页面:selfile.jsp,如此访问此页面:
<html:link module="/upload" page="/upload.do"> 继续上传</html:link></h2>
--------------------------------------------------------------------------------
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="org.apache.struts.action.*,
java.util.Iterator,
org.apache.struts.Globals" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<logic:messagesPresent>
<ul>
<html:messages id="error">
<li><bean:write name="error"/></li>
</html:messages>
</ul><hr />
</logic:messagesPresent>
<html:html>
<html:form action="uploadsAction.do" enctype="multipart/form-data">
<html:file property="theFile"/>
<html:submit/>
</html:form>
</html:html>
--------------------------------------------------------------------------------
四、表单bean: UpLoadForm.java
--------------------------------------------------------------------------------
package org.apache.struts.webapp.upload;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;
import org.apache.struts.upload.*;
/**
* <p>Title:UpLoadForm</p>
* <p>Description: QRRSMMS </p>
* <p>Copyright: Copyright (c) 2004 jiahansoft</p>
* <p>Company: jiahansoft</p>
* @author wanghw
* @version 1.0
*/
public class UpLoadForm extends ActionForm {
public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED = "org.apache.struts.webapp.upload.MaxLengthExceeded";
protected FormFile theFile;
public FormFile getTheFile() {
return theFile;
}
public void setTheFile(FormFile theFile) {
this.theFile = theFile;
}
public ActionErrors validate(
ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = null;
//has the maximum length been exceeded?
Boolean maxLengthExceeded =
(Boolean) request.getAttribute(
MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) {
errors = new ActionErrors();
errors.add(
ActionMessages.GLOBAL_MESSAGE ,
new ActionMessage("maxLengthExceeded"));
errors.add(
ActionMessages.GLOBAL_MESSAGE ,
new ActionMessage("maxLengthExplanation"));
}
return errors;
}
}
--------------------------------------------------------------------------------
五、处理上传的文件:UpLoadAction.java
--------------------------------------------------------------------------------
package org.apache.struts.webapp.upload;
import java.io.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;
/**
* <p>Title:UpLoadAction</p>
* <p>Description: QRRSMMS </p>
* <p>Copyright: Copyright (c) 2004 jiahansoft</p>
* <p>Company: jiahansoft</p>
* @author wanghw
* @version 1.0
*/
public class UpLoadAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
if (form instanceof UpLoadForm) {//如果form是UpLoadsForm
String encoding = request.getCharacterEncoding();
if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8")))
{
response.setContentType("text/html; charset=gb2312");
}
UpLoadForm theForm = (UpLoadForm ) form;
FormFile file = theForm.getTheFile();//取得上传的文件
String contentType = file.getContentType();
String size = (file.getFileSize() + " bytes");//文件大小
String fileName= file.getFileName();//文件名
try {
InputStream stream = file.getInputStream();//把文件读入
String filePath = request.getRealPath("/");//取当前系统路径
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream bos = new FileOutputStream(filePath + "/" +
file.getFileName());
//建立一个上传文件的输出流,将上传文件存入web应用的根目录。
//System.out.println(filePath+"/"+file.getFileName());
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);//将文件写入服务器
}
bos.close();
stream.close();
}catch(Exception e){
System.err.print(e);
}
//request.setAttribute("dat",file.getFileName());
request.setAttribute("contentType", contentType);
request.setAttribute("size", size);
request.setAttribute("fileName", fileName);
return mapping.findForward("display");
}
return null;
}
}
------------------------------------------------------------------------------------------
五、成功页display.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="org.apache.struts.action.*,
java.util.Iterator,
org.apache.struts.Globals" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
上传成功!上传信息如下:
<p>
<b>The File name:</b> <%= request.getAttribute("fileName") %>
</p>
<p>
<b>The File content type:</b> <%= request.getAttribute("contentType") %>
</p>
<p>
<b>The File size:</b> <%= request.getAttribute("size") %>
</p>
<hr />
<hr />
<html:link module="/upload" page="/upload.do"> 继续上传</html:link></h2>
六、测试
从本站下载整个目录结构TestStruts并放入tomcat的webapps目录下,在浏览器中输入:
http://127.0.0.1:8080/TestStruts/upload/upload.do
分享到:
相关推荐
【文件生成工具】是一种实用程序,它允许用户创建指定大小和数量的文件,这些文件的内容是随机生成的字符串,而且确保在每个文件中都是唯一的。这个工具基于【Qt】框架和【C++】编程语言构建,它展示了这两种技术在...
【描述解析】:“教育教学设计偶遇修班级的标准与发展途径.pdf_文档整理可打印.zip”描述指出这是一个压缩文件,包含一个PDF文档,该文档经过整理,适合打印。这表明文档可能包含详细的理论分析、实例探讨或实践指南...
这篇文章通过三个小故事,展现了生活中平凡而温暖的偶遇。第一个故事讲述了作者在幼儿园外等待女儿时,遇到一对农村老年夫妇在城里闲逛,老头耐心地为老伴解说,体现出夫妻间的温情与体贴。第二个故事是关于一位园艺...
2. 文学创作:徐志摩的诗歌风格唯美,情感深邃,如《偶遇》中的情感表达,展现了诗人对爱情的深刻理解。他的作品如《那一世》体现了对爱的执着和对人生的哲思。 3. 仓央嘉措:仓央嘉措是另一位著名诗人,他的诗作...
swfupload是比较著名的图片上传工具,可以多图片上传,在一次开发中偶遇uploadify,比swfupload还强大好用,选项也很丰富,功能也很强大,再配合ajax技术,可以把多图片上传发挥到极致,我曾用它做多图片上传,上传...
当你想用51MCU做一台游戏机,你可能会想到FC。是的FC的图形芯片,用51完全可以连接上,资料中还包含了FC的完整原理图。51独有的并口时序,正好可以利用上,PPU也是用并口的。这里说的PPU,指FC用的图形处理器,国内...
6. 《一般》摄影集:江玥的摄影作品集《一般》展现了她对偶遇和日常瞬间的捕捉,设计简洁,通过24张照片传达了生活的具体和诗意。 7. 摄影理念:江玥认为摄影是一种减法艺术,能瞬间定格感觉,她喜欢自然、无修饰的...
在提供的“TestForAutoUpdate”文件中,可能包含了实现上述功能的代码示例,包括网络请求、文件操作以及进程管理的细节。通过分析和学习这些代码,开发者可以更好地理解如何在实际项目中实施Qt的自动升级功能。 ...
在"Draw1127"这个文件中,可能包含了用C++编写的一个MFC应用程序,用于演示如何绘制和操作四次Bezier曲线。这个程序可能涵盖了以上所述的直接法、分裂法和几何法,通过交互式的用户界面,用户可以直观地看到不同方法...
quazip下载不了,或者zip.lib无法下载,这里可以完美解决你的问题,此工程包含quazip、zip.c与unzip.c源码,此源码可以编译成lib库,也可以直接使用,基于quazip,新增了压缩与解压进度显示,Qt5.6.3+MSVC2013的demo...
很抱歉,您提供的文件内容为大量的感叹号和特殊字符,并没有实质性的文字内容。这使得无法从中提取出任何关于《西厢记》的知识点或相关信息。《西厢记》,又名《崔莺莺待月西厢记》,是元代王实甫创作的一部杂剧,...
在实际应用中,DTN通常会结合一些节能策略,比如机会路由(Opportunistic Routing),这种策略利用节点偶遇的机会进行数据交换,避免无效的能源消耗。同时,DTN还可以通过预测算法来优化存储和转发决策,减少不必要...
6. **虚拟与现实的交融**:文档中的“再次偶遇”和“相聚”的场景,提示我们思考虚拟世界与现实生活的界限。在数字化社会,人们在网络中建立的联系可能会影响他们在现实生活中的交往模式。 7. **信息时代的伪装与...
如果网站被挂马,WebSe可以自动恢复网站(恢复原理:安装时会又一次网站代码备份,挂马时解压这个备份并覆盖挂马文件)。 详尽的使用方法已经打包在程序里了。基本上一路下一步就行了。 本程序通过织梦,PHPwind等...
生成的jar文件在\out\artifacts\PdfAutoRenameTools_jar\目录下,使用方法是: java -jar PdfAutoRenameTools.jar 目录名 注意需要Java环境的版本要至少是14,以下是我当前用的java版本信息: java version ...
一款完全免费的软件,在不修改本软件中所有程序文件、说明文件等组件的前提下,您可以将它的拷贝任意分发、共享、传播、推荐给你的朋友使用。1、支持左SHIFT键进行中英文切换。可选择设置为右SHIFT键切换中英文。 2...
这篇文档实际上并不是关于IT行业的,而是关于情感表达和生活哲理的美文摘抄,主要描述了一段发生在月明沙滩上的师生之间的偶遇和对话,主题围绕着失恋、遗忘和重新开始。不过,我们可以尝试从中挖掘一些与IT行业相关...
近日,偶遇某网站,寻得踪迹。不料,图以“.pdg”格式存在,遂写以代码,批量改得文件后缀,称只“.png”,此乃图片格式。俄而,又遇新问题,何以图片存于word,学须臾,著代码。 1、批量修改文件后缀 1)文件的原始...