`

Struts2 part 3:在Action中使用ServletAPI

阅读更多

 

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的方式是最直接的,但也是耦合度最高的

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Struts2 直接访问Servlet API(二十五)

    3. **如何在Struts2中结合Servlet API**: - 在Action类中注入`HttpServletRequest`和`HttpServletResponse`对象,Struts2支持依赖注入。 - 使用`@SkipValidation`注解来跳过Struts2的验证过程,直接处理请求。 -...

    struts2和struts1 API及使用指南 chm

    5. **国际化和本地化**:两者都支持,但在Struts2中更加简单,可以直接在Action类或JSP页面中使用。 6. **视图层**:Struts1使用Tiles框架来组织视图,Struts2则提供了更多视图技术的选择,如FreeMarker、JSP、...

    java上传与下载——struts2和servlet案例

    在Struts2中,我们通常会在Action类中处理这个逻辑,而在Servlet中,这将在doGet或doPost方法内完成。 现在,我们来看案例中的两个DEMO——JqUploadTest和CosUpload。JqUploadTest可能是指使用jQuery的Upload插件...

    Struts2之Servlet文件上传详解案例struts010

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中广泛应用,尤其是在处理用户交互和业务逻辑方面。本案例“Struts2之Servlet文件上传详解”将聚焦于如何使用Struts2框架配合Servlet实现文件上传...

    servlet上传 struts下载例子

    3. **文件上传**:在Servlet中,通常使用`Part`接口(Java EE 7及以上版本)或`HttpServletRequest`的`getParts()`方法来处理多部分(multipart)形式的文件上传请求。文件内容可以通过`Part`对象的`write()`方法...

    Files在Struts2下不生效的解决办法

    在提供的文件名"The Tiles in Struts 2 does not support action.mht"中,我们看到提到了Tiles,这是一个用于构建基于模板的视图的框架,常与Struts2结合使用。如果问题涉及到Tiles,可能是因为在配置Tiles时没有...

    通过Servlet文件上传理解Struts2文件上传原理(附源码)

    在本文中,我们将深入探讨如何使用Servlet来理解Struts2中的文件上传原理。Servlet是Java Web应用程序中的一个组件,用于处理HTTP请求和响应。而Struts2是一个基于MVC(模型-视图-控制器)设计模式的开源Web应用框架...

    struts-2.3.8-all-part1

    这些应用展示了如何在实际项目中使用Struts 2的各种功能,如MVC设计模式、拦截器、结果类型、动态方法调用等。开发者可以通过分析和运行这些示例来快速理解和掌握Struts 2的使用方法。 2. **docs**:文档是学习任何...

    struts2上传下载

    - **Servlet API**:在Struts2中,文件上传通常涉及Servlet的`Part`接口或`HttpServletRequest`对象,用来获取上传的文件数据。 - **Struts2 FileUpload插件**:Struts2提供了一个内置的FileUpload插件,简化了...

    使用struts上传文件

    Struts通过ActionForm和Servlet API的Part接口来处理文件上传。在Struts1中,我们通常会使用`org.apache.struts.upload.FormFile`类来封装上传的文件信息,而在Struts2中,它则利用了Apache Commons FileUpload库。 ...

    flex struts2文件上传

    在Action中,我们可以使用Servlet API的Part接口或Struts2的FileItem类来获取上传的文件,并进行后续处理,如保存到服务器的特定目录。 同名文件上传是一个特殊场景,通常需要在服务器端处理文件重命名或覆盖的问题...

    精通struts:基于mvc的java web设计与开发part3

    第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和 RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。...

    Struts2.0文件上传原理

    当Struts2接收到Multipart请求时,Servlet容器(如Tomcat)会解析请求,将文件内容保存为临时文件,并将文件信息封装到`Part`对象中。在Servlet 3.0及以上版本,可以使用`HttpServletRequest`的`getParts()`方法来...

    精通struts:基于mvc的java web设计与开发part2

    第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和 RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。...

    struts实现文件上传功能

    文件上传功能主要依赖于Java Servlet API中的Part接口,以及Apache Commons FileUpload库。Struts2通过拦截器机制,在请求处理阶段捕获上传的文件并将其存储到服务器的指定路径。它的工作流程大致如下: 1. 用户在...

    struts2学习笔记三

    - Servlet3.0的Part接口:Servlet3.0引入的新特性,允许直接通过Part接口处理文件上传,但该版本的ServletAPI尚未被广泛采用。 - COS(CometD Object Stream):Struts2曾经支持,但现在已停止更新。 -pell:另一...

    Struts+swfupload实现文件上传功能

    3. **处理上传请求**:在Action类的execute方法中,使用Servlet API的`Part`接口或者Struts的`FileUpload`拦截器来接收上传的文件。你需要检查文件大小、类型,然后将其保存到服务器的指定位置。 4. **返回响应**:...

Global site tag (gtag.js) - Google Analytics