1.Servlet可以分为三种类型

普通Servlet,需要在基本程序架构中体现。

Servlet过滤器,在web容器启动时初始化,不需要手动调用。

 Servlet 监听器。

2.  Servlet过滤器, 过滤器可以有多重过滤

a.可以编码过滤。替掉了每页<%request.setCharacterEncoding(‘GBK’)%>

b.可以登录验证。在一个会话中(只启动一次浏览器),如果登录过,那么访问其他网页则可直接访问。

如果另外开启一个会话,那么访问其他网页服务器将直接跳转到登录页面。

关键记忆点:

a. web.xml中不再是<servlet>而是<filter>,内容如下:

<filter>

<filter-name>login<filter-name>

                 <filter-class> cn.liys.filter.LoginFilter</filter-class>         

</filter>

<filter-mapping>

<filter-name>login<filter-name>

<url-pattern>/filter/*</url-pattern>  //相当于对于这个目录下所有的页面都其过滤作用

</filter-mapping>

b. 类的申明与servlet有所不同,是实现一个Filter接口

pulbic class LoginFilter implements Filter{

private String charset = null;

        public void init(FileConfiger config){

         charset = config.getInitParamter("charset"); 

}

        public voild doFilter(ServletRequest request ,ServletResponse response, FilterChain chain ){    

    request.setCharacterEncoding(charset); //设置编码;

            HttpServletRequest req = (HttpServletRequest )  request;

HttpSession ses = req.getSession();

if (ses.getAttribute("userid")!=null){ //登录过进入到下一个页面

              chain.doFilter(req,response); //过滤后,允许进入下一个页面。一般每次刷新都会过滤。

           }else{  //没登录过,重新定位到登录界面 

                req.getRequestDispatcher("login.jsp").forward(request,response); //如果没有登陆,则重定位到登陆界面 

           }   

         }

       public void destroy(){

        }

   }

3.Servlet监听器

a.可以监听application ,session ,request这些内置对象的相关操作,具体可以查java doc,基本都是interface 接口实现。

b.实际项目可以用到显示当前在线人员

思路,要让所有人看到当前在线人员,必须是通过application内置对象保存,所有的在线人员应该是一个集合,可以是TreeSet

等一个用户登录后,肯定是在session内置对象中增加一个userid,当这个回话过了超时时间,将删掉该用户名。

这样这个监听类,需要实现ServletContextListener,HttpSessionAttributeListener,HttpSessionListener这三个接口

关键代码如下

====================================================================================================

 监听类:

public class  OnlineListener implements ServletContextListener,HttpSessionAttributeListener,HttpSessionListener{

// 需要把这些接口的抽像函数都列出来,不实现可以空着。

  private ServletContext app = null;

public void contextInitialized(ServletContextEvent sce){     //application初始化时

    this.app = sce.getServletContext();

    this.app.addAttribute("online",new TreeSet());

  }

  。。。。

  

  public void attributeAdded(HttpSessionBindingEvent se){//登录时Session需要设置用户id

    Set all =(Set) this.app.getAttribute("online");

    all.add(se.getValue());

    this.app.addAttribute("online",new TreeSet());

  }

  public void sessionDestroyed(HttpSessionEvent se){//会话超时,从application保存的集合中删除用户名

          Set all = (Set) this.app.getAttribute("online") ;

     all.remove(se.getSession.getAttribute("userid"));

     this.app.addAttribute("online",new TreeSet());

  }

   }

 Web.xml中的配置:  (监听主要是监听application,request,session这些对象,所以不需要其他的参数配置,比如路径等)

  <listener>

    <listener-class>包名称.监听类<listener-class>

  </listener>

登陆页面,logon.jisp

。。。

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

用户名:<input type="text" name="userid">

<input type="submit" value="提交">
<%
String userid = request.getParameter("userid") ;
if(!(userid==null || "".equals(userid))){
session.setAttribute("userid",userid) ;
response.sendRedirect("list.jsp") ;
}
%>
</form>

。。。

  显示用户名页面,list.jsp

  

<%

Set all = (Set) this.getServletContext().getAttribute("online") ; //通过application获取到集合对象,再通过iterator序列化,然后得出具体的每一个用户名
Iterator itr = all.iterator() ;
while(itr.hasNext()){
%>

<h2><%=itr.next()%></h2><br>

<%
}

%>

  

java web 学习笔记 - servlet03的更多相关文章

  1. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. java web 学习笔记 编码问题总结

       java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...

  5. Java Web 学习笔记 1

    Java Web 学习笔记 1 一.Web开发基础 1-1 Java Web 应用开发概述 1.1.1 C/S C/S(Client/Server)服务器通常采用高性能的PC机或工作站,并采用大型数据 ...

  6. [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. Java Web学习笔记之---EL和JSTL

    Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression  Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...

  8. Java Web学习笔记之---JSP

    Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...

  9. JAVA Web学习笔记

    JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...

随机推荐

  1. mysql17---增量备份

    mysql增量备份: 全备份是: (增量备份一定要看日志的时间和位置节点) mysql数据库会以二进制的形式,把用户对mysql数据库的操作记录到文件中,不用使用定时器了.当用户希望恢复的时候,可以使 ...

  2. leetcode 400 Add to List 400. Nth Digit

    Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... Note:n is ...

  3. Package vim is not available, but is referred to by another package及我的vim配置

    新安装的ubuntu,先安装vim,但是安装出现 Reading package lists... Done Building dependency tree Reading state inform ...

  4. oracle 建表 主键自增序列/////

    oracle 建表 主键自增序列 (2011-10-12 11:59:22) 转载▼ 标签: 杂谈 分类: oracle SQL> create table sms_activity(  2   ...

  5. Linq list 排序,Dictionary 排序

    C# 对List成员排序的简单方法 http://blog.csdn.net/wanzhuan2010/article/details/6205884 LINQ之路系列博客导航 http://www. ...

  6. Swift4 模式, 枚举型

    创建: 2018/03/05 完成: 2018/03/05 更新: 2018/03/10 改变标题 [Swift4 模式] -> [Swift4 模式, 枚举型] 补充RawRepresenta ...

  7. Swift4 基本数据类型(范围型, Stride型, 数组, 字符串, 哈希表)

    创建: 2018/02/28 完成: 2018/03/04 更新: 2018/05/03 给主要标题加上英语, 方便页内搜索 [任务表]TODO 范围型(Range)与Stride型  与范围运算符相 ...

  8. bzoj 1070: [SCOI2007]修车【最小费用最大流】

    一开始从客人角度想的,怎么建都不对 从一个修车工所接待的所有顾客花费的总时间来看,设一共有x个人,那么第一个修的对总时间的贡献是x*w1,第二个是(x-1)*w2-以此类推.所以把第i个修车工拆成n组 ...

  9. Luogu P1186 玛丽卡 【最短路】By cellur925

    题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...

  10. [USACO 2011 Nov Gold] Cow Steeplechase【二分图】

    传送门:http://www.usaco.org/index.php?page=viewproblem2&cpid=93 很容易发现,这是一个二分图的模型.竖直线是X集,水平线是Y集,若某条竖 ...