1:监听器 Listener
需要看Servlet的可以看我的上一篇文章,里面有详细的介绍
Listener介绍:
监听器就是监听某个对象的状态变化
事件源:被监听的三个域对象request,session,servletcontext
监听器的编写步骤:
1:编写一个监听器类去实现监听器接口
使用注解来配置:@WebListener
还有一种配置方法就是用web.xml来配置,不过比较麻烦,个人喜欢用注解
package com.zking.lister;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* 监听器
* @author JIE
*
* @date 2022年4月22日 下午8:21:42
*/
@WebListener //注解方式
public class onLineListenr implements ServletContextListener,HttpSessionListener {
ServletContext applicaton;
@Override
public void contextDestroyed(ServletContextEvent sce) {
// application被销毁了
System.out.println("服务销毁了");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
//application被创建了
System.out.println("服务创建了");
applicaton = sce.getServletContext();
applicaton.setAttribute("onlineCount", 0);
}
@Override
public void sessionCreated(HttpSessionEvent arg0) {
// 主要该项目的页面被访问了
//获取人数
Integer count = (Integer)applicaton.getAttribute("onlineCount");
//人数+1
//设置人数
applicaton.setAttribute("onlineCount", ++count);
System.out.println("有人进来了");
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
// 1.存活时间到期了
//2.手动销毁
//获取人数
Integer count = (Integer)applicaton.getAttribute("onlineCount");
//人数-1
//设置人数
applicaton.setAttribute("onlineCount", --count);
System.out.println("有人出去了");
}
}
2:过滤器
过滤器介绍:
在Servlet中,我们需要Filter来进行信息的对比过滤,比如在项目中,我们可以通过过滤器来限制游客的功能。
优点:
过滤器的作用描述:在做项目时,通常会分为几个包,游客的界面放在游客包里面,
用户的界面放在用户包里面,管理员的界面放在管理员包里面。
所以我们在写项目时就可以用过滤器的路径匹配来判定,这样的效率会大大增加
Filter的配置:
有两种方法:
1:通过web.xml来配置过滤器
2:通过注解来配置过滤器(个人推荐)
第一种方式比较麻烦,第二种方式比较简单,个人喜欢比较简单的
package com.zking.filter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 权限过滤器【鉴权】
* @author JIE
*
* @date 2022年4月22日 下午8:50:11
*
*/
@WebFilter("/*")
public class Rolefilter implements Filter{
//允许访问的的路径
List<String> paths=new ArrayList<String>();
{
paths.add("/index.jsp");
paths.add("/tourists.jsp");
paths.add("/login.do");
paths.add("/exit.do");
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
// 过滤器的所有操作全部在这里完成
HttpServletRequest request =(HttpServletRequest)req;
HttpServletResponse response =(HttpServletResponse)resp;
//获取当前请求的路径
String path=request.getServletPath();
//路径判断,使用假设法
boolean f=false;
for (String p : paths) {
if(p.equals(path)) {
f=true;
break;
}
}
if(f) {
//过滤器放行操作
chain.doFilter(req, resp);
return;
}
Object isLogin= request.getSession().getAttribute("isLogin");
if(isLogin==null) {
response.sendRedirect("index.jsp");
return;
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
Java开发手册(开发准则):https://pan.baidu.com/s/18cNu2W5p9EumiBZW_yxWIA
提取码:a4cb