首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

SSH 整合 Tomcat 啟動報錯:SelectAction 空指針異常排查

     編輯:程式設計疑難解答

錯誤堆棧分析

Caused by: java.lang.NullPointerException
    at org.apache.struts2.ServletActionContext.getRequest(ServletActionContext.java:112)
    at stu.action.SelectAction.(SelectAction.java:29)

根因定位

SelectAction 構造器中(第 29 行)調用了 ServletActionContext.getRequest(),但此時 **Struts2 尚未初始化完成**,ThreadLocal 中無 Request 對象,導致 NPE。

錯誤代碼模式

public class SelectAction extends ActionSupport {
    private HttpServletRequest request = ServletActionContext.getRequest(); // 錯誤!構造期調用
    // ...
}

正確做法

方案一:在 execute 方法中獲取

public String execute() {
    HttpServletRequest request = ServletActionContext.getRequest(); // 正確:Action 執行期
    // 使用 request
    return SUCCESS;
}

方案二:實現 ServletRequestAware 接口(推薦)

public class SelectAction extends ActionSupport implements ServletRequestAware {
    private HttpServletRequest request;

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request; // 框架自動注入
    }
}

其他可能原因

  • Spring 配置中 selectAction bean 定義錯誤(如 scope=prototype 導致多實例)
  • JDK 版本不兼容(建議 JDK 1.8+,Tomcat 7/8/9)
  • jar 包衝突:檢查 struts2-core、spring-web 版本一致性

調試建議

  1. 在 SelectAction 構造器打斷點,觀察調用棧
  2. 啟用 Struts2 devMode:<constant name="struts.devMode" value="true"/>
  3. 查看完整日誌,定位第一個 Caused by
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved