fileTag.jsp
<s:form action="uploadaction" method="post" enctype="multipart/form-data" >
<s:file label="上传" theme="simple" name="upload"/>
<s:submit value="上传"/>
</s:form>
struts.xml
<action name="uploadaction" class="com.butone.struts2.taguser.UploadAction" method="upload">
<!-- 配置fileUpload的拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型 -->
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg,image/jpg,application/msword,text/plain
</param>
<!-- 配置允许上传的文件大小 -->
<param name="maximumSize">2000000000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result>/taguser/result_fileTag.jsp</result>
<result name="input">/taguser/fileTag.jsp</result>
</action>
UploadAction.java
public class UploadAction extends ActionSupport {
// 封装单个上传文件域的属性
private File upload;
// 封装单个上传文件类型的属性
private String uploadContentType;
// 封装单个上传文件名的属性
private String uploadFileName;
// 动态设置上传文件保存地址
private String savePath;
public String getSavePath() {
// return ServletActionContext.getRequest().getRealPath("");
String onload = "C:\\report\\cached\\";
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("onload", onload);
// return ServletActionContext.getRequest().getContextPath();
return onload;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
// 上传单个文件的文件类型的setter和getter方法
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getUploadContentType() {
return (this.uploadContentType);
}
// 上传单个文件的文件名的setter和getter方法
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getUploadFileName() {
return (this.uploadFileName);
}
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
// savePath = ServletActionContext .getRequest().getRealPath("");
}
// 上传单个文件
public String upload() {
try {
// 以服务器的文件保存地址和原文件名建立上传文件输出流
System.out.println(ServletActionContext
.getRequest().getRealPath("")
+ File.separator
+ "images"
+ File.separator
+ getUploadFileName()+"路径");
FileOutputStream fos = new FileOutputStream(ServletActionContext
.getRequest().getRealPath("")
+ File.separator
+ "images"
+ File.separator
+ getUploadFileName());
// 以上传文件建立一个文件上传流
FileInputStream fis = new FileInputStream(getUpload());
// 将上传文件的内容写入服务器
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
}
result_fileTag.jsp
文件路径:<s:property value="savePath" />/images/<br>
<s:property value="#request.onload" /> <br>
<img src="<s:property value='#request.onload'/>\0010.jpg.gif">
<!-- 根据上传文件的文件名,在页面上显示上传的图片 -->
文件为:<s:property value="uploadFileName"/><br>
上传多个文件
fileuploads.jsp
<s:fielderror></s:fielderror>
<!-- <input type="button" onclick="addComponent();" value="在上传一个" name="button" /> -->
<br />
<s:form action="uploadactions" method="post" enctype="multipart/form-data">
<s:file name="upload" label="路径"/>
<s:file name="upload" label="路径"/>
<s:file name="upload" label="路径"/>
<s:submit value="上传"/>
</s:form>
struts.xml
<action name="uploadactions" class="com.butone.struts2.taguser.UploadActions" method="upload">
<!-- 配置fileUpload的拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型 -->
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg,image/pjpeg,image/jpg,application/msword,text/plain
</param>
<!-- 配置允许上传的文件大小 -->
<!-- <param name="maximumSize">2000000000</param> -->
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result>/taguser/fileuploadoutput.jsp</result>
<result name="input">/taguser/fileuploads.jsp</result>
</action>
UploadActions.java
public class UploadActions extends ActionSupport {
//封装多个上传文件域的属性
private List<File> upload = new ArrayList<File>();
// 封装多个上传文件类型的属性
private List<String> uploadContentType = new ArrayList<String>();
// 封装多个上传文件名的属性
private List<String> uploadFileName = new ArrayList<String>();
//动态设置上传文件保存地址
private String savePath;
public String getSavePath() {
System.out.println("getSavePath()!!!!!");
System.out.println(savePath+"++++++++++++++++++++++++++++++");
return savePath;
}
public void setSavePath(String savePath) {
System.out.println("setSavePath()!!!!!");
this.savePath = savePath;
// savePath = "E:\\butone\\struts2.2\\WebRoot\\images\\"+getUploadFileName();
}
//上传多个文件对应文件内容的setter和getter方法
public List<File> getUpload() {
return upload;
}
public void setUpload(List<File> upload) {
System.out.println("---------------- setUpload(List<File> upload) ----------------");
this.upload = upload;
}
// 上传多个文件的文件类型setter和getter方法
public List<String> getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(List<String> uploadContentType) {
this.uploadContentType = uploadContentType;
}
// 上传多个文件的文件名的setter和getter方法
public List<String> getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(List<String> uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String upload() {
//savePath = "E:\\butone\\struts2.2\\WebRoot\\images\\";
savePath = ServletActionContext.getRequest().getRealPath("");
System.out.println("upload()!!!!!");
//上传多个文件
List<File> files = getUpload();
// String ext ="";
FileOutputStream fos = null;
FileInputStream fis = null;
byte[] buffer = new byte[1024];
int len = 0;
Random rd = new Random();
System.out.println(files.size()+" ----------------");
System.out.println(getSavePath());
for (int i = 0; i < files.size(); i++) {
try {
//以服务器的文件保存地址和当前时间组合文件名建立上传文件输出流
// ext =uploadFileName.get(i).substring(uploadFileName.get(i).lastIndexOf('.'));
/* fos = new FileOutputStream(getSavePath()+ File.separator+
* DateFormatUtil.getCurrentCustomFormatDateTime(DateFormatUtil.DATE_TIME_FORMAT_14) +
* String.valueOf(rd.nextInt(1000))+ext);
*/
System.out.println(getSavePath()+"------------------------getsavepath!!!");
fos = new FileOutputStream(getSavePath() + File.separator
+ uploadFileName.get(i));
// 以上传文件建立一个文件上传流
fis = new FileInputStream(files.get(i));
// 将上传文件的内容写入服务器
len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return SUCCESS;
}
}
fileuploadoutput.jsp
<!-- 输出上传的表单里的文件标题属性 -->
文件路径:<s:property value="savePath" /><br>
<s:property value="#request.onload" /> <br>
<!-- 根据上传文件的文件名,在页面上显示上传的图片 -->
文件为:<s:property value="uploadFileName"/><br>
<s:iterator value="uploadFileName">
<img src="<s:property />" />
<!-- 就是为了打印图片名称,但好像不支持中文图片的 -->
<s:property/>
</s:iterator>
相关推荐
8. **File标签** - `<s:file>` 用于创建文件上传控件。 - 示例: ```xml <s:file tooltip="UploadYourPicture" label="图片" name="picture"/> ``` #### 三、非表单UI标签 非表单UI标签主要用于实现一些非...
- `<s:head/>` 在HTML的`<head>`标签中使用,用于生成头部信息。 - `<s:hidden>` 创建一个隐藏字段,常用于存储不需用户可见但需要传递给服务器的数据。 I. `<s:i18n>`、`<s:include>`: - `<s:i18n>` 加载资源包到...
要在JSP页面中使用Struts2的S标签,首先需要在页面顶部添加如下声明: ```jsp <%@ taglib prefix="s" uri="/struts-tags" %> ``` 这行代码的作用是将Struts2提供的标签库导入到当前JSP页面中,并指定前缀为“s”。...
而在 Struts2 中,所有的标签都被统一管理,并通过在 JSP 文件头部声明 `<%@ taglib prefix="s" uri="/struts-tags" %>` 来启用 Struts2 的标签库。这种方式简化了开发过程中的配置工作,使得开发者可以更加专注于...
<%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. <s:a href=""></s:a>-----超链接,类似于html里的<a></a> 3. <s:...
Struts2提供了`<s:file>`标签用于文件上传,`<s:date>`和`<s:datetime>`标签用于日期和时间的选择。 综上所述,Struts2的表单标签提供了一套完整的解决方案,覆盖了从简单的输入元素到复杂的表单交互。通过熟练掌握...
本文将详细介绍Struts2中的常用标签及其用法,并通过具体的实例来帮助理解。 #### 二、Struts2标签库详解 ##### 1. `<s:a>` 超链接标签 - **用途**:创建一个超链接。 - **示例代码**: ```xml <s:a href="%{url...
* <s:generator>:和 <s:iterator> 标签一起使用 H: * <s:head>:在 <head></head> 里使用,表示头文件结束 * <s:hidden>:隐藏值 I: * <s:i18n>:加载资源包到值堆栈 * <s:include>:包含一个输出,servlet ...
- **`<s:action>`**:用于执行Action,类似于Struts1中的`<s:send>`标签。但Struts2的`<s:action>`提供了更高级的功能,比如可以通过name属性指定Action的名称,并且可以使用额外的参数来传递数据。 #### 2. `<s:...
此外,Struts2表单标签还可以与其他标签结合使用,如`<s:actionerror>`、`<s:fielderror>`和`<s:property>`,以显示验证错误信息或动态显示数据。`<s:actionerror>`显示全局错误,`<s:fielderror>`显示特定字段的...
- `<s:head/>`:在HTML的`<head>`标签中使用,表示头部文件的结束。 - `<s:hidden></s:hidden>`:创建一个隐藏字段,用于在表单中传递不可见的值。 **I. 国际化和包含** - `<s:i18n name=""></s:i18n>`:加载资源包...
1. `<s:bean>` - 类似于Struts1中的JavaBean操作,但在Struts2中使用较少,因为Struts2更倾向于使用OGNL表达式来访问对象。 **C组标签:** 1. `<s:checkbox>` - 创建复选框,可以绑定到Action的属性。 2. `<s:...
`<s:generator>` 通常与其他标签配合使用,`<s:head>` 在HTML文档中表示头部结束,`<s:hidden>` 创建隐藏字段,其值不会在页面上显示。 H. `<s:i18n>, <s:include>, <s:inputtransferselect>`: `<s:i18n>` 用于加载...
1. `<s:head>`:在HTML的`<head>`标签中使用,表示头部信息结束。 2. `<s:hidden>`:创建隐藏字段,用于存储不显示在页面上的数据。 I部分: 1. `<s:i18n>`:加载资源包到值栈,支持国际化。 2. `<s:include>`:...
`<s:file>` - 文件上传标签 用于实现文件上传功能。 ```jsp <s:file name="file"/> ``` ##### 20. `<s:form>` - 表单标签 用于创建一个表单。 ```jsp <s:form action="submitAction"> <s:textfield name=...
- **用途**:与<s:iterator>标签一起使用,用于数据生成。 - **示例**: ```xml <s:generator separator="," value="%{#list}" /> ``` 22. **<s:head> 头部标签** - **用途**:在<head>标签内使用。 - **...
- **功能**:配合`<s:iterator>`标签使用,用于生成迭代器。 - **示例**: ```xml <s:generator separator="," val="item"> <s:iterator value="items"> <s:property value="#item" /> </s:iterator> </s:...