`
冬天秋天
  • 浏览: 47319 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

使用ServletRequestAware ActionContext 需小心之处

阅读更多
@SuppressWarnings("serial")
public class TestRequestAction extends ActionSupport implements ServletRequestAware{
    private HttpServletRequest request ;
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
	String retString = request.getParameter("retString");
	public String showRet(){
		
		System.out.println(retString);
		return this.SUCCESS;
	}
	
}

---------------------------------------------------------------------------------
@SuppressWarnings("serial")
public class TestRequestAction extends ActionSupport implements ServletRequestAware{
    private HttpServletRequest request ;
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
	
	public String showRet(){
		String retString = request.getParameter("retString");
		System.out.println(retString);
		return this.SUCCESS;
	}
	
}

大家看到第一段代码 和第二代代码有哪些不同吗?区别就是使用request的地点区别,如果使用第一段代码就有可能报
“Unable to instantiate Action, ....action.CertAction, defined for '...' in namespace '/...'null ”的错误。
执行顺序:
1、通过request请求取得action的命名空间
2、根据servlet请求的Path,解析出要调用该请求的Action的名字(actionName)
3、创建Action上下文(extraContext)
4、根据前面获得的namespace、actionName、extraContext,创建一个ActonProxy
5、执行proxy的execute()方法,根据Action执行返回的值去调用执行相应的Result(返回结果处理)的方法。
先要构造了Action对象实例,才能拥有HttpServletRequest 实例;
同样的Action对象实例在ActionContext对象实例之前创建的,所有这样取得ActionContext容器对象就有可能会返回null.
因此解决次问题方法很简单,就是最好不要在成员变量或者是构造方法里直接使用注入对象或者调用ActionContext,而应该把它放在其它方法里.
分享到:
评论
1 楼 zslin2011 2015-02-03  
学过Java的新手都知道第一段Java代码会报告空指针异常。因为request和retString都是成员变量,成员变量在创建对象时会首先进行初始化。那个set方法要在创建对象后才能被调用

相关推荐

    struts2使用request、response

    ### Struts2中request与response的使用方法 #### 一、引言 Struts2作为Struts1的后续版本,在架构设计与实现机制上...通过使用Struts2提供的接口、注解或ActionContext,开发者能够方便地进行Web开发,提高开发效率。

    struts2之Action访问Servlet API

    Struts2 框架提供了多种方式来访问 Servlet API,包括使用 ActionContext 类、实现接口和使用 ServletActionContext 类等。在本文中,我们将详细介绍 Struts2 访问 Servlet API 的几种方法。 一、使用 ...

    ServletRequestAware.rar_按钮控件_Java_

    在描述中提到的"ActionContext类及其简单应用",虽然ActionContext是Struts2框架中的一个类,但这里我们可以将其与`ServletRequestAware`进行对比,理解它们在处理按钮点击事件中的不同角色。 `ActionContext`是...

    STRUTS2获得session和request

    除了实现特定接口的方式,STRUTS2还提供了另一种更加通用的方式来访问`session`和`request`,那就是使用`ActionContext`。`ActionContext`是STRUTS2内部用于存储当前请求上下文信息的一个容器,通过它可以直接获取到...

    Struts2在Action中获得Response对象的四种方法

    在Struts2框架中,Action类是业务逻辑的核心...而如果需要更复杂的请求处理,可以考虑使用ActionContext或者ServletActionContext。同时,使用RequestAware拦截器可以获取到更多的请求相关数据,但需要额外的类型转换。

    STRUTS2获得作用域、参数响应对象及三种符号说明

    通过实现特定的接口或使用`ActionContext`和`ServletActionContext`类,开发者可以轻松地获取`request`、`session`和`response`对象。这些工具极大地简化了Web应用程序的开发过程,提高了代码的可维护性和可扩展性。

    Struts2 如何使Action取得属性范围 通配符 国际化等内容

    - **解释**: 通过`ActionContext.getContext()`获取当前的`ActionContext`实例,然后从中获取`request`对象,进一步获取`request`范围内的数据。 2. **Servlet不相关的IoC方式** - **原理**: 在这种方式下,...

    struts2.1文档

    总结来说,Struts2.1提供了多种方式来获取和操作Servlet对象,包括直接通过`ActionContext`、使用`ServletActionContext`以及通过IoC和`Aware`接口。这些方法各有优势,可以根据实际需求选择合适的方式。了解并熟练...

    Struts2中Servlet的配置

    `ActionContext`是Struts2的核心类之一,它封装了当前请求的所有上下文信息,包括ActionInvocation、ValueStack、Parameters等。你可以通过`ActionContext`来获取`ServletActionContext`,进一步获取到`...

    struts2的API耦合与动态方法调用

    3. **实现ServletAware接口**:为了进一步解耦,Struts2允许开发者通过实现ServletRequestAware或ServletResponseAware接口,让Action类自动注入HttpServletRequest和HttpServletResponse对象。这样,无需在Action类...

    struts2访问request,session,application作用域

    // 使用 ActionContext 来获取 ActionContext context = ActionContext.getContext(); Map request = (Map)context.get("request"); Map session = context.getSession(); Map application = context.getApplication...

    达内培训机密资料_struts2_day03(1)

    类似地,还可以实现`ServletRequestAware`、`ServletResponseAware`和`ServletContextAware`等接口来获取更多的请求信息。 #### 配置Action - **使用通配符配置Action:** 通过通配符可以更加灵活地配置Action的...

    访问Web页面元素

    类似于第二种方法,Action类实现`ServletRequestAware`接口,这样Struts2会自动注入`HttpServletRequest`对象。同样地,可以在Action类中声明`HttpSession`和`ServletContext`属性,并通过实现相应的接口(例如`...

    Struts2访问Servlet的三种方式

    例如,在下面的代码中,ActionTest9 类使用 ActionContext 类来访问 request、response 和 application 对象。 ```java public class ActionTest9 extends ActionSupport { public String demo(){ ActionContext ...

    Struts2访问servlet分享

    类似地,可以使用`ActionContext`的`getSession()`方法来获取session,并设置session属性: ```java ctx.getSession().put("ses", "session范围"); ``` JSP中展示session属性: ```jsp ${sessionScope.ses...

    Struts2课后练习答案.docx

    其中,使用ServletActionContext和实现ServletRequestAware接口的方法与Servlet API耦合度较高。 4. **结果类型redirect与redirectAction的区别**: - **redirect**:重定向到一个新的URL,可以是内部Action,也...

    struts相关资料

    - **解耦方式**:使用`ActionContext.getContext().get("request")`。 - **实现接口**:实现`servletRequestAware`接口,让Struts自动注入。 9. **JSTL、EL与OGNL的区别** - **JSTL和EL**:主要访问Servlet作用...

    struts,ajax,json

    关于Struts 2的Action如何与Servlet API进行交互,业务逻辑Action可以通过实现ServletRequestAware、ServletResponseAware和ServletContextAware接口来实现。通过这些接口中的setter方法,可以将容器中的request、...

Global site tag (gtag.js) - Google Analytics