servlet登錄過濾器
1. servlet和過濾器的區別是什麼
一、概念:
1、servlet:servlet是一種運行伺服器端的java應用程序,具有獨立於平台和協議的特性,並且可以動態的生成web頁面,它工作在客戶端請求與伺服器響應的中間層。
2、filter:filter是一個可以復用的代碼片段,可以用來轉換HTTP請求、響應和頭信息。Filter不像Servlet,它不能產生一個請求或者響應,它只是修改對某一資源的請求,或者修改從某一的響應。
二、生命周期:
1、servlet:servlet的生命周期始於它被裝入web伺服器的內存時,並在web伺服器終止或重新裝入servlet時結束。servlet一旦被裝入web伺服器,一般不會從web伺服器內存中刪除,直至web伺服器關閉或重新結束。
(1)、裝入:啟動伺服器時載入Servlet的實例;
(2)、初始化:web伺服器啟動時或web伺服器接收到請求時,或者兩者之間的某個時刻啟動。初始化工作有init()方法負責執行完成;
(3)、調用:從第一次到以後的多次訪問,都是只調用doGet()或doPost()方法;
(4)、銷毀:停止伺服器時調用destroy()方法,銷毀實例。
2、filter:(一定要實現javax.servlet包的Filter介面的三個方法init()、doFilter()、destroy(),空實現也行)
(1)、啟動伺服器時載入過濾器的實例,並調用init()方法來初始化實例;
(2)、每一次請求時都只調用方法doFilter()進行處理;
(3)、停止伺服器時調用destroy()方法,銷毀實例。
三、職責
1、servlet:
創建並返回一個包含基於客戶請求性質的動態內容的完整的html頁面;
創建可嵌入到現有的html頁面中的一部分html頁面(html片段);
讀取客戶端發來的隱藏數據;
讀取客戶端發來的顯示數據;
與其他伺服器資源(包括資料庫和java的應用程序)進行通信;
通過狀態代碼和響應頭向客戶端發送隱藏數據。
2、filter:
filter能夠在一個請求到達servlet之前預處理用戶請求,也可以在離開servlet時處理http響應:
在執行servlet之前,首先執行filter程序,並為之做一些預處理工作;
根據程序需要修改請求和響應;
在servlet被調用之後截獲servlet的執行
四、區別:
1,servlet 流程是短的,url傳來之後,就對其進行處理,之後返回或轉向到某一自己指定的頁面。它主要用來在 業務處理之前進行控制.
2,filter 流程是線性的, url傳來之後,檢查之後,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等,而servlet 處理之後,不會繼續向下傳遞。filter功能可用來保持流程繼續按照原來的方式進行下去,或者主導流程,而servlet的功能主要用來主導流程。
filter可用來進行字元編碼的過濾,檢測用戶是否登陸的過濾,禁止頁面緩存等。
參考:https://..com/question/1577030487304140580.html
2. servlet怎麼使用多個過濾器
只需要一個過濾器,過濾所有URL,在filter類中做如下操作:代碼參考,相信你會懂的。
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsIOException,ServletException{
HttpServletRequestreq=(HttpServletRequest)request;
Stringuri=((HttpServletRequest)request).getRequestURI();
List<String>urilist=newArrayList<String>();
urilist.add("/UserLoginReg/DoRegisterServlet");
urilist.add("/UserLoginReg/UserManageServlet");
urilist.add("/UserLoginReg/FindUserServlet");
if(urilist.contains(uri)==true){
HttpSessionsession=req.getSession(true);
//從session里取的用戶名信息
UserBeanuser=(UserBean)session.getAttribute("userall");
//判斷如果沒有取到用戶信息,就跳轉到登陸頁面
if(user==null){
//跳轉到登陸頁面
request.setAttribute("info","請先登錄");
req.getRequestDispatcher("WEB-INF/jsp/login.jsp").forward(request,
response);
}else{
//已經登陸,繼續此次請求
chain.doFilter(request,response);
}
}else{
//已經登陸,繼續此次請求
chain.doFilter(request,response);
}
}
3. jsp+servlet中session失效後跳轉到登錄頁面 ,用過濾器filter來寫,希望能有具體步驟和注釋
public class SsFilter implements Filter {
@
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpSession session = req.getSession();
if (session.getAttribute("user") == null) {
resp.sendRedirect("/index.jsp");
return;
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
4. servlet過濾器有什麼作用,一般用在什麼地方
1.什麼叫過濾器呢?
過濾器就是可以對瀏覽器向jsp,servlet,html等這些web資源發出請求和
伺服器回應給瀏覽器的內容,他可以進行過濾。這個過濾過程中可以攔截瀏覽
器發出的請求和伺服器回應給瀏覽器的內容。攔截之後,就可以進行查看,並且
可以對攔截內容進行提取,或者進行修改。
Servlet過濾器攔截請求和響應,以便查看,提取或操作客戶機和伺服器之間
交換數據。
2.Servlet過濾器的用途:
用戶認證與授權管理:我們開發一個web應用,肯定有不同許可權的用戶,有管理員,有普通用戶。而管理員又可能分為一級管理員,二級管理員,三級管理員。每一級管理員可能又有不同的管理許可權操作,訪問不同的資源。過去我們可能都是在jsp頁面,servlet中加以許可權的控制。通過session,看他是否有這個許可權,如果有,則讓他操作某個資源。這些都是些共性。那麼現在我們就可以把他提取出來。讓他通過過濾器來實現;用戶來訪問一個資源,我們通過過濾器來過濾這個請求,在程序中判斷是否有許可權來訪問這個資源;
有,則讓他去訪問,沒有,就讓他轉到另外一個頁面。這樣通過過濾器就實現了授權管理;
統計web應用的訪問量,和訪問的命中率,報告;
實現web應用的日誌處理功能;
實現數據壓縮功能;
對傳輸的數據進行加密;
實現XML文件的XSLT轉換;
5. JSP登錄驗證的過濾器問題
過濾器里這樣寫:
HttpServletRequest rq=(HttpServletRequest)request;
HttpServletResponse rp=(HttpServletResponse)response;
String uriStr =rq.getRequestURI();
if (uriStr.indexOf("login.jsp") == -1 && uriStr.indexOf("empservlet")==-1&&uriStr.indexOf("images")==-1&&
rq.getSession().getAttribute("user") == null){
rp.sendRedirect("empservlet");
}else{
filterChain.doFilter(request, response);
}
login.jsp是登陸頁面
images是存放圖片文件夾
empservlet是登陸頁面要轉到的驗證登陸用戶的servlet
user是存放登陸用戶的session
我這也是朋友教的```登陸頁面跟登陸頁面的圖片都不會給過濾掉了``
6. 關於JAVA WEB中登陸過濾器的問題
你先把過濾器new出來,再調用不就好了
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
String name = request.getParameter("username");
String password = request.getParameter("password");
HttpSession session = request.getSession();
if(name.equals("admain") && password.equals("admain")){
session.setAttribute("usertype", "admain");
Fileter f=new Fileter();
f.doFilter(request,response,chain);//反正你先把過濾器new出來,再調用不就好了,具體的屬性看實際情況,我是手寫代碼,難免有錯
}else{
out.print("<a href=Admain.html>用戶頁面</a>");
}
}
7. 校驗用戶是否登錄過濾器Filter
CheckLoginFilter net.cnki.tpi.cms.util.CheckLoginFilter redirectURL /login.jsp notCheckURLList /error.jsp;/login.jsp CheckLoginFilter /* 2、然後新創建一個CheckLoginFilter.java類,代碼如下:
/** * 校驗用戶是否已登錄過濾器 * @author lpz * */ public class CheckLoginFilter implements Filter { private FilterConfig filterConfig = null; private String redirectURL = null; private List notCheckURLList = new ArrayList(); public CheckLoginFilter() { } public void destroy() { notCheckURLList.clear(); } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)servletRequest; HttpServletResponse response = (HttpServletResponse)servletResponse; HttpSession session = request.getSession(); Object userInfo = session.getAttribute("userInfo"); if(!(request) && userInfo==null){ //重定向到指定頁面 response.sendRedirect(request.getContextPath() + redirectURL); }else{ //繼續響應請求 chain.doFilter(servletRequest, servletResponse); } } public void init(FilterConfig fConfig) throws ServletException { this.filterConfig = fConfig; redirectURL = filterConfig.getInitParameter("redirectURL"); String notCheckURLListStr = filterConfig.getInitParameter("notCheckURLList"); if(!MyStringUtil.isNullOrEmpty(notCheckURLListStr)){ //將字元串轉化為list notCheckURLList = MyStringUtil.convStrToList(notCheckURLListStr,";"); } } /** * 校驗當前請求是否在不過濾的列表中 * @param request * @return */ private boolean (HttpServletRequest request) { String uri = request.getServletPath() + (request.getPathInfo() == null ?
8. servlet過濾器問題
當然可以了,分別定義兩個java文件,比如:EncodingFilter(解決編碼)和LoginFilter(解決用戶登錄),
但是必須在web.xml里分別指出. 就行了,
注意:LoginFilter最好不使用/*,最好是/LoginFilter/*(LoginFilter也可以是別的).
這樣就好用了,我試也成功了
9. 怎麼搞一個servlet登錄過濾器
把JSP頁面全部放在WEB-INF下面 ,編寫一個BaseServlet繼承自HttpServlet,然後其餘的servlet集成自BaseServlet,在這個servlet裡面判斷session,有值的時候轉發到servlet裡面 沒有值的話 跳轉到登陸頁面 不就可以了?或者在filter裡面寫上
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
String uri = req.getRequestURI();
System.out.println( uri );
// 如果請求的路徑是首頁的資源,那麼不需要過濾
if ( !"/loginServlet".equals(uri) && !"/".equals(uri) && !uri.startsWith("/img/") && !uri.startsWith("images") ) {
// 過濾請求,保證訪問的資源一定要在用戶登錄後才可訪問
HttpSession session = req.getSession();
if ( session.isNew() ) {
// 跳轉到首頁
resp.sendRedirect("/");
} else {
User user = (User)session.getAttribute(Const.SESS_PARAM_USER);
if ( user == null ) {
// 跳轉到首頁
resp.sendRedirect("/");
} else {
chain.doFilter(request, response);
}
}
} else {
chain.doFilter(request, response);
}
10. 我如何添加一個Servlet過濾器編程嗎
public class IPFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)arg0;
String ip=req.getRemoteAddr();
if("192.168.70.88".equals(ip)){
req.getRequestDispatcher("error.jsp");
//arg2.doFilter(arg0, arg1);
}
req.getRequestDispatcher("success.jsp");
}
public void init(FilterConfig arg0) throws ServletException {
}
}