struts获取web页面时,request为null。
错误信息如下:
java.lang.NullPointerException
com.yy.action.loginAction1.execute(loginAction1.java:41) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:606)
action代码如下:
loginAction1.Java
package com.yy.action;
import java.util.Map;
import org.apache.log4j.Logger;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class loginAction1 extends ActionSupport{
/*
*
* */
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger("studyStruts2");
private Map request;
private Map session;
private Map application;
public loginAction1() {
logger.info(new Throwable().getStackTrace()[0]);
request = (Map)ActionContext.getContext().get("request");
session = ActionContext.getContext().getSession();
application = ActionContext.getContext().getApplication();
}
public String execute(){
logger.info(new Throwable().getStackTrace()[0]);
logger.info("a"+request);
request.put("r1", "r2");
application.put("a1", "a2");
session.put("s1", "s2");
return SUCCESS;
}
}
一直找不到原因。看马士兵讲的视频时,说是web.xml中struts过滤器原因。果不其然,2.0的配置会使得获取的request为null,而2.1的配置正常。
web.xml中struts配置如下(红色为正确配置):<filter>
<filter-name>struts2</filter-name>
<!-- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> --> <!-- 2.0的配置会导致 loginAction1中request为null -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <!-- 2.1的配置正常运行 -->
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>