首先介绍一下我的环境,我用的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)
以下省略

解决方案 »

  1.   

    Struts2好像要导入7个包吧~~个人记得是这样
      

  2.   

    我是这么取的,你看看对你有帮助没struts2要导入的包,我一个一个测试后,必须的包是1、xwork-2.0.4.jar2、struts2-core-2.0.11.jar3、ognl-2.6.11.jar4、freeer-2.3.8.jar
    /**
     * 
     */
    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;
    }
    }