码迷,mamicode.com
首页 > 其他好文 > 详细

Servlet开发(3)

时间:2018-09-24 11:19:48      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:listen   on()   com   system   ted   font   servet   eve   没有   

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)

标签:listen   on()   com   system   ted   font   servet   eve   没有   

原文地址:https://www.cnblogs.com/zyxsblogs/p/9693269.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!