亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

java servlet過濾器使用示例

2020-07-27 21:35:28
字體:
來源:轉載
供稿:網友

Servlet過濾器簡介     
Servlet過濾器實際上就是一個標準的java類,這個類通過實現Filter接口獲得過濾器的功能。它在jsp容器啟動的時候通過web.xml配置文件被系統加載。
Servlet過濾器在接收到用戶請求的時候被調用,當服務器接收到用戶的請求的時候,依次調用配置好的過濾器,完成后將執行請求所要求的servlet,而servlet執行后的響應,則先通過配置好的過濾器后再發送給用戶。

過濾器的用途:
1、用戶認證和授權管理。
2、統計web應用的訪問量和訪問命中率,生成訪問報告。
3、實現web應用的日志處理功能。
4、實現數據壓縮功能。
5、對傳輸的數據進行加密。
6、實現xml文件的XSLT的轉換。
一個servlet過濾器其實是一個java類,它的實現需要分為兩個部分,java類自身以及在web.xml文件中的XML描述。對于filter接口,該接口由一對描述的生命周期的方法init(),destroy(),init方法在服務器初始化過濾器的時候會調用,而destory方法在服務器關閉的時候會調用,還有一個行為方法doFilter方法會在執行過濾操作的時候調用.

Servlet過濾器的配置
Servet過濾器需要通過web應用程序部署描述符文件web.xml來部署到應用中。配置如下

復制代碼 代碼如下:

< filter>
    <filter-name>Filtername</filter-name>

    <filter-class>com.filter.Filter/class</filter-class>

       <init-param>
   <param-name>file</param-name>
   <param-value>filename</param-value>
       </init-param>
    </filter>

    <filter-mapping>
 <filter-name>Filtername</filter-name>
<url-pattern>/*</url-pattern>
   </filter-mapping>

下面是示例:

使用過濾器解決中文編碼問題:
由于java的默認編碼方式是ISO-8859-1,而通常編寫中文應用程序的時候都是使用GB2312或gbk編碼方式。在這種情況下,應在頁面的首部通過<%@ page contentType="text/html;charset=gbk"%>命令來指定頁面的編碼方式。這樣中文頁面就可以正常地顯示了。但是如果頁面中村中表單。如一個input輸入框,如果訪問者在其中輸入中文,又提交到某個servlet進行處理的話,java會首先按ISO-5589-1的默認方式對這段文本進行編碼,然后交給servet處理,處理后的文本將還是以ISO-5589-1編碼方式村中,如果這個時候這個文本返回一個按GBK編碼來顯示的頁面,由于編碼格式的不同,很顯然得不到正確的顯示結果。
對于編碼方式的解決方法有很多種,這里主要介紹用過濾器來解決中文編碼問題:

復制代碼 代碼如下:

public class CharacterEncodingFilter implements Filter {
private FilterConfig config;
private String encoding = "ISO8859_1";
public void destroy() {

  config = null;

}

public void doFilter(ServletRequest request, ServletResponse response ,

   FilterChain chain) throws IOException, ServletException {

  request.setCharacterEncoding(encoding);

  chain.doFilter(request, response);

}

public void init(FilterConfig config) throws ServletException {

  this.config  = config;

  String s = config.getInitParameter("encoding");

  if(s!=null){

   encoding = s;

  }

}

}

 然后在是XML的配置:

 

復制代碼 代碼如下:

 <filter>

    <filter-name>encodingFilter</filter-name>

    <filter-class>com.filter.CharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>encoding</param-name>

      <param-value>utf-8</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>encodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>
 

 最后是encoding.jsp的編寫?

 

復制代碼 代碼如下:

 用戶名:<c:out value="${param.username}" default="none"></c:out><br>

      密碼:<c:out value="${param.userpassword}" default="none"></c:out><br>

      <form action="MyJsp.jsp" method="post">

        用戶名:<input type="test" name="username"> <br>

        密碼:<input type="password" name="userpassword"><br>

        <input type="submit" value="提交">

      </form>
 

啟動tomcat,訪問encoding.jsp,輸入“張山”就可以看到,經過過濾器后,頁面可以正常顯示服務器傳出的信息。。。

使用過濾器記錄用戶訪問日志
對于有些項目,它對于用戶的每次訪問都要有詳細的記錄。那么這是使用記錄日志是一個非常好的解決方法,使用過濾器就可以很輕松地對每次用戶的訪問進行記錄。但是由于同一個訪問者在同一個時段訪問站點不同的頁面時,不能重復記錄日志,否則日志將會在很短的時間內塞滿服務器的硬盤空間。于是這里可以利用session對象來判斷用戶的每次會話,在一次會話中,過濾器只會記錄一次。
下面編寫LogFilter類,這個過濾器主要負責記錄用戶的訪問記錄:

復制代碼 代碼如下:

package com.filter;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.sun.org.apache.bcel.internal.generic.NEW;

public class LoginFilter implements Filter{

  private FilterConfig config =null;
  private String filename = null;
  private String filtername = null;
  public void destroy() {
    this.config = null;
    this.filename = null;
    this.filtername = null;
  }

  public void doFilter(ServletRequest request , ServletResponse response,
      FilterChain chain ) throws IOException, ServletException {
    HttpServletRequest hRequest = (HttpServletRequest) request;
    // 獲取session對象
    HttpSession session = hRequest.getSession();
    // 先判斷session中的LOGGED是否有值,如沒有則說明是新的請求
    if(null==session.getAttribute("LOGGED")){
      session.setAttribute("LOGGED", "yes");    // 設置LOGGED的值為yes,防止同一會話重復記錄
      File file = new File(this.filename);
      if(!file.exists())
        file.createNewFile();        // 判斷文件是否存在,如果不存在,就建立一個新的

      /*
       * 創建日志記錄內容logContent包括訪問者的IP, 訪問的頁面URL和訪問的時間以及日志過濾器的名字
       */
      String logContent = hRequest.getRemoteHost()+"->"+hRequest.getRequestURI()+" Logged "+getTime()+" By s"+this.filtername+"/r/n";
      RandomAccessFile rf = new RandomAccessFile(this.filename,"rw");   // 建立一個隨機文件操作對象
      rf.seek(rf.length());   // 將寫入指針指向文件的尾部,rf.length()獲得文件的長度,seek文件長度這么長得距離正好是文件的尾部
      rf.writeBytes(logContent);   // 將日志寫入到文件中去
      rf.close();   // 關閉文件
    }
    chain.doFilter(request, response);
  }

  public void init(FilterConfig config) throws ServletException {
    this.config = config;
    this.filename = this.config.getInitParameter("file");
    this.filtername = this.config.getFilterName();
  }

  // 獲取時間
  private String getTime(){
    SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
    return sdf.format(new Date());
  }

}

這里利用session來限制同一個會話只會記錄一次日志,而不管這個會話中的訪問者訪問了多少個頁面,在第一次訪問的時候,由于session的LOGGED是空的,所以這個時候記錄日志并把LOGGED設置為yes,這樣第二次判斷的時候將不會執行記錄日志。
然后在來配置XML:

復制代碼 代碼如下:

<filter>
    <filter-name>LogFilter</filter-name>
    <filter-class>com.filter.LoginFilter</filter-class>
    <init-param>
      <param-name>file</param-name>
      <param-value>D:/log.txt</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>LogFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

配置好XML后,訪問跟目錄下地任何文件,都會可以在D:/log.txt文件中得到訪問者的記錄。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩免费看的电影电视剧大全| 日韩免费观看网站| 国产亚洲欧美日韩美女| 国产一区香蕉久久| 亚洲欧美日韩爽爽影院| 亚洲激情在线观看视频免费| 国产成人一区二区三区电影| 亚洲欧美日韩中文在线| 奇米影视亚洲狠狠色| 97精品久久久中文字幕免费| 中文字幕欧美精品日韩中文字幕| 91精品久久久久久久久| 欧美一区二区影院| 久久黄色av网站| 国产精品久久久久久久久男| 另类天堂视频在线观看| 日韩视频免费大全中文字幕| 久久人91精品久久久久久不卡| 精品自拍视频在线观看| 久久99久国产精品黄毛片入口| 国产精品高清免费在线观看| 亚洲国产精品成人一区二区| 国产人妖伪娘一区91| 国产精品高潮粉嫩av| 午夜精品三级视频福利| 国产精品啪视频| 中文字幕精品在线| 久久精品99国产精品酒店日本| 黄色成人在线播放| 亚洲a∨日韩av高清在线观看| 自拍视频国产精品| 91色在线观看| 亚洲黄色www| 欧美最猛性xxxx| 深夜精品寂寞黄网站在线观看| 亚洲日本aⅴ片在线观看香蕉| 伊人成人开心激情综合网| 欧美高清理论片| 久久亚洲国产精品成人av秋霞| 国产一区二区三区日韩欧美| 51久久精品夜色国产麻豆| 久久福利网址导航| 欧美一级黄色网| 国产精品美女无圣光视频| 日韩va亚洲va欧洲va国产| 热re99久久精品国产66热| 日韩精品在线免费| 91福利视频网| 亚洲免费成人av电影| 日韩欧美国产网站| 色在人av网站天堂精品| 91久久久久久久久| 欧美裸体xxxx极品少妇软件| 亚洲少妇激情视频| 国产成人精品最新| 国产精品一区久久| 97成人超碰免| 欧美特黄级在线| 欧美日韩亚洲一区二| 欧美一级电影免费在线观看| 久久91亚洲人成电影网站| 久久九九国产精品怡红院| 欧美一级bbbbb性bbbb喷潮片| 国产精品av在线播放| 日本sm极度另类视频| 欧美大尺度在线观看| 国外色69视频在线观看| 亚洲精品之草原avav久久| 黑人与娇小精品av专区| 91精品国产91久久久久久吃药| 在线a欧美视频| 国产日韩欧美视频| 精品国产一区av| 国产精品高潮呻吟视频| 欧美国产亚洲视频| 懂色aⅴ精品一区二区三区蜜月| 欧美成人手机在线| 日韩在线高清视频| 日韩精品久久久久久久玫瑰园| 日韩成人网免费视频| 国产精品偷伦视频免费观看国产| 色妞一区二区三区| 黑人巨大精品欧美一区二区免费| 精品成人乱色一区二区| 日日狠狠久久偷偷四色综合免费| 91大神福利视频在线| 日韩小视频网址| 欧美激情性做爰免费视频| 色婷婷**av毛片一区| 日韩电影在线观看免费| 日韩大陆欧美高清视频区| 国内精品小视频在线观看| 亚洲一区美女视频在线观看免费| 日韩成人激情影院| 91精品国产777在线观看| 久久在精品线影院精品国产| 日韩免费电影在线观看| 中文字幕久久久av一区| 毛片精品免费在线观看| 91精品国产综合久久香蕉的用户体验| 91精品视频观看| 欧美最猛黑人xxxx黑人猛叫黄| 操91在线视频| 日韩精品免费在线播放| 欧美xxxwww| 国产精品电影久久久久电影网| 日韩精品免费在线视频观看| 久久久久成人网| 国产精品xxxxx| 亚洲护士老师的毛茸茸最新章节| 一区二区三区视频在线| 国产精品扒开腿做爽爽爽的视频| 成人国产精品久久久| 午夜美女久久久久爽久久| 国产精品青青在线观看爽香蕉| 亚洲精品720p| 国产+成+人+亚洲欧洲| 色综合视频网站| 欧美日韩中国免费专区在线看| 成人黄色中文字幕| 亚洲电影成人av99爱色| 亚洲第一福利网站| 久久深夜福利免费观看| 欧美理论片在线观看| 另类天堂视频在线观看| 成人字幕网zmw| 色99之美女主播在线视频| 亚洲欧美中文日韩在线v日本| 中文字幕无线精品亚洲乱码一区| 国产成人中文字幕| 久久91亚洲精品中文字幕| 欧美电影免费观看大全| 亚洲第一av在线| 久久精品美女视频网站| 国产精品高潮呻吟久久av野狼| 色噜噜国产精品视频一区二区| 国产这里只有精品| 日韩69视频在线观看| 午夜精品久久久99热福利| 久久精品视频网站| 亚洲xxxx在线| 色综合亚洲精品激情狠狠| 日韩欧美国产激情| 国产精品久久久久国产a级| 国产精品综合久久久| 91精品国产色综合久久不卡98| 久久91精品国产91久久久| 正在播放欧美一区| 亚洲欧美日韩一区二区三区在线| 精品一区二区三区四区在线| 在线日韩欧美视频| 亚洲天堂日韩电影| 92福利视频午夜1000合集在线观看| 91视频国产一区| 欧美成人网在线| 精品亚洲一区二区三区四区五区| 久久久久亚洲精品国产| 国产成人精品免费久久久久| 欧美精品18videosex性欧美| 亚洲深夜福利网站| 国产精品欧美在线| 国产一区二区三区在线看| 欧美日韩黄色大片| 欧美性猛交xxxx免费看久久久|