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

HttpServletResponse 回應處理常見錯誤與最佳實踐

     編輯:程式設計綜合問答

原始碼潛在問題

PrintWriter out = response.getWriter();
out.println(result);
out.flush();
out.close(); // ❌ 不要手動 close,容器會管理

關鍵修正

  1. 移除 out.close():關閉 Writer 會提交回應並禁止後續寫入,導致 Filter/Wrapper 異常。
  2. 設定 Content-Type 在獲取 Writer 前:response.setContentType("application/json;charset=UTF-8"); 必須在 getWriter() 之前。
  3. 編碼一致性:確保 charset 與 JVM/資料庫一致,建議統一 UTF-8。
  4. 緩衝區衝突:若已用 getOutputStream() 則不能再呼叫 getWriter(),二者互斥。

完整範例

@Override
protected void doExecute(String location, ActionInvocation inv) throws Exception {
    HttpServletResponse response = (HttpServletResponse) inv.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE);
    String contentType = "application/json;charset=UTF-8";
    response.setContentType(contentType);
    try (PrintWriter out = response.getWriter()) {
        String result = (String) inv.getStack().findValue("jsonResult");
        out.write(result);
        out.flush(); // 可選,容器會自動 flush
    }
}

Struts2 擴展建議

繼承 StrutsResultSupport 實作 execute 而非 doExecute,利用框架內建序列化支援 (JSON/GSON) 簡化代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved