程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> JBuilder2005 Servlet開發之過濾器

JBuilder2005 Servlet開發之過濾器

編輯:JAVA編程入門知識

  過濾器可以在請求到達jsp或Servlet之前或響應返回客戶端之前添加一些額外的操作。假如有多個JSP頁面和Servlet都需要進行一個相同或相似的操作,我們可以把這個操作抽取到一個Servlet過濾器中,並通過匹配路徑截獲感愛好JSP或Servlet。
  
   我們舉幾個典型的過濾器應用的例子,讀者可以推而廣之:
  
   ·編碼轉換
  
  亂碼問題困擾了不少的Web應用程序開發者,這是因為基於Java的Web應用程序可能運行於不同的Web應用程序器、操作系統平台或硬件服務器上,不同的環境有自己默認的編碼類型,在數據的轉換過程中不同的默認編碼是亂碼問題的始作俑者,所以在開發JSP時經常需要將數據進行編碼轉換。我們可以創建一個Servlet過濾器在請求進入服務程序前都進行編碼轉換。
  
   ·添加統一的標題或腳注
  
   有些網頁需要添加統一的標題頭或腳注,可以通過Servlet過濾器在響應返回到客戶端前給網頁添加上統一的標題和腳注。
  
   ·進行安全的控制
  
   登錄系統後,一般都會將用戶信息對象放入到session中,可以通過Servlet過濾器在請求進入JSP或Servlet前判定session中是否有用戶信息對象,假如有,則說明用戶已經登錄,假如沒有,則說明用戶還沒有登錄,將請求重定向到登錄頁面。
  
   本節所提供的Servlet過濾器就是為了實現安全控制,下面我們就來開發這個Servlet。
  
   1.打開創建Servlet過濾器的向導。
  
   通過File->New...->Web->雙擊Filter Servlet圖標啟動創建Servlet過濾器的向導,如下圖所示:
  
  
  圖 7 指定Servlet過濾器的名字

  
   和創建標准的Servlet相似,在這步裡指定過濾器的類名和包名。在Class name中輸入LoginCheckFilter,包名依就為bookstore.servlet。按Next到下一步。
  
   2.指定過濾器的路徑匹配模式
  
  
  圖 8 指定過濾器的匹配路徑模式

  
   ·Name:logincheckfilter,指定過濾器的名字
  
   ·URL pattern:/*,指定過濾器路徑匹配模式,這裡我們使過濾器對所有的請求都進行過濾。
  
   按Finish創建此過濾器。
  
   打開向導創建的LoginCheckFilter.java文件,並錄入粗體所示的代碼,如下所示:
  
   代碼清單 4 LoginCheckFilter.java代碼
  
  

1. package bookstore.servlet;
  2. …
  3. public class LoginCheckFilter
  4. extends HttpServlet implements Filter
  5. {
  6.  …
  7.  public void doFilter(ServletRequest request, ServletResponse response
  8.    , FilterChain filterChain)
  9.  {
  10.  try
  11.  {
  12.   //進行請求和響應的類型轉換
  13.   HttpServletRequest httpRequest = (HttpServletRequest) request;
  14.   HttpServletResponse httpResponse = (HttpServletResponse) response;
  15.
  16.   boolean isValid = true;
  17.   String uriStr = httpRequest.getRequestURI().toUpperCase();
  18.   if (uriStr.indexOf("LOGIN.JSP") == -1 &&
  19.   uriStr.indexOf("SWITCH.JSP") == -1 &&
  20.   httpRequest.getSession().getAttribute("ses_userBean") == null)
  21.   {
  22.    isValid = false;
  23.   }
  24.   if (isValid)
  25.   {
  26.    filterChain.doFilter(request, response);
  27.   } else
  28.   {
  29.    httpResponse.sendRedirect("/webModule/login.jsp");
  30.   }

  31.
  32.  } catch (ServletException sx)
  33.  {
  34.   filterConfig.getServletContext().log(sx.getMessage());
  35.  } catch (IOException iox)
  
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved