1. 程式人生 > >Java Servlet 實戰入門教程-11-servlet 包裝器

Java Servlet 實戰入門教程-11-servlet 包裝器

包裝器

包裝器包裝了實際的請求或響應物件,而且把呼叫委託給實際的物件,還允許你對定製請求或響應做所需的額外處理。

過濾器可以用於建立請求包裝器或建立響應包裝器。

核心類

  • ServletRequestWrapper

  • HttpServletRequestWrapper

  • ServletResponseWrapper

  • HttpServletResponseWrapper

使用步驟

  1. 編寫 *Wrapper 的子類

  2. 重寫希望修改其行為的方法

一般用於 過濾器

實戰程式碼

業務場景

對於請求的資訊進行修改,比如編碼資訊。可以參考例子 Servlet過濾器、包裝器

為了簡單起見,本例子演示修改 request 入參。

比如替換一些敏感詞彙、非法字元等等

例項程式碼

程式碼

  • 自定義的請求包裝類
public class MyRequestWapper extends HttpServletRequestWrapper {

    private HttpServletRequest request;

    public MyRequestWapper(HttpServletRequest request) {
        super(request);
        this.request = request;
    }

    @Override
    public String getParameter
(String name) { String value = request.getParameter(name); // 敏感詞替換等 return value.replaceAll("bad", "good"); } }
  • 敏感詞彙過濾器
@WebFilter(urlPatterns = {"/wrapper/*"})
public class WordFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {
} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(new MyRequestWapper((HttpServletRequest) request), response); } public void destroy() { } }
  • 簡單的例項 servlet
@WebServlet("/wrapper/word")
public class WapperWordServlet extends HttpServlet {

    private static final long serialVersionUID = 3994711400300020410L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write(req.getParameter("evaluation"));
    }

}

測試

頁面顯示:

goodrequest

參考資料

《Head First Servlet & JSP》

教程導航

教程彙總