java web 学习笔记 - servlet03
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的更多相关文章
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java web 学习笔记 编码问题总结
java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...
- Java Web 学习笔记 1
Java Web 学习笔记 1 一.Web开发基础 1-1 Java Web 应用开发概述 1.1.1 C/S C/S(Client/Server)服务器通常采用高性能的PC机或工作站,并采用大型数据 ...
- [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Java Web学习笔记之---EL和JSTL
Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...
- Java Web学习笔记之---JSP
Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...
- JAVA Web学习笔记
JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...
随机推荐
- mysql17---增量备份
mysql增量备份: 全备份是: (增量备份一定要看日志的时间和位置节点) mysql数据库会以二进制的形式,把用户对mysql数据库的操作记录到文件中,不用使用定时器了.当用户希望恢复的时候,可以使 ...
- 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 ...
- 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 ...
- oracle 建表 主键自增序列/////
oracle 建表 主键自增序列 (2011-10-12 11:59:22) 转载▼ 标签: 杂谈 分类: oracle SQL> create table sms_activity( 2 ...
- Linq list 排序,Dictionary 排序
C# 对List成员排序的简单方法 http://blog.csdn.net/wanzhuan2010/article/details/6205884 LINQ之路系列博客导航 http://www. ...
- Swift4 模式, 枚举型
创建: 2018/03/05 完成: 2018/03/05 更新: 2018/03/10 改变标题 [Swift4 模式] -> [Swift4 模式, 枚举型] 补充RawRepresenta ...
- Swift4 基本数据类型(范围型, Stride型, 数组, 字符串, 哈希表)
创建: 2018/02/28 完成: 2018/03/04 更新: 2018/05/03 给主要标题加上英语, 方便页内搜索 [任务表]TODO 范围型(Range)与Stride型 与范围运算符相 ...
- bzoj 1070: [SCOI2007]修车【最小费用最大流】
一开始从客人角度想的,怎么建都不对 从一个修车工所接待的所有顾客花费的总时间来看,设一共有x个人,那么第一个修的对总时间的贡献是x*w1,第二个是(x-1)*w2-以此类推.所以把第i个修车工拆成n组 ...
- Luogu P1186 玛丽卡 【最短路】By cellur925
题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...
- [USACO 2011 Nov Gold] Cow Steeplechase【二分图】
传送门:http://www.usaco.org/index.php?page=viewproblem2&cpid=93 很容易发现,这是一个二分图的模型.竖直线是X集,水平线是Y集,若某条竖 ...