錯誤堆疊:
java.lang.NullPointerException
at org.apache.struts2.ServletActionContext.getRequest(ServletActionContext.java:112)
at stu.action.SelectAction.<init>(SelectAction.java:29)
SelectAction.java:29 行在建構子中呼叫 ServletActionContext.getRequest()。ServletActionContext.getRequest() 依賴 ThreadLocal 保存的 HttpServletRequest,建構子執行時請求尚未注入,取得 null。null 呼叫方法 → NPE。execute()、prepare() 或 setServletRequest()(實作 ServletRequestAware)中。public class SelectAction extends ActionSupport implements ServletRequestAware {
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) {
this.request = request; // 這裡 request 已就緒
}
public String execute() {
// 安全使用 request
String param = request.getParameter("id");
...
}
}
若用 Spring 管理 Action,確保 scope="prototype",否則單例模式下建構子只執行一次,更不可用請求相關資源。