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. npm学习笔记

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并 ...

  2. java中abstract和interface的區別(轉)

    (一)概述    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存 在,才赋予了Java强大的 面向对象能力.abstract ...

  3. BZOJ 4815 数论

    今年的重庆省选? 具体就是,对于每次修改,A[p,q]这个位置,  设d=gcd(p,q) ,则 gcd为d的每一个格子都会被修改,且他们之间有个不变的联系 A[p,q]/p/q==A[k,t]/k/ ...

  4. WinHTTrack

    看过<大湿教我写.net通用权限框架(1)之菜单导航篇>之后发生的事 http://www.cnblogs.com/wolf-sun/p/3436585.html 用此工具下载别人整站的图 ...

  5. LUR和缺页次数

    缺页:缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问. LRU(Least recently used)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问 ...

  6. unity3d中对像之间的相互作用的实现

    首先这里的对像是面向对像中的对像: 其实就是C#中对像间相互作用的实现: 一.一般面向对像中关联和依赖的方式: 如关联方式: class A{ B m_B; A(B b){ m_B = b; } ac ...

  7. Linux 系统管理命令 - iostat - I/O 信息统计

    命令详解 重要星级: ★★★★☆ 功能说明: iostat 是 I/O statistics ( 输入/输出统计 ) 的缩写,其主要功能是对系统的磁盘 I/O 操作进行监视.它的输出主要是显示磁盘读写 ...

  8. bzoj 3930: [CQOI2015]选数【快速幂+容斥】

    参考:https://www.cnblogs.com/iwtwiioi/p/4986316.html 注意区间长度为1e5级别. 则假设n个数不全相同,那么他们的gcd小于最大数-最小数,证明:则gc ...

  9. (6)css盒子模型(基础下)

    一.理解多个盒子模型之间的相互关系 现在大部分的网页都是很复杂的,原因是一个“给人用的”网页中是可能存在着大量的盒子,并且它们以各种关系相互影响着. html与DOM的关系 详情了解“DOM” :ht ...

  10. java web课程设计截图和服务器地址

    企业办公测试截图和服务器地址 本篇博客主要围绕以下几个部分展开,登录.系统管理.工作流.个人事务管理.内部邮件.公共信息共六个部分.主要有界面截图和简要介绍. 一.登录.更改密码界面 登录界面包括以管 ...