看了STRUTS源代码
怎么也没看到 ActionForm 里面的
MultipartRequestHandler multipartRequestHandler
如何获取到到request的数据的代码
以下为RequestUtils拷贝属性方法,忘大侠们指点一二:
public static void populate(Object bean, String prefix, String suffix,
HttpServletRequest request)
throws ServletException {
// Build a list of relevant request parameters from this request
HashMap properties = new HashMap();
// Iterator of parameter names
Enumeration names = null;
// Map for multipart parameters
Map multipartParameters = null;
String contentType = request.getContentType();
String method = request.getMethod();
boolean isMultipart = false;
if (bean instanceof ActionForm) {
((ActionForm) bean).setMultipartRequestHandler(null);
}
MultipartRequestHandler multipartHandler = null;
if ((contentType != null)
&& (contentType.startsWith("multipart/form-data"))
&& (method.equalsIgnoreCase("POST"))) {
// Get the ActionServletWrapper from the form bean
ActionServletWrapper servlet;
if (bean instanceof ActionForm) {
servlet = ((ActionForm) bean).getServletWrapper();
} else {
throw new ServletException("bean that's supposed to be "
+ "populated from a multipart request is not of type "
+ "\"org.apache.struts.action.ActionForm\", but type "
+ "\"" + bean.getClass().getName() + "\"");
}
// Obtain a MultipartRequestHandler
multipartHandler = getMultipartHandler(request);
if (multipartHandler != null) {
isMultipart = true;
// Set servlet and mapping info
servlet.setServletFor(multipartHandler);
multipartHandler.setMapping((ActionMapping) request
.getAttribute(Globals.MAPPING_KEY));
// Initialize multipart request class handler
multipartHandler.handleRequest(request);
//stop here if the maximum length has been exceeded
Boolean maxLengthExceeded =
(Boolean) request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
if ((maxLengthExceeded != null)
&& (maxLengthExceeded.booleanValue())) {
((ActionForm) bean).setMultipartRequestHandler(multipartHandler);
return;
}
//retrieve form values and put into properties
multipartParameters =
getAllParametersForMultipartRequest(request,
multipartHandler);
names = Collections.enumeration(multipartParameters.keySet());
}
}
if (!isMultipart) {
names = request.getParameterNames();
}
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
String stripped = name;
if (prefix != null) {
if (!stripped.startsWith(prefix)) {
continue;
}
stripped = stripped.substring(prefix.length());
}
if (suffix != null) {
if (!stripped.endsWith(suffix)) {
continue;
}
stripped =
stripped.substring(0, stripped.length() - suffix.length());
}
Object parameterValue = null;
if (isMultipart) {
parameterValue = multipartParameters.get(name);
} else {
parameterValue = request.getParameterValues(name);
}
// Populate parameters, except "standard" struts attributes
// such as 'org.apache.struts.action.CANCEL'
if (!(stripped.startsWith("org.apache.struts."))) {
properties.put(stripped, parameterValue);
}
}
// Set the corresponding properties of our bean
try {
BeanUtils.populate(bean, properties);
} catch (Exception e) {
throw new ServletException("BeanUtils.populate", e);
} finally {
if (multipartHandler != null) {
// Set the multipart request handler for our ActionForm.
// If the bean isn't an ActionForm, an exception would have been
// thrown earlier, so it's safe to assume that our bean is
// in fact an ActionForm.
((ActionForm) bean).setMultipartRequestHandler(multipartHandler);
}
}
}
分享到:
相关推荐
Struts2file2是一个基于Maven构建的Java Web项目,主要功能是实现文件的上传与下载功能。在Struts2框架下,文件上传和下载是常见的需求,它们涉及到Web开发中的许多关键概念和技术,包括HTTP协议、表单提交、文件流...
在Struts2框架中,文件上传是通过一个叫做`FileUploadInterceptor`的拦截器来实现的,这个拦截器处理了请求中的多部分数据,也就是通常所说的HTTP的multipart/form-data类型的数据。 首先,要实现Struts2的文件上传...
总而言之,Struts2对各种文件类型的全面支持使得开发人员能够方便地处理用户上传的各种类型的数据,从而丰富了Web应用的功能。理解并正确处理这些MIME类型对于开发健壮的、安全的文件上传功能至关重要。
在文件上传方面,Struts2提供了内置的`FileUpload interceptor`,可以方便地处理multipart/form-data类型的表单数据,从而接收并保存上传的文件。 为了实现jQuery与Struts2的文件上传,你需要做以下步骤: 1. **...
FormFile是Struts1用来处理上传文件的类,它可以获取文件名、内容类型、大小等信息。在这个例子中,使用了一个ArrayList来存储用户选择的所有文件: ```java public class BatchUploadForm extends ActionForm { ...
在Struts1.2版本中,实现多文件上传是一项常见的需求,它允许用户在一次提交中上传多个文件,这对于数据交互、资源分享等场景非常实用。在本教程中,我们将深入探讨如何在Struts1.2中实现这一功能。 首先,理解多...
在Struts2中,文件上传是常见的功能之一,尤其在处理用户提交的表单数据时,如上传图片、文档等。在本项目中,"struts2多文件的上传"实现了用户一次性上传多个文件的能力。 要理解这个功能,首先我们需要了解Struts...
在文件上传场景中,Struts2主要负责接收前端发送的文件数据,并将这些数据存储到服务器的指定位置。配置Struts2的Action类和相应的XML配置文件,可以定义文件上传的处理逻辑。 接着,jQuery是一个高效、简洁的...
#### struts.velocity.configfile 指定了Velocity框架所需的`velocity.properties`文件的位置,默认值为`velocity.properties`。 #### struts.velocity.contexts 指定了Velocity框架的`Context`位置,如果有多个`...
4. **接收文件**:在Action类中,我们可以声明一个`File`类型的字段和对应的`String`类型的字段(用于存储文件名)。Struts2会自动将上传的文件数据填充到这些字段。例如: ```java private File uploadFile; ...
默认情况下,Struts2提供了多种内置的转换器,可以处理基本数据类型和一些常见的Java对象,如Date、File等。当Action类的属性与请求参数类型不匹配时,Struts2会自动寻找合适的转换器进行转换。 **转换器的注册和...
<form-property name="file" type="org.apache.struts.upload.FormFile"/> <controller processorClass="org.apache.struts.upload.MultipartRequestHandler" maxFileSize="1000000" /> ``` ### 5. 表单与JSP...
在这里,我们使用了`stream`结果类型,它可以处理流数据。`contentType`、`contentDisposition`参数分别对应HTTP响应头,`inputName`则指定了Action中用于提供文件流的属性。 此外,还需要在JSP页面上创建一个链接...
在Struts中,Validation框架是用于处理用户输入验证的重要组件,它可以确保用户提交的数据符合预定义的规则,从而提高应用程序的安全性和用户体验。 在创建一个注册模块时,通常需要对用户的输入数据进行严格的验证...
在Struts2中处理文件下载是常见的需求,比如用户请求下载服务器上的文件,如PDF、图片或其他类型的文档。本案例"Struts2之struts012"将深入探讨如何在Struts2中实现文件下载的功能。 首先,我们需要创建一个Action...
在Struts2中,我们可以使用`<interceptor-ref>`标签来引用`params`拦截器,它负责处理表单数据,包括上传的文件。例如: ```xml <package name="upload" namespace="/" extends="struts-default"> ...
- **Struts的File和FileDataSource**: 在ActionForm中,可以定义File类型的属性来接收上传的文件,同时可以使用FileDataSource接口来存储文件内容。 - **临时文件存储**: 上传的文件通常会先保存在服务器的临时...
在Struts2中,文件上传功能是常见的需求,比如用户可能需要上传个人照片、文档或者其他类型的文件。在这个"Struts2之struts2文件上传详解案例struts011"中,我们将深入探讨如何实现这一功能。 首先,我们需要了解...
- JSP页面负责显示数据和接收用户输入,通过Struts标签库(如struts-tiles或struts-bean标签)与ActionForm或DynaActionForm交互。 通过以上步骤,你可以使用Eclipse构建一个基本的Struts1.2应用程序。不过,实际...
使用`@Result`注解定义结果类型,如`json`,并使用`@Parameters`注解获取前端发送的参数。 ```java import org.apache.struts2.interceptor.ParameterAware; import com.opensymphony.xwork2.ActionSupport; import...