首先介绍一下我的环境,我用的struts版本是2.0.14
我导入的包有:
commons-logging-1.0.4.jar
freeer-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.14.jar
xwork-2.0.7.j
mysql-connector-java-5.1.18-bin.jar我实现了一个Action类,如下:
package com.lyq.action;import java.util.Map;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author Li Yongqiang
* Map类型的request、session、application
*/
public class TestAction extends ActionSupport { private static final long serialVersionUID = 1L;
// Map类型的request
private Map<String, String> request;
// Map类型的session
private Map<String, String> session;
// Map类型的application
private Map<String, String> application;
// 构造方法
@SuppressWarnings("unchecked")
public TestAction(){
// 获取ActionContext对象
ActionContext context = ActionContext.getContext();
// 获取Map类型的request
request = (Map<String, String>) context.get("request");
// 获取Map类型的session
session = context.getSession();
// 获取Map类型的application
application = context.getApplication();
}
/**
* 请求处理方法
* @return String
*/
public String execute() throws Exception{
// 字符串信息
String info = "明日科技";
// 向request添加信息
request.put("info", info);
// 向session添加信息
session.put("info", info);
// 向application添加信息
application.put("info", info);
// 成功返回
return SUCCESS;
}
}我通过调试方法跟踪了一下,发现request,session,application全都是null--------------------------------------------------
报错:
javax.servlet.ServletException: java.lang.NullPointerException
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:422)java.lang.NullPointerException
com.lyq.action.TestAction.execute(TestAction.java:40)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
以下省略
我导入的包有:
commons-logging-1.0.4.jar
freeer-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.14.jar
xwork-2.0.7.j
mysql-connector-java-5.1.18-bin.jar我实现了一个Action类,如下:
package com.lyq.action;import java.util.Map;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author Li Yongqiang
* Map类型的request、session、application
*/
public class TestAction extends ActionSupport { private static final long serialVersionUID = 1L;
// Map类型的request
private Map<String, String> request;
// Map类型的session
private Map<String, String> session;
// Map类型的application
private Map<String, String> application;
// 构造方法
@SuppressWarnings("unchecked")
public TestAction(){
// 获取ActionContext对象
ActionContext context = ActionContext.getContext();
// 获取Map类型的request
request = (Map<String, String>) context.get("request");
// 获取Map类型的session
session = context.getSession();
// 获取Map类型的application
application = context.getApplication();
}
/**
* 请求处理方法
* @return String
*/
public String execute() throws Exception{
// 字符串信息
String info = "明日科技";
// 向request添加信息
request.put("info", info);
// 向session添加信息
session.put("info", info);
// 向application添加信息
application.put("info", info);
// 成功返回
return SUCCESS;
}
}我通过调试方法跟踪了一下,发现request,session,application全都是null--------------------------------------------------
报错:
javax.servlet.ServletException: java.lang.NullPointerException
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:422)java.lang.NullPointerException
com.lyq.action.TestAction.execute(TestAction.java:40)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
以下省略
解决方案 »
- 请问:hibernate中,此时的对象user2是脱管状态,还是瞬时状态?
- 朋友面试的一道算法题,实现简单,但难分辨那种解决方案效率最高,大家进来各抒己见吧。
- 为什么我的Spring+Hibernate+Struts使用JNDI后,第一次保存成功,第二次保存不成功?
- 关于rhino(javascript)访问Java类的权限控制
- 请问初学hibernate,哪个教材比较好?
- 如何静态的下载链接?
- 对struts的一点疑惑 高手请指教
- 用JMS还是Socket
- 项目中出现的问题,在action中调用服务层方法时出错,请帮忙看看 谢谢
- springboot每次修改JSP内容时要重启,但是yml没有相关配置?
- mysql链接错误
- 应用listener(等候器)com.hode.rbac.listener.UserSessionListener设置错误
/**
*
*/
package com.sail.cot.common;import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;
import com.sail.cot.common.entity.PageData;
import com.sail.cot.common.service.BaseSerivce;public abstract class AbstractAction extends ActionSupport{
@Resource(name="BaseService")
protected BaseSerivce baseSerivce;
/**
* PageData 页面通用的查询参数
*/
protected PageData pageData;
/**
* 页面通用返回参数
*/
protected String jsonString;
private HttpServletRequest request;
private HttpServletResponse response;
private HttpSession session;
private ServletContext application;
/**
* @see 功能描述(必填):需要实现该方法,用于查询
* @see 处理流程(选填):
* @see 调用例子(必填):
* @see 相关说明文件:
* @see <p>Author:achui</p>
* @see <p>Create Time:Oct 29, 2011 10:01:12 AM</p>
* @return
* 返回值:String
*/
public abstract String query();
/**
* @see 功能描述(必填):获取前台传递的参数
* @see 处理流程(选填):
* @see 调用例子(必填):
* @see 相关说明文件:
* @see <p>Author:achui</p>
* @see <p>Create Time:Oct 29, 2011 10:04:20 AM</p>
* @param paramName:前台传递的参数名
* @return
* 返回值:String
*/
public String getParam(String paramName){
request = ServletActionContext.getRequest();
String param = request.getParameter(paramName);
return param;
} public HttpServletRequest getRequest() {
return ServletActionContext.getRequest();
} public HttpServletResponse getResponse() {
return ServletActionContext.getResponse();
} /**
* @see 功能描述(必填):获取Session集合
* @see 处理流程(选填):
* @see 调用例子(必填):
* @see 相关说明文件:
* @see <p>Author:achui</p>
* @see <p>Create Time:Oct 29, 2011 10:13:02 AM</p>
* @return
* 返回值:Map
*/
public HttpSession getSession() {
return this.getRequest().getSession();
}
public ServletContext getApplication(){
return ServletActionContext.getServletContext();
} public BaseSerivce getBaseSerivce() {
return baseSerivce;
} public PageData getPageData() {
return pageData;
} public void setPageData(PageData pageData) {
this.pageData = pageData;
}
public String getJsonString() {
return jsonString;
}
public void setJsonString(String jsonString) {
this.jsonString = jsonString;
}
}