@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,而应该把它放在其它方法里.
分享到:
相关推荐
### Struts2中request与response的使用方法 #### 一、引言 Struts2作为Struts1的后续版本,在架构设计与实现机制上...通过使用Struts2提供的接口、注解或ActionContext,开发者能够方便地进行Web开发,提高开发效率。
Struts2 框架提供了多种方式来访问 Servlet API,包括使用 ActionContext 类、实现接口和使用 ServletActionContext 类等。在本文中,我们将详细介绍 Struts2 访问 Servlet API 的几种方法。 一、使用 ...
在描述中提到的"ActionContext类及其简单应用",虽然ActionContext是Struts2框架中的一个类,但这里我们可以将其与`ServletRequestAware`进行对比,理解它们在处理按钮点击事件中的不同角色。 `ActionContext`是...
除了实现特定接口的方式,STRUTS2还提供了另一种更加通用的方式来访问`session`和`request`,那就是使用`ActionContext`。`ActionContext`是STRUTS2内部用于存储当前请求上下文信息的一个容器,通过它可以直接获取到...
在Struts2框架中,Action类是业务逻辑的核心...而如果需要更复杂的请求处理,可以考虑使用ActionContext或者ServletActionContext。同时,使用RequestAware拦截器可以获取到更多的请求相关数据,但需要额外的类型转换。
通过实现特定的接口或使用`ActionContext`和`ServletActionContext`类,开发者可以轻松地获取`request`、`session`和`response`对象。这些工具极大地简化了Web应用程序的开发过程,提高了代码的可维护性和可扩展性。
- **解释**: 通过`ActionContext.getContext()`获取当前的`ActionContext`实例,然后从中获取`request`对象,进一步获取`request`范围内的数据。 2. **Servlet不相关的IoC方式** - **原理**: 在这种方式下,...
总结来说,Struts2.1提供了多种方式来获取和操作Servlet对象,包括直接通过`ActionContext`、使用`ServletActionContext`以及通过IoC和`Aware`接口。这些方法各有优势,可以根据实际需求选择合适的方式。了解并熟练...
`ActionContext`是Struts2的核心类之一,它封装了当前请求的所有上下文信息,包括ActionInvocation、ValueStack、Parameters等。你可以通过`ActionContext`来获取`ServletActionContext`,进一步获取到`...
3. **实现ServletAware接口**:为了进一步解耦,Struts2允许开发者通过实现ServletRequestAware或ServletResponseAware接口,让Action类自动注入HttpServletRequest和HttpServletResponse对象。这样,无需在Action类...
// 使用 ActionContext 来获取 ActionContext context = ActionContext.getContext(); Map request = (Map)context.get("request"); Map session = context.getSession(); Map application = context.getApplication...
类似地,还可以实现`ServletRequestAware`、`ServletResponseAware`和`ServletContextAware`等接口来获取更多的请求信息。 #### 配置Action - **使用通配符配置Action:** 通过通配符可以更加灵活地配置Action的...
类似于第二种方法,Action类实现`ServletRequestAware`接口,这样Struts2会自动注入`HttpServletRequest`对象。同样地,可以在Action类中声明`HttpSession`和`ServletContext`属性,并通过实现相应的接口(例如`...
例如,在下面的代码中,ActionTest9 类使用 ActionContext 类来访问 request、response 和 application 对象。 ```java public class ActionTest9 extends ActionSupport { public String demo(){ ActionContext ...
类似地,可以使用`ActionContext`的`getSession()`方法来获取session,并设置session属性: ```java ctx.getSession().put("ses", "session范围"); ``` JSP中展示session属性: ```jsp ${sessionScope.ses...
其中,使用ServletActionContext和实现ServletRequestAware接口的方法与Servlet API耦合度较高。 4. **结果类型redirect与redirectAction的区别**: - **redirect**:重定向到一个新的URL,可以是内部Action,也...
- **解耦方式**:使用`ActionContext.getContext().get("request")`。 - **实现接口**:实现`servletRequestAware`接口,让Struts自动注入。 9. **JSTL、EL与OGNL的区别** - **JSTL和EL**:主要访问Servlet作用...
关于Struts 2的Action如何与Servlet API进行交互,业务逻辑Action可以通过实现ServletRequestAware、ServletResponseAware和ServletContextAware接口来实现。通过这些接口中的setter方法,可以将容器中的request、...