Java Servlet 實戰入門教程-11-servlet 包裝器
阿新 • • 發佈:2018-12-13
包裝器
包裝器包裝了實際的請求或響應物件,而且把呼叫委託給實際的物件,還允許你對定製請求或響應做所需的額外處理。
過濾器可以用於建立請求包裝器或建立響應包裝器。
核心類
-
ServletRequestWrapper
-
HttpServletRequestWrapper
-
ServletResponseWrapper
-
HttpServletResponseWrapper
使用步驟
-
編寫 *Wrapper 的子類
-
重寫希望修改其行為的方法
一般用於 過濾器 中
實戰程式碼
業務場景
對於請求的資訊進行修改,比如編碼資訊。可以參考例子 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》