DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title heretitle>
head>
<body>
<a href="login">点击登录a>
body>
html>
前端按钮点击事件
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class login
*/
@WebServlet("/login")
public class login extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public login() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session=request.getSession();//获取请求方(浏览器)session
request.getServletContext().getAttribute("num");//获取请求方的num属性
response.setContentType("text/html;charset=utf-8");//设置响应浏览器的编码方式为utf-8
Integer num=(Integer)request.getSession().getServletContext().getAttribute("num");
System.out.println("login被调用,num="+num);
response.getWriter().println("当前人数为:"+num);
response.getWriter().println("点击退出!");//在前段打印的内容,同时点击标签跳转到loginout这个类
}
}
创建一个容器属性
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* Application Lifecycle Listener implementation class ServletContextlisten
*
*/
@WebListener
public class ServletContextlisten implements ServletContextListener {
/**
* Default constructor.
*/
public ServletContextlisten() {
// TODO Auto-generated constructor stub
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
//为这个东西添加一个人数属性,Servletcontext可以在web.xml里面创建新的属性,或更改属性
Integer num=0;//创建一个包装对象
arg0.getServletContext().setAttribute("num", num);//在xml里添加一个属性,以及属性值(属性值要是对象)所以才有的前面的包装对象
System.out.println("容器被创建"+num);
}
}
监听session的创建
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* Application Lifecycle Listener implementation class HttpSessionListen
*
*/
@WebListener
public class HttpSessionListen implements HttpSessionListener {
/**
* Default constructor.
*/
public HttpSessionListen() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpSessionListener#sessionCreated(HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
//浏览器只要打开就会创建session
//只要session创建了这个监听器就会知道从而调用这个方法
Integer num=(Integer) arg0.getSession().getServletContext().getAttribute("num");
System.out.println("session被创建"+num);
//获取在全局监听器中设置的sum的值
//session创建以后
num++;
arg0.getSession().getServletContext().setAttribute("num", num);
System.out.println("session被创建修改"+num);
//改完之后重新设置一下servletcontext的属性值
//创建就结束了
//这里的sum值会被退出的loginout这个方法通过给servletcontext.getattbute()调用,并输出
}
/**
* @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
//当访问端(浏览器)关闭之后,session会销毁,销毁之后就要人数减一;
Integer num=(Integer) arg0.getSession().getServletContext().getAttribute("num");
num--;
arg0.getSession().getServletContext().setAttribute("num",num);
System.out.println("session被删除修改"+num);
//这里的sum值会被退出的loginout这个方法给调用,并输出
}
}
退出事件
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class loginout
*/
@WebServlet("/loginout")
public class loginout extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public loginout() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.getSession().invalidate();//干掉已存在的session,干掉sessi,监听器会听到,同时在监听器里对sum做 *** 作
Integer num=(Integer)request.getSession().getServletContext().getAttribute("num"); //获取这个属性的值
num--;
System.out.println("loginout被执行"+num);//num是一个对象,因为,在这个类里面没有所以要定义一下
response.setContentType("text/html;charset=utf-8");
response.getWriter().print("你已退出,当前人数为:"+num);
}
}
xml文件没有发,是因为每个人的路径啥的都不一样,上面的所有代码都把导包给删除了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)