1. 程式人生 > >Servlet開發(3)

Servlet開發(3)

exce binding @override ack get pack ppi ont destroy

Servlet開發

Servlet過濾器:

主要是對訪問主頁的用戶進行過濾,通過登錄系統進入的用戶可以看到主頁內容,在session中存在currentuser。

可以對此進行判斷:

技術分享圖片
 1 package com.java1234.web;
 2 import java.io.IOException;
 3 import javax.servlet.Filter;
 4 import javax.servlet.FilterChain;
 5 import javax.servlet.FilterConfig;
 6 import javax.servlet.ServletException;
7 import javax.servlet.ServletRequest; 8 import javax.servlet.ServletResponse; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpSession; 11 12 public class Loginfilter implements Filter { 13 14 @Override 15 public void destroy() { 16 // TODO Auto-generated method stub
17 18 } 19 20 @Override 21 public void doFilter(ServletRequest ServletRequest, ServletResponse ServletResponse, FilterChain FilterChain) 22 throws IOException, ServletException { 23 // TODO Auto-generated method stub 24 HttpServletRequest request=(HttpServletRequest)ServletRequest;//
將ServletRequest強制轉化為HttpServetRequest 25 HttpSession session=request.getSession();//獲取sessin(如果用戶登錄就存在session) 26 Object o=session.getAttribute("currentUser");//獲取currentUser對象 27 String path=request.getServletPath();//獲取登錄路徑 28 if(o == null && path.indexOf("login")< 0){ 29 /*服務器內部跳轉 - -> 沒有登錄不能能訪問主頁*/ 30 request.getRequestDispatcher("Login.jsp").forward(ServletRequest, ServletResponse); 31 }else{ 32 FilterChain.doFilter(ServletRequest,ServletResponse); 33 } 34 } 35 36 @Override 37 public void init(FilterConfig arg0) throws ServletException { 38 // TODO Auto-generated method stub 39 40 } 41 42 }
Loginfilter.java

配置類似於 Servlet :

 1 </web-app>
 2 <filter>
 3        <filter-name>Loginfilter</filter-name>
 4        <filter-class>com.java1234.web.Loginfilter</filter-class>
 5    </filter>
 6    <filter-mapping>
 7        <filter-name>Loginfilter</filter-name>
 8        <url-pattern>/login</url-pattern>
 9    </filter-mapping>
10 </web-app>

Servlet監聽器:

監聽web事件;如application,session,request。

寫一個監聽session的例子:

首先當用戶登錄時,設置session值,這時候會添加屬性,監聽到。。。

其次註銷的時候,刪除session值,這時候是刪除屬性,監聽到。。

so

代碼如下:

技術分享圖片
 1 package com.java1234.listener;
 2 
 3 import javax.servlet.http.HttpSessionAttributeListener;
 4 import javax.servlet.http.HttpSessionBindingEvent;
 5 
 6 public class SessionAttributeListener implements HttpSessionAttributeListener{
 7 
 8     @Override
 9     public void attributeAdded(HttpSessionBindingEvent HttpSessionBindingEvent) {
10         // TODO Auto-generated method stub
11          System.out.println("添加的屬性名:"+HttpSessionBindingEvent.getName()+"屬性值:"+HttpSessionBindingEvent.getValue());
12     }
13 
14     @Override
15     public void attributeRemoved(HttpSessionBindingEvent HttpSessionBindingEvent) {
16         // TODO Auto-generated method stub
17         System.out.println("刪除的屬性名:"+HttpSessionBindingEvent.getName()+"屬性值 :"+HttpSessionBindingEvent.getValue());
18     }
19 
20     @Override
21     public void attributeReplaced(HttpSessionBindingEvent arg0) {
22         // TODO Auto-generated method stub
23         
24     }
25 
26 }
SessionAttributeListener.java

退出登錄的java代碼:

技術分享圖片
 1 package com.java1234.web;
 2 import java.io.IOException;
 3 import java.io.PrintWriter;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 public class LogoutServlet extends HttpServlet{
 9 
10     /**
11      * 
12      */
13     private static final long serialVersionUID = 1L;
14     @Override
15     protected void doGet(HttpServletRequest request, HttpServletResponse response) 
16             throws ServletException, IOException {
17         // TODO Auto-generated method stub
18         this.doPost(request,response);
19     }
20 
21     @Override
22     protected void doPost(HttpServletRequest request, HttpServletResponse response) 
23             throws ServletException, IOException {
24         // TODO Auto-generated method stub
25     //清除session
26         request.getSession().invalidate();
27         response.sendRedirect("Login.jsp");
28     }
29     @Override
30     public void destroy() {
31         // TODO Auto-generated method stub
32         
33     }
34     @Override
35     public void init() throws ServletException {
36         // TODO Auto-generated method stub
37         
38     }
39 }
LogoutServlet.java

配置web.xml

技術分享圖片
 1  <!-- 添加監聽器 -->
 2   <listener>
 3   <listener-class>
 4       com.java1234.listener.SessionAttributeListener
 5   </listener-class>
 6   </listener>
 7   <!-- 設置logout的servlet -->
 8      <servlet>
 9          <servlet-name>LogoutServlet</servlet-name>
10          <servlet-class>com.java1234.web.LogoutServlet</servlet-class>
11      </servlet>
12      <servlet-mapping>
13          <servlet-name>LogoutServlet</servlet-name>
14          <url-pattern>/logout</url-pattern>
15      </servlet-mapping>
web.xml

啟動登錄------>註銷

運行結果

技術分享圖片

至此ok了。。

Servlet開發(3)