1. 程式人生 > >servlet,filter,listener

servlet,filter,listener

Servlet:

Java Servlet是與平臺無關的伺服器端元件,運行於Servlet容器中(如Tomcat),Servlet容器負責Servlet和客戶端的通訊以及呼叫Servlet的方法,Servlet和客戶端的通訊採用“請求/響應”的模式。Servlet可完成以下功能:

1、建立並返回基於客戶請求的動態HTML頁面。

2、建立可以嵌入到現有HTML頁面中的HTML片段。

3、與其它伺服器資源(如資料庫或基於Java的應用程式)進行通訊。

4、接收多個客戶端的輸入,並將結果廣播到多個客戶端上,例如,Servlet可以實現支援多個參與者的遊戲伺服器。

5、根據客戶請求採用特定的MIME(Multipurpose Internet Mail Extensions)型別對資料過濾,例如進行影象格式轉換。

Servlet的框架由兩個包組成:javax.servlet和javax.servlet.http。在javax.servlet包中定義了所有Servlet類必須實現或擴充套件的通用介面和類。在javax.servlet.http包中定義了採用HTTP協議通訊的HttpServlet類。

Servlet框架的核心是javax.servlet.Servlet介面,所有的Servlet類都必須實現這個介面。Servlet介面定義的方法如下:

1、init方法,負責初始化Servlet物件。

2、service方法,負責響應客戶端的請求。

3、destroy方法,當Servlet物件退出生命週期時,負責釋放佔用的資源。

4、getServletConfig方法,獲得ServletConfig介面,可以得到Servlet的相關引數。

5、getServletInfo方法,獲得Servlet的相關資訊。

在javax.servlet包中,GenericServlet類實現了Servlet介面,在javax.servlet.http包中,HttpServlet類擴充套件了GenericServlet

類。當用戶開發自己的Servlet時,必須擴充套件以上兩個類中的一個,如果擴充套件自GenericServlet類,則必須自己實現service方法,

如果擴充套件自HttpServlet類,則不需要自己實現service方法,因為HttpServlet類已經實現了該方法。

GenericServlet類的service方法是一個抽象方法,只有兩個引數:ServletRequest和ServletResponse。HttpServlet類的service方法也只有兩個引數:HttpServletRequest和HttpServletResponse。HttpSevletRequest介面和HttpResponse介面分別擴充套件自ServletRequest和ServletResponse介面,都提供了與特定協議HTTP相關的資料。

ServletRequest介面的方法如下:

getAttribute            獲得屬性值

getContentType      獲得客戶請求資料的MIME型別。

getInputStream      獲得可以讀取客戶請求資料的輸入流。

getParameter          獲得引數值

getRemoteAddr      獲得客戶端的IP

getRemoteHost       獲得客戶端的主機名

getRemotePort              獲得客戶端的埠

setAttribute            設定屬性值。

ServletResponse介面的方法如下:

getOutputStream    獲得可以向客戶羰傳送二進位制資料的輸出流物件ServletOutputStream

getWriter               獲得可以向客戶端傳送字元資料的PrintWriter物件

getCharacterEncoding    獲得Servlet傳送的響應資料的字元編碼

getContentType      返回Servlet傳送的響應資料的MIME型別

setCharacterEncoding    設定Servlet傳送的響應資料的字元編碼。

setContentType      設定Servlet傳送的響應資料的MIME型別。

Servlet的init方法有如下兩種形式:

public void init(ServletConfig config) throws ServletException

public void init() throws ServletException

在Servlet的初始化分階段,Servlet容器會為Servlet建立一個ServletConfig物件,用來存放Servlet的初始化配置資訊,如Servlet的初始引數。如果Servlet覆蓋了帶引數的init方法,則必須在函式體內先呼叫super.init(config); 以確保config引數引用了ServletConfig物件。如果Servlet覆蓋了沒有帶引數的init方法,則不需要呼叫super.init(); 方法,可以通過呼叫getServletConfig()方法來獲得ServletConfig物件。

Servlet容器會為Web應用建立一個唯一的全域性的ServletContext物件,可以把它看成是一個Web應用的伺服器端元件的共享記憶體。它有如下方法:

 etAttribute(String name,Object obj) 將一個物件與一個屬性名繫結,並存放到

ServletContext中

getAttribute(String name) 獲得指定名稱的屬性值。

removeAttribute(String name) 刪除指定名稱的屬性。

getAttributeNames() 返回所有屬性名的一個Enumeration物件。

getInitParameter(String name) 獲得指定名稱的引數值,該引數是Web應用的初始化引數.

getInitParameterNames() 返回Web應用的所有初始化引數的名稱的Enumeration物件.

getMimeType(String file) 返回檔案的MIME型別.

getRealPath(String path) 返回網路路徑path對應的檔案系統路徑.

getServerInfo() 返回Servlet容器的名稱和版本

注意一般在HptpServlet的子類中,doPost方法的實現合併到doGet方法中,也就是在doPost方法中簡單地呼叫doGet方法.因為一般情況下對於GetPost請求,它們都是一樣的處理.

編譯了Servlet,將它打包成jar放到WEB-INF/lib目錄下,或將Servletclass檔案放到WEB-INF/classes/目錄下,再在WEB-INF/web.xml配置檔案中配置這些servlet,就可以在Web應用中訪問servlet,配置如下:

 <servlet>

<servlet-name>my_servlet</servlet-name>

<servlet-class>com.mycompany.ServletClass1</servlet-class>

< init-param> <!--定義servlet的初始化引數, 可以有多個init-param引數-->

< param-name>iParam< /param-name>

< param-value>2< /param-value>

< /init-param>

< load-on-startup>2< /load-on-startup> <!--定義servlet的載入順序-->

</servlet>

<servlet-mapping>

<servlet-name>my_servlet</servlet-name>

<url-pattern>*.hello</url-pattern>

</servlet-mapping>

Session相關:

在Servlet API中定義了javax.servlet.http.HttpSession介面,Servlet容器必須實現這一個介面。當一個Session開始時,Servlet容器將建立一個HttpSession物件,在HttpSession物件中可以存放客戶狀態的資訊。Servlet容器為HttpSession物件分配一個唯一的識別符號,叫做Session ID,Servlet容器把Session ID作為Cookie儲存在客戶的瀏覽器中,每次客戶發出HTTP請求時,Servlet容器可以從HttpRequest物件中讀取Session ID,然後根據Session ID找到相應的HttpSession物件,從而獲得客戶的狀態資訊。HttpSession介面有如下方法:

getId()    返回Session ID

invalidate()      使當前的Session失效,Servlet容器會釋放HttpSession物件佔用的資源。

setAttribute(String name,Object obj)     將一對name/value屬性儲存到HttpSession物件中。

getAttribute(String name)      返回名字為name的屬性值。

getAttributeNames()      返回HttpSession物件中所有的屬性名。

isNew()   判斷這個Session是不是新建立的。

setMaxInactiveInterval()              設定Session可以處於不活動狀態的最大時間(以秒為單位),                                              超過這個時間,Session就會自動失效,如果設定為負數,則不                                             限制Session的不活動狀態時間。

getMaxInactiveInterval()       返回Session可以處於不活動狀態的最大時間。

當客戶第一次訪問Web應用中支援Session的某個頁面時,就會開始一個新的Session,接下來,當客戶瀏覽這個Web應用的其它頁面時,始終處於同一個Session中。以下情況之一,Session就會失效:

1、客戶端關閉瀏覽器。

2、Session過期,即客戶在指定的最大時間內沒有與Web伺服器互動。

3、伺服器端呼叫了HttpSession的invalidate()方法。

如果客戶端瀏覽器不支援或禁用Cookie,則Servlet容器無法從客戶端瀏覽器中取得作為Cookie的Session ID,也就無法跟蹤客戶的狀態,因此客戶端的每次請求支援Session的JSP頁面時,Servlet容器都會建立一個新的HttpSession物件。對於這種情況,需要通過HttpServletResponse的encodeURL()方法重寫客戶請求的URL,它把Session ID新增到URL資訊中,也就是說,對於支援Session的JSP頁面中的所有連線URL,都要呼叫encodeURL()方法來重寫這些URL,例如:

對於<a href=”login.jsp”/>應該改為<a href=”<%=response.encodeURL(“login.jsp”)%>”/>

這樣,即使客戶禁用Cookie,也能使用Session來跟蹤客戶的狀態資訊了。

Session的持久化:

Session的持久化就是將HttpSession物件從記憶體中轉移到檔案系統或資料庫中,這樣做的好處是:減少系統資源的佔用,如果Servlet容器突然關閉或重啟,或Web應用重啟,這些持久化了的HttpSession物件可以再重新載入進來,對於客戶端,還是使用同一個Session。

Session的持久化是由Session Manager來管理的,Tomcat提供了兩個實現類:

l         org.apache.catalina.session.StandarManager

l         org.apache.catalina.session.PersistentManager

1、StandarManager是預設的Session Manager。它的實現機制是:當Tomcat伺服器關閉或重啟,或Web應用被重新載入時,會將記憶體中所有的HttpSession物件儲存到檔案系統中,預設的檔案路徑是:%CATALINA_HOME%\work\Catalina\<applicaton-name>\SESSIONS.ser

重啟Tomcat後,Tomcat伺服器把SESSIONS.ser中的持久化HttpSession物件載入到記憶體中。

2、PersistentManager能夠把HttpSession物件儲存到Session Store中,它提供了比較StandarManager更靈活的管理功能,具有容錯能力,控制記憶體中HttpSession物件的數目等。

Tomcat實現Session Store的介面為org.apache.catalina.session.Store,目前提供了兩個實現這一介面的類:org.apache.catalina.session.FileStore和org.apache.catalina.session.JDBCStore。FileStore會將HttpSession物件儲存到檔案系統中;而JDBCStore則將HttpSession物件儲存到資料庫表中。

下面給出這兩個類的配置:

配置FileStore:

在server.xml中,在Web應用的<Context>元素加入<Manager>元素,例如:

<Context path=”/helloapp” docBase=”helloapp” debug=”0” reloadable=”true”>

       <Manager className=”org.apache.catalina.session.PersistentManager”>

              debug=0;

              saveOnRestart=”true”

              maxActiveSessions=”-1”

              minIdleSwap=”-1”

              maxIdleSwap=”-1”

              maxIdleBackup=”-1”

              <Store className=”org.apache.catalina.session.FileStore” directory=”mydir”/>

       </Manager>

</Context>

屬性

作用

className

指定Session Manager的實現類名,或Session Store的實現類名

debug

設定Session Manager採用的跟蹤級別,取值0到99,越小越跟蹤資訊越少,釋出產品時,應該設定為0,以提高效能。

saveOnRestart

如果為true,則當Tomcat關閉時,所有的有效HttpSession物件都儲存到Session Store中;當Tomcat重啟時,載入這些HttpSession物件。

maxActiveSessions

設定處於活動狀態的Session的最大數目,如果超過這一數目,Tomcat把一些超過的Sessin物件儲存到Session Store中。-1表示不限制。

minIdleSwap

Session處於不活動狀態的最小時間,單位為秒,超過這一時間,Tomcat有可能把這個Session物件移到Session Store中。

maxIdleSwap

Session處於不活動狀態的最大時間,超過這一時間,Tomcat就一定會將這個Session物件移到Session Store中。

maxIdleBackup

Session處於不活動狀態的最大時間,超過這一時間,Tomcat就就會將這個Session物件拷貝到Session Store中進行備份。

directory

指定Session Store在哪個檔案系統目錄下存放持久化的Session物件的資訊,檔名是Session ID.session。

配置JDBCStore:

在server.xml中,在Web應用的<Context>元素加入<Manager>元素,例如:

<Context path=”/helloapp” docBase=”helloapp” debug=”0” reloadable=”true”>

       <Manager className=”org.apache.catalina.session.PersistentManager”>

              debug=0;

              saveOnRestart=”true”

              maxActiveSessions=”-1”

              minIdleSwap=”-1”

              maxIdleSwap=”-1”

              maxIdleBackup=”-1”

              <Store className=”org.apache.catalina.session.JDBCStore”

                     driverName=”com.mysql.jdbc.Driver”

                     connectionURL=”jdbc:mysql://localhost:3306/demo?user=root password=1234”

                     sessionTable=”tomcat_sessions”

                     sessionIdCol=”session_id”

                     sessionDataCol=”session_data”

                     sessionValidCol=”session_valid”

                     sessionMaxInactiveCol=”max_inactive”

                     sessionLastAccessedCol=”last_access”

                     sessionAppCol=”app_name”

                     checkInterval=”60”

                     debug=”0”

              />

       </Manager>

</Context>

說明:上面的元素屬性的含義與FileStore的相同,上面的配置假設在MySQL伺服器上的demo資料庫的tomcat_sessions表中存放持久化Session物件的資訊,這個表的結構如下:

CREATE TABLE tomcat_sessions(

       session_id VARCHAR(10) NOT NULL PRIMARY KEY,

       session_data MEDIUMBLOB,

       session_valid CHAR(1) NOT NULL,

       max_inactive   INT NOT NULL,

       last_access     BIGINT NOT NULL,

       app_name       VARCHR(255),

       KEY kapp_name(app_name)

);

Filter相關:

Servlet過濾器是在Java Servlet規範2.3中定義的,它能夠對Servlet容器的請求和響應物件進行檢查和修改,它在Servlet被呼叫之前檢查Request物件,修改Request Header和Request內容;在Servlet被呼叫之後檢查Response物件,修改Response Header和Response內容。Servlet過濾器負責過濾的Web元件可以是Servlet、JSP或HTML檔案,具有以下特點:

l         Servlet過濾器可能檢查和修改ServletRequest和ServletResponse物件

l         可以指定Servlet過濾器和特定的URL關聯,只有當客戶請求訪問此URL時,才會觸發該過濾器工作

l         多個Servlet過濾器可以被串聯起來,形成管道效應,協同修改請求和響應物件

l         所有支援Java Servlet規範2.3的Servlet容器,都支援Servlet過濾器

所有的Servlet過濾器類都必須實現javax.servlet.Filter介面。該介面定義了以下3個方法:

l         init(FilterConfig)     這是Servlet過濾器的初始化方法,Servlet容器建立Servlet過濾器例項後就會呼叫這個方法。在這個方法中可以通過FilterConfig來讀取web.xml檔案中Servlet過濾器的初始化引數。

l         doFilter(ServletRequest, ServletResponse, FilterChain)  這是完成實際的過濾操作的方法,當客戶請求訪問與過濾器關聯的URL時,Servlet容器先呼叫該方法。FilterChain引數用來訪問後續的過濾器的doFilter()方法。

l         destroy() Servlet容器在銷燬過濾器例項前呼叫該方法,在這個方法中,可以釋放過濾器佔用的資源。

下面是一個過濾器的例子,它可以拒絕列在黑名單上的客戶訪問留言簿,而且能將伺服器響應客戶請求所花的時間寫入日誌:

//WEB-INF/classes/NoteFilter.class

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class NoteFilter implements Filter{

       private FilterConfig config=null;

       private String blackList=null;

       public void init(FilterConfig config)throws ServletException{

              this.config=config;

              blackList=config.getInitParameter(“blacklist”);

       }

       public void destroy(){

              config=null;

       }

       public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

              throws IOException, ServletException{

              String userName=((HttpServletRequest)request).getParameter(“user_name”);

              if(userName!=null)

                     userName=new String(userName.getBytes(“ISO-8859-1”),”GB2312”);

              if(userName!=null && userName.indexOf(blackList)!=-1){

                     PrintWriter out=response.getWriter();

                     out.print(“<html><body>”);

                     out.print(“<h1>對不起,”+userName+”,你沒有許可權留言</h1>”);

                     out.print(“</body></html>”);

                     out.flush();

                     return;

              }

              long before=System.currentTimeMillis();

              config.getServletContext().log(“NoteFilter:before call chain.doFilter()”);

              chan.doFilter(request, response);

              config.getServletContext().log(“NoteFilter:after call chain.doFilter()”);

              logn after=System.currentTimeMillis();

              String name=””;

              if(request instanceof HttpServletRequest)

                     name=((HttpServletRequest)request).getRequestURL();

              config.getServletContext().log(“NoteFilter:”+name+”:”+(after-before)+”ms”);

       }

}

釋出Servlet過濾器,必須在web.xml檔案中加入<filter>和<filter-mapping>元素,如下:

<filter>

       <filter-name>NoteFilter</filter>

       <filter-class>NoteFilter</filter-class>

       <init-param>

              <param-name>blackList</param-name>

              <param-value>搗蛋鬼</param-value>

       </init-param>

<filter>

<filter-mapping>

       <filter-name>NoteFilter</filter-name>

       <url-pattern>/note</url-pattern>

</filter-mapping>

多個過濾器可以串連起來協同工作,Servlet容器將根據它們在web.xml中定義的先後順序,依次呼叫它們的doFilter()方法。而這些過濾之間的關係不需要任何配置。

Listener相關:

Listener的作用類似於load-on-startup的Servlet,在Web應用啟動時被載入,在Web應用關閉時被銷燬,Listener用來作為Web應用的後臺服務,比load-on-startup的Servlet更早被載入到Servlet容器中。自定義的Listener類必須實現ServletContextListener介面,並實現該介面的兩個方法:contextInitialized(ServletContextEvent)和contextDestroyed(ServletContextEvent),例如:

public class GetConnListener implements ServletContextListener{
 public void contextInitialized(ServletContextEvent sce){
  try{
   ServletContext application=sce.getServletContext();
   String driver=application.getInitParameter("driver");
   String url=application.getInitParameter("url");
   String user=application.getInitParameter("user");
   String password=application.getInitParameter("password");
   Class.forName(driver);
   Connection conn=DriverManager.getConnection(url, user, password);
   application.setAttribute("conn", conn);
  }catch(Exception e){
   System.out.println("Listener中獲取資料庫連接出現異常:"+e.getMessage());
  }
 }
 public void contextDestroyed(ServletContextEvent sce){
  ServletContext application=sce.getServletContext();
  Connection conn=(Connection)application.getAtrribute("conn");
  if(conn!=null){
   try{
    conn.close();
    conn=null;
   }catch(Exception e){}
  }
 }
}

Listener配置:

<listener>

  <listener-class>lee.GetConnListener</listener-class>

</listener>

自定義JSP標籤庫

實現自定義標籤的處理類

JSP容器編譯JSP網頁時,遇到自定義標籤,就會呼叫這個標籤的處理類。標籤處理類必須擴充套件自javax.servlet.jsp.TagSupport類或javax.servlet.jsp.BodyTagSupport類。

1、TagSupport類的主要方法如下:

l         doStartTag      JSP容器遇到自定義標籤的起始標誌時呼叫該方法。

l         doEndTag       JSP容器遇到自定義標籤的結束標誌時呼叫該方法。

l         setValue(String k, Object v)   在標籤處理類中設定key/value。

l         getValue(String k)          在標籤處理類中獲得key對應的value。

l         removeValue(String k)    在標籤處理類中刪除key/value。

l         setPageContext(PageContext pc)   設定PageContext物件,由JSP容器在呼叫doStartTag或doEndTag方法之前呼叫。

l         setParent(Tag t)     設定該標籤的上層標籤的處理類,由JSP容器在呼叫doStartTag或 doEndTag方法之前呼叫。

l         getParent()     返回該標籤的上層標籤的處理類。

2、TagSupport類有兩個重要屬性:

l         parent     該標籤的上層標籤的處理類。

l         pageContext    Web應用中的javax.servlet.jsp.PageContext物件,提供了儲存和訪問Web應用的共享資料方法:setAttribute(String name, Object value, int scope)和getAttribute(String name, int scope)。其中scope引數用來指定屬性存在的範圍,可選值有:PageContext.PAGE_SCOPE、PageContext.REQUEST_SCOPE、PageContext.SESSION_SCOPE和PageContext.APPLICATION_SCOPE。

注意:在TagSupport的建構函式中不能訪問pageContext成員,因為此時JSP容器還沒有呼叫setPageContext 方法對pageContext進行初始化。

3、處理標籤的方法:

當JSP容器遇到自定義標籤的起始標誌時,就會呼叫該標籤處理類的doStartTag()方法。doStartTag()方法返回一個整數值,用來決定程式的後續流程,有兩個可選值:Tag.SKIP_BODY和Tag.EVAL_BODY_INCLUDE。Tag.SKIP_BODY表示標籤之間的內容被忽略,例如:

<prefix:mytag>

       Hello World!

</prefix:mytag>

如果這個標籤的處理類的doStartTag()方法返回Tag.SKIP_BODY,則Hello World!字串不會顯示在網頁上。Tag.EVAL_BODY_INCLUDE表示標籤之間的內容會被處理。

當JSP容器遇到自定義標籤的結束標誌時,就會呼叫該標籤處理類的doEndTag()方法。doEndTag()方法也返回一個整數值,表示程式的後續流程,也是有兩個可選值:Tag.SKIP_PAGE和Tag.EVAL_PAGE。Tag.SKIP_PAGE表示立刻停止執行JSP頁面,該標籤的結束標誌之後的所有頁面內容全部會初忽略,任何已有的輸出內容立刻返回到客戶的瀏覽器上;Tag.EVAL_PAGE表示按正常的流程繼續執行JSP頁面的內容。

4、自定義標籤的屬性

例如:<prefix:mytag attribute1=”value1”>…</prefix:mytag>

那麼在標籤處理類中必須將這個屬性作為類的成員變數,並且必須提供相應的getter和setter方法,例如:

private int attribute1;

public void setAttribute1(int value){ attribute1=value;}

public int getAttribute1(){return attribute1;}

相關推薦

servlet,filter,listener,intercepter區別

ont http 監聽器 ica 攔截 啟動 XML app 響應 servlet:是一種運行於服務器端的java應用程序,具有獨立於平臺和協議的特性,並且可以動態生成web頁面;它工作在客戶端請求和服務器響應的中間層。servlet的主要功能在於交互式地瀏覽和修改數據,生

web.xml中servlet ,filter ,listener ,interceptor的作用與區別

一、概念:          1、servlet:servlet是一種執行伺服器端的java應用程式,具有獨立於平臺和協議的特性,並且可以動態的生成web頁面,它工作在客戶端請求與伺服器響應的中間層。最早支援 Servlet 技術的是 JavaS

servlet filter listener 含義

Servlet規範中定義,預設情況下(Servlet不是在分散式的環境中部署),Servlet容器對宣告的每一個Servlet,只建立一個例項。如果有多個客戶端請求同時訪問這個Servlet,Servlet容器如何處理多個請求呢?答案是採用多執行緒,Servlet容器維護一個執行緒池來服務請求。當容

servlet,filter,listener

Servlet: Java Servlet是與平臺無關的伺服器端元件,運行於Servlet容器中(如Tomcat),Servlet容器負責Servlet和客戶端的通訊以及呼叫Servlet的方法,Servlet和客戶端的通訊採用“請求/響應”的模式。Servlet可完成

springBoot配置servlet,filter,listener

過濾器,監聽器,轉發器 1、customFilter過濾器 public class CustomFilter implements Filter { @Override public void init(FilterConfig filt

servlet/filter/listener/interceptor區別與聯絡

下面從幾個方面闡述一下題目中四個概念的區別與聯絡:          1、概念          2、生命週期          3、職責          4、執行過程          一、概念:          1、servlet:servlet是一種執行伺服器端

JavaWeb的三大元件 ServletListenerFilter

1.Servlet Servlet 是一個 Java程式,是在伺服器上執行以處理客戶端請求並做出響應的程式  Servlet的生命週期 是一個servlet的從初始化(出生)到銷燬(死亡)。   Init() -> service() -

【WEB 三大核心 Servlet FilterListener 的生命週期 和 執行流程 】

1. Servlet 的 生命週期 和 執行流程 1.1 Servlet 的執行流程 1. 客戶端傳送請求 (以 GET 或者 Post 方式傳送請求 ) 超連結 : <a href="servl

spring boot 入門(八)filterservletlistener

spring boot 入門(八)servlet、filter、listener 1. filter spring boot有兩種方式來配置filter 1.1 Servlet 3.0新特性,以註解方式配置Filter,需在啟動類上加入@ServletComponentSc

FilterServletListener區別與聯絡

1. Filter實現javax.servlet.Filter介面,在web.xml中配置與標籤指定使用哪個Filter實現類過濾哪些URL連結。只在web啟動時進行初始化操作。filter 流程是線性的, url傳來之後,檢查之後,可保持原來的流程繼續向下執行,被下一個f

FilterServletListener區別與聯絡

1. Servlet 可以用來建立並返回一個包含基於客戶請求性質的動態內容的完整的html頁面;可以建立可嵌入到現有的html頁面中的一部分html頁面(html片段);可以讀取客戶端發來的隱藏資料;可以 讀取客戶端發來的顯示資料;可以與其他伺服器資源(包括資料庫和jav

Servlet Filter

servlet filterFilter : Java中的Filter 並不是一個標準的Servlet ,它不能處理用戶請求,也不能對客戶端生成響應。 主要用於對HttpServletRequest 進行預處理,也可以對HttpServletResponse 進行後處理,是個典型的處理鏈。 過濾鏈

servlet session listener

servlet listenerHttpSessionListener-創建與銷毀 //@WebListener servlet3.0支持註解 public class HttpSessionListenerDemo implements HttpSessionListener{ @Override

servlet context listener

servletContextServletContextListener @WebListener public class ServletContextListenerDemo implements ServletContextListener{ @Override public void

[JavaWeb] Servlet Filter

init size 多個 編寫 頁面 tin web服務 1.0 web項目 作用: Servlet 過濾器可以動態地攔截請求和響應,以變換或使用包含在請求或響應中的信息。 可以將一個或多個 Servlet 過濾器附加到一個 Servlet 或一組 Servlet。Serv

Filter + Listener

Filter(過濾器) 可以對請求(響應)進行過濾  對web伺服器管理的web資源進行攔截; 實現一些特殊功能的,例如對敏感訊息,對url進行過濾等   過濾器的建立和使用 :       &n

servlet-filter

1. 過濾器 問題:設定解碼字符集時,以下的程式碼出現在了多處servlet中, 要求:希望避免出現重複程式碼 request.setCharacterEncoding("utf-8"); 2. 概念 Filter  過濾器 可以對請求(響應)進行過濾 請求 -->

Servlet——Filter(過濾器)

1. 過濾器 Filter介面中有一個doFilter方法,當我們編寫好Filter,並配置對哪個web資源進行攔截後,WEB伺服器每次在呼叫web資源的service方法之前, 都會先呼叫一下filter的doFilter方法,因此,在該方法內編寫程式碼可達到如下目的: 呼叫目標資源之

maven org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter

maven專案解決辦法:    對於servlet-ap.jar 新增<scope>provided</scope> 即可解決。      <dependency> &l

springboot學習(七):Filter \Listener \Interceptor的使用

說明 之前學了在springboot專案中過濾器、監聽器、攔截器的使用,在這裡記錄總結下。 正文 對於過濾器和監聽器,在springboot中可以使用兩種配置方式: 第一種,採用Servlet3.0的註解進行配置 @WebFilter @WebListener,使用此方式要在