Struts 2文件上传 Struts2 值栈 OGNL Struts 2数据库访问 Struts 2框架使用“基于HTML的基于表单的文件上传”为内容处理文件上传提供内置支持。上传文件时,通常会将其存储在临时目录中,并且应该将其处理或由Action类移动到永久目录以确保数据不会丢失。 注 - 服务器可能有适当的安全策略,禁止您写入除临时目录和属于您的Web应用程序的目录以外的目录。 通过预定义的拦截器 FileUpload 拦截器可以在Struts中上传文件,该拦截器可通过org.apache.struts2.interceptor.FileUploadInterceptor类获得,并作为 defaultStack的 一部分包含在拦截器中。你仍然可以在你的struts.xml中使用它来设置各种参数,我们将在下面看到。 创建视图文件 让我们开始创建浏览和上传选定文件所需的视图。因此,让我们用简单的HTML上传表单创建一个 index.jsp ,允许用户上传文件 - <%@ page language = "java" contentType = "text/html; charset = ISO-8859-1" pageEncoding = "ISO-8859-1"%> <%@ taglib prefix = "s" uri = "/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>File Upload</title> </head> <body> <form action = "upload" method = "post" enctype = "multipart/form-data"> <label for = "myFile">Upload your file</label> <input type = "file" name = "myFile" /> <input type = "submit" value = "Upload"/> </form> </body> </html> 在上面的例子中有几点值得注意。首先,表单的enctype被设置为 multipart / form-data 。这应该设置,以便文件上传拦截器成功处理文件上传。下一点要注意的是表单的操作方法 上传 和文件上传字段的名称 - 这是 myFile 。我们需要这些信息来创建操作方法和struts配置。 接下来,让我们创建一个简单的jsp文件 success.jsp, 以显示我们文件上传的结果,以防成功。 <%@ page contentType = "text/html; charset = UTF-8" %> <%@ taglib prefix = "s" uri = "/struts-tags" %> <html> <head> <title>File Upload Success</title> </head> <body> You have successfully uploaded <s:property value = "myFileFileName"/> </body> </html> 如果 上传文件时出现错误,以下是结果文件 error.jsp - <%@ page contentType = "text/html; charset = UTF-8" %> <%@ taglib prefix = "s" uri = "/struts-tags" %> <html> <head> <title>File Upload Error</title> </head> <body> There has been an error in uploading the file. </body> </html> 创建操作类 接下来,让我们创建一个名为 uploadFile.java 的Java类,它将负责上传文件并将该文件存储在安全的位置 - package com.CodingDict.struts2; import java.io.File; import org.apache.commons.io.FileUtils; import java.io.IOException; import com.opensymphony.xwork2.ActionSupport; public class uploadFile extends ActionSupport { private File myFile; private String myFileContentType; private String myFileFileName; private String destPath; public String execute() { /* Copy file to a safe location */ destPath = "C:/apache-tomcat-6.0.33/work/"; try { System.out.println("Src File name: " + myFile); System.out.println("Dst File name: " + myFileFileName); File destFile = new File(destPath, myFileFileName); FileUtils.copyFile(myFile, destFile); } catch(IOException e) { e.printStackTrace(); return ERROR; } return SUCCESS; } public File getMyFile() { return myFile; } public void setMyFile(File myFile) { this.myFile = myFile; } public String getMyFileContentType() { return myFileContentType; } public void setMyFileContentType(String myFileContentType) { this.myFileContentType = myFileContentType; } public String getMyFileFileName() { return myFileFileName; } public void setMyFileFileName(String myFileFileName) { this.myFileFileName = myFileFileName; } } 该 uploadFile.java 是一个非常简单的类。需要注意的重要一点是FileUpload拦截器和Parameters Interceptor一起为我们完成所有繁重的工作。 FileUpload拦截器默认为您提供三个参数。他们被命名为以下模式 - [你的文件名参数] - 这是用户上传的实际文件。 在这个例子中它将是“myFile” [你的文件名参数] ContentType - 这是上传文件的内容类型。 在这个例子中它将是“myFileContentType” [你的文件名参数] FileName - 这是上传文件的名称。 在这个例子中它将是“myFileFileName” 这三个参数对我们是可用的,这要归功于Struts拦截器。我们所要做的就是在Action类中创建三个具有正确名称的参数,并自动为我们自动连接这些变量。所以,在上面的例子中,我们有三个参数和一个操作方法,如果一切顺利,它将返回“成功”,否则返回“错误”。 配置文件 以下是控制文件上传过程的Struts2配置属性 - 序号 属性和说明 1 struts.multipart.maxSize 作为文件上传接受的文件的最大大小(以字节为单位)。默认值是250M。 2 struts.multipart.parser 该库用于上传多部分表单。默认情况下是 **雅加达** 3 struts.multipart.saveDir 存储临时文件的位置。默认情况下是javax.servlet.context.tempdir。 为了更改任何这些设置,您可以在您的应用程序struts.xml文件中使用 常量 标记,就像我更改要上载的文件的最大大小一样。 让我们有我们的 struts.xml 如下 - <?xml version = "1.0" Encoding = "UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name = "struts.devMode" value = "true" /> <constant name = "struts.multipart.maxSize" value = "1000000" /> <package name = "helloworld" extends = "struts-default"> <action name = "upload" class = "com.CodingDict.struts2.uploadFile"> <result name = "success">/success.jsp</result> <result name = "error">/error.jsp</result> </action> </package> </struts> 因为 FileUpload 拦截器是默认的拦截器栈的一部分,所以我们不需要对它进行明确配置。但是,您可以在中添加标签。fileUpload拦截器有两个参数 (a)maximumSize 和 (b)allowedTypes 。 maximumSize参数设置允许的最大文件大小(默认值约为2MB)。allowedTypes参数是可接受内容(MIME)类型的逗号分隔列表,如下所示 - <action name = "upload" class = "com.CodingDict.struts2.uploadFile"> <interceptor-ref name = "basicStack"> <interceptor-ref name = "fileUpload"> <param name = "allowedTypes">image/jpeg,image/gif</param> </interceptor-ref> <result name = "success">/success.jsp</result> <result name = "error">/error.jsp</result> </action> 以下是 web.xml 文件的内容- <?xml version = "1.0" Encoding = "UTF-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "WebApp_ID" version = "3.0"> <display-name>Struts 2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <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> </web-app> 现在右键单击项目名称,然后单击 导出 > WAR文件以创建一个 WAR 文件。然后将这个WAR部署到Tomcat的webapps目录中。最后,启动Tomcat服务器并尝试访问URL http:// localhost:8080 / HelloWorldStruts2 / upload.jsp 。这将产生以下屏幕 - 现在使用浏览按钮选择一个文件“Contacts.txt”,点击上传按钮将上传文件到你的服务器上,你应该看到下一页。你可以检查上传的文件应该保存在C:\ apache-tomcat-6.0.33 \ work中。 请注意,FileUpload拦截器会自动删除上传的文件,因此您必须以编程方式将上传的文件保存在某个位置,然后才能删除。 错误消息 fileUplaod拦截器使用几个默认的错误消息键 - 序号 错误消息键和说明 1 struts.messages.error.uploading 文件无法上传时发生的一般错误。 2 struts.messages.error.file.too.large 上传的文件太大时,由maximumSize指定时发生。 3 struts.messages.error.content.type.not.allowed 当上传的文件与指定的预期内容类型不匹配时发生。 您可以在 WebContent / WEB-INF / classes / messages.properties 资源文件中覆盖这些消息的文本。 Struts2 值栈 OGNL Struts 2数据库访问