<body>
<%
session.invalidate();
response.sendRedirect("onLine.jsp");
%>
</body>
退出登录out.jsp
实现了HttpSessionListener接口的类 能监听程序中所有的session! 需要在web.xml文件中配置监听器类!
public class UserSession implements HttpSessionListener {
static { // 验证我们这个 UserSession 监听器的 启动时间 是服务器启动的时候 开启的
System.out
.println("UserSession静态代码块----------------------------------");
}
{
System.out
.println("UserSession普通代码块----------------------------------");
}
// 实例化
public UserSession() {
System.out.println("构造.....................");
}
// 获取ServletContext对象
public void sessionCreated(HttpSessionEvent event) {
ServletContext context = event.getSession().getServletContext();
// 获取共享的数据
Integer userCount = (Integer) context.getAttribute("userCount");
// 因为第一次肯定为空 需要做非空验证
if (userCount == null) {
userCount = new Integer(1);
} else {
userCount = userCount + 1;
}
// 存入共享的数据
context.setAttribute("userCount", userCount);
System.out.println("进了+++++++++++++++++++++++1");
}
/**
* 01.session失效 session.invalidate()
* 02.session超时
*/
public void sessionDestroyed(HttpSessionEvent event) {
ServletContext context = event.getSession().getServletContext();
// 获取共享的数据
Integer userCount = (Integer) context.getAttribute("userCount");
// 因为第一次肯定为空 需要做非空验证
if (userCount == null) {
userCount = new Integer(0);
} else {
userCount = userCount - 1;
}
System.out.println("进了--------------------1");
// 存入共享的数据
context.setAttribute("userCount", userCount);
}
}
创建一个监听器类实现了HttpSessionListener
在上面的实例代码中直接修改onLine.jsp的页面
<body>
<h1>
当前在线人数:
<%=session.getServletContext().getAttribute("userCount")%>
</h1>
<a href="out.jsp">退出登录</a>
</body>
修改后的onLine.jsp
实现了ServletContextListener接口的类 能监听整个程序 需要在web.xml文件中配置监听器类!
public class DataListener implements ServletContextListener {// 全局的监听服务
public void contextInitialized(ServletContextEvent event) {
System.out.println("在服务器启动的时候进行初始化**************");
try {
// 初始化上下文信息
Context context = new InitialContext();
// 获取数据源的相关信息
DataSource source = (DataSource) context
.lookup("java:comp/env/jdbc/news");
event.getServletContext().setAttribute("DS", source);
} catch (NamingException e) {
e.printStackTrace();
}
}
public void contextDestroyed(ServletContextEvent event) {
System.out.println("在服务器关闭的的时候销毁**************");
}
}
创建一个监听类实现ServletContextListener
在tomcat中找到config文件夹下面的context.xml文件
<?xml version='1.0' encoding='utf-8'?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!--
name:数据源的名称
auth:容器类型
type:指定数据源的类型
username:用户名
password:密码
driverClassName:数据库驱动包
url:连接的地址
maxWait:最大的等待时间
maxIdle:设置最大的连接数
maxActive:重新连接
-->
<Resource name="jdbc/news" auth="Container"
type="javax.sql.DataSource"
username="wym"
password="wym"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/news"
maxIdle="30"
maxWait="10000"
maxActive="1000"
/>
</Context>
context.xml文件
之后创建一个页面,看能否拿到DataSource的值
<body>
<%
out.print(session.getServletContext().getAttribute("DS"));
%>
</body>
常见一个jsp界面
如果想更改新闻管理系统为数据源的方式 只需要更改BaseDao中的获取连接的方法即可
public boolean getConnection() {
try {
// 初始化上下文信息
Context context = new InitialContext();
// 获取数据源的相关信息
DataSource source = (DataSource) context
.lookup("java:comp/env/jdbc/news");
con = source.getConnection();
} catch (NamingException e) {
e.printStackTrace();
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
BaseDao