1、使用ActionContext对象,采用解耦合的方式访问ServletAPI
ActionContext context = ActionContext.getContext();
jsp
<form action="${pageContext.request.contextPath }/demo04/scope1.action" method="post"> <input type="text" name="scopetext" /> <input type="submit" value="提交" /> </form>
action,通过context获取的对象都是Map,这种方式完全与Servlet解构
public class ScopeAction1 extends ActionSupport { @Override public String execute() { ActionContext context = ActionContext.getContext(); //parameters Map<String, Object> parameters = context.getParameters(); //default return object String[] strs = (String[]) parameters.get("scopetext"); System.out.println(strs[0]); //request scope context.put("reqinfo", "request scope"); System.out.println(context.get("reqinfo")); //session scope Map<String, Object> session = context.getSession(); session.put("sessioninfo", "session sceop"); System.out.println(session.get("sessioninfo")); //appliction scope Map<String, Object> application = context.getApplication(); application.put("appinfo", "application scope"); System.out.println(application.get("appinfo")); return NONE; } }
配置
<package name="demo04" namespace="/demo04" extends="struts-default"> <action name="scope1" class="demo04.ScopeAction1"> </action> </package>
2、使用接口注入的方式使用ServletAPI
jsp
<form action="${pageContext.request.contextPath }/demo04/scope2.action" method="post"> <input type="text" name="scopetext" /> <input type="submit" value="提交" /> </form>
Action,通过实现接口,设置setXXX来获取HttpServletXXX对象
public class ScopeAction2 extends ActionSupport implements ServletContextAware, ServletResponseAware, ServletRequestAware { private HttpServletResponse response; private ServletContext context; private HttpServletRequest request; @Override public String execute() { System.out.println(request.getParameter("scopetext")); // request scope request.setAttribute("reqinfo", "request scope"); System.out.println(request.getAttribute("reqinfo")); // session scope HttpSession session = request.getSession(); session.setAttribute("sessioninfo", "session sceop"); System.out.println(session.getAttribute("sessioninfo")); // appliction scope context.setAttribute("appinfo", "application scope"); System.out.println(context.getAttribute("appinfo")); return NONE; } @Override public void setServletResponse(HttpServletResponse response) { this.response = response; } @Override public void setServletContext(ServletContext context) { this.context = context; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } }
配置
<action name="scope2" class="demo04.ScopeAction2"> </action>
3、通过ServletActionContext耦合的方式获取ServletAPI
jsp
<form action="${pageContext.request.contextPath }/demo04/scope3.action" method="post"> <input type="text" name="scopetext" /> <input type="submit" value="提交" /> </form>
Action
public class ScopeAction3 extends ActionSupport { @Override public String execute() { System.out.println(ServletActionContext.getRequest().getParameter("scopetext")); // request scope ServletActionContext.getRequest().setAttribute("reqinfo", "request scope"); System.out.println(ServletActionContext.getRequest().getAttribute("reqinfo")); // session scope HttpSession session = ServletActionContext.getRequest().getSession(); session.setAttribute("sessioninfo", "session sceop"); System.out.println(session.getAttribute("sessioninfo")); // appliction scope ServletContext context = ServletActionContext.getServletContext(); context.setAttribute("appinfo", "application scope"); System.out.println(context.getAttribute("appinfo")); return NONE; } }
配置
<action name="scope3" class="demo04.ScopeAction3"> </action>
这三种方式最好的是第一种,Action和Servlet完全解耦合,通过ServletActionContext的方式是最直接的,但也是耦合度最高的
相关推荐
3. **如何在Struts2中结合Servlet API**: - 在Action类中注入`HttpServletRequest`和`HttpServletResponse`对象,Struts2支持依赖注入。 - 使用`@SkipValidation`注解来跳过Struts2的验证过程,直接处理请求。 -...
5. **国际化和本地化**:两者都支持,但在Struts2中更加简单,可以直接在Action类或JSP页面中使用。 6. **视图层**:Struts1使用Tiles框架来组织视图,Struts2则提供了更多视图技术的选择,如FreeMarker、JSP、...
在Struts2中,我们通常会在Action类中处理这个逻辑,而在Servlet中,这将在doGet或doPost方法内完成。 现在,我们来看案例中的两个DEMO——JqUploadTest和CosUpload。JqUploadTest可能是指使用jQuery的Upload插件...
Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中广泛应用,尤其是在处理用户交互和业务逻辑方面。本案例“Struts2之Servlet文件上传详解”将聚焦于如何使用Struts2框架配合Servlet实现文件上传...
3. **文件上传**:在Servlet中,通常使用`Part`接口(Java EE 7及以上版本)或`HttpServletRequest`的`getParts()`方法来处理多部分(multipart)形式的文件上传请求。文件内容可以通过`Part`对象的`write()`方法...
在提供的文件名"The Tiles in Struts 2 does not support action.mht"中,我们看到提到了Tiles,这是一个用于构建基于模板的视图的框架,常与Struts2结合使用。如果问题涉及到Tiles,可能是因为在配置Tiles时没有...
在本文中,我们将深入探讨如何使用Servlet来理解Struts2中的文件上传原理。Servlet是Java Web应用程序中的一个组件,用于处理HTTP请求和响应。而Struts2是一个基于MVC(模型-视图-控制器)设计模式的开源Web应用框架...
这些应用展示了如何在实际项目中使用Struts 2的各种功能,如MVC设计模式、拦截器、结果类型、动态方法调用等。开发者可以通过分析和运行这些示例来快速理解和掌握Struts 2的使用方法。 2. **docs**:文档是学习任何...
- **Servlet API**:在Struts2中,文件上传通常涉及Servlet的`Part`接口或`HttpServletRequest`对象,用来获取上传的文件数据。 - **Struts2 FileUpload插件**:Struts2提供了一个内置的FileUpload插件,简化了...
Struts通过ActionForm和Servlet API的Part接口来处理文件上传。在Struts1中,我们通常会使用`org.apache.struts.upload.FormFile`类来封装上传的文件信息,而在Struts2中,它则利用了Apache Commons FileUpload库。 ...
在Action中,我们可以使用Servlet API的Part接口或Struts2的FileItem类来获取上传的文件,并进行后续处理,如保存到服务器的特定目录。 同名文件上传是一个特殊场景,通常需要在服务器端处理文件重命名或覆盖的问题...
第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和 RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。...
当Struts2接收到Multipart请求时,Servlet容器(如Tomcat)会解析请求,将文件内容保存为临时文件,并将文件信息封装到`Part`对象中。在Servlet 3.0及以上版本,可以使用`HttpServletRequest`的`getParts()`方法来...
第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和 RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。...
文件上传功能主要依赖于Java Servlet API中的Part接口,以及Apache Commons FileUpload库。Struts2通过拦截器机制,在请求处理阶段捕获上传的文件并将其存储到服务器的指定路径。它的工作流程大致如下: 1. 用户在...
- Servlet3.0的Part接口:Servlet3.0引入的新特性,允许直接通过Part接口处理文件上传,但该版本的ServletAPI尚未被广泛采用。 - COS(CometD Object Stream):Struts2曾经支持,但现在已停止更新。 -pell:另一...
3. **处理上传请求**:在Action类的execute方法中,使用Servlet API的`Part`接口或者Struts的`FileUpload`拦截器来接收上传的文件。你需要检查文件大小、类型,然后将其保存到服务器的指定位置。 4. **返回响应**:...