JavaWeb_listener

本文介绍如何在Java Web应用中使用监听器(OnlineCountListener)实时统计并显示网站的在线用户数量,通过HttpSessionListener接口管理session创建和销毁事件来更新计数。

JavaWeb_listener

1.web.xml

<listener>
            <listener-class>com.king.listener.OnlineCountListener</listener-class>
        </listener>



2.OnlineCountListener.java

在这里插入代码片package com.king.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

//统计网站在线人数:统计seesion
public class OnlineCountListener implements HttpSessionListener {

    //创建session监听
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        ServletContext ctx = httpSessionEvent.getSession().getServletContext();
        Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
        if (onlineCount==null){
            onlineCount = new Integer(1);
        }else {
            int count = onlineCount.intValue();
            onlineCount = new Integer(count+1);
        }
        ctx.setAttribute("OnlineCount",onlineCount);
    }


    //销毁session监听
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext ctx = httpSessionEvent.getSession().getServletContext();
        Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
        if (onlineCount==null){
            onlineCount = new Integer(1);
        }else {
            int count = onlineCount.intValue();
            onlineCount = new Integer(count-1);
        }
        ctx.setAttribute("OnlineCount",onlineCount);
    }

}

3.index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h1>当前有<span style="color: blue"><%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%></span>人在线</h1>
  </body>
</html>

<think>好的,我现在需要解决用户在IntelliJ IDEA中连接Oracle数据库时遇到的HTTP 404错误问题,特别是在实现用户注册和登录功能时,使用Tomcat 8.0.47出现“资源不可用”的情况。首先,我得理清可能的原因,然后逐步排查。 用户提到的是404错误,这通常意味着请求的资源不存在或路径不正确。我需要先确认几个方面:项目配置、数据库连接、Servlet映射以及部署是否正确。 首先,检查Web应用的部署结构。在Tomcat的webapps目录下,项目是否正确部署?是否有WAR包解压后的正确目录结构?比如,WEB-INF/classes里是否有编译后的Servlet类文件?如果类文件缺失,Tomcat无法找到对应的Servlet,导致404错误。 接下来,查看web.xml或使用注解配置的Servlet映射是否正确。在Tomcat 8中,既可以用web.xml配置<servlet>和<servlet-mapping>,也可以用@WebServlet注解。如果URL路径写错了,比如注解中的urlPatterns与实际请求的路径不匹配,就会导致404。例如,用户可能访问的是/login,但Servlet映射的是/auth,这时候路径不一致。 然后,数据库连接的问题也可能间接导致404吗?比如,如果用户注册的JSP页面提交表单后,Servlet处理时因为数据库连接失败而抛出异常,但没有正确跳转,可能导致后续资源不可用。不过,数据库错误通常会返回500状态码,而不是404。所以这里可能更多是路径或配置问题,但也不能完全排除数据库驱动未正确加载的可能性,比如Oracle的JDBC驱动是否放在WEB-INF/lib目录下?如果驱动缺失,可能导致Servlet初始化失败,从而无法处理请求,这时候可能会在启动时就报错,或者在访问时出现404,如果Servlet没有正确初始化的话。 另外,检查IDEA中的Tomcat配置。部署工件时,是否勾选了正确构建的Artifact?比如,应用上下文是否正确?如果应用上下文是/myapp,那么访问的URL应该是http://localhost:8080/myapp/login,而不是直接根路径。如果配置错误,可能导致资源路径不对。 还有,检查代码中的相对路径是否正确。比如,在JSP页面中,表单的action属性是否是相对于当前路径的,或者是否以斜杠开头,这可能导致路径解析错误。例如,如果表单的action是"login",而实际正确的路径是"/myapp/login",则会导致404。 另外,Tomcat的日志文件也很重要。查看logs目录下的catalina.out或localhost.log,看是否有相关的异常信息,比如Servlet初始化失败、类找不到等。如果有ClassNotFoundException或SQLException,就能更快定位问题。 再考虑Oracle数据库的连接配置是否正确。比如,JDBC URL的格式是否正确,用户名密码是否有误,是否有网络问题导致连接不上数据库。不过这些通常会导致500错误,但如果在Servlet初始化时连接失败,可能导致Servlet无法正确注册,从而无法处理请求,出现404。 还有可能的是,项目依赖的库是否存在冲突或版本不兼容。比如,Tomcat 8使用的Servlet API版本是3.1,而项目中可能错误地引入了其他版本的库,导致类加载问题。 总结下来,可能的排查步骤包括: 1. 检查Servlet的URL映射是否正确。 2. 确认项目已正确部署到Tomcat,且类文件和依赖库存在。 3. 查看Tomcat日志,寻找启动或运行时异常。 4. 验证数据库连接配置,确保驱动正确加载。 5. 检查Web应用上下文路径和请求URL是否匹配。</think>### Idea连接Oracle数据库出现HTTP 404错误的解决方案 #### 1. 检查Servlet映射配置 HTTP 404错误最常见的原因是**URL路径与资源映射不匹配**。需确认: - 使用`@WebServlet("/login")`注解时,请求路径需与注解值完全一致 - 若通过`web.xml`配置,检查`<url-pattern>`标签值是否与前端表单的`action`属性匹配 - 示例:若Servlet映射为`/auth/login`,但JSP表单提交路径为`/login`,则出现404错误[^1] #### 2. 验证部署配置 在Tomcat 8.0.47中需确认: ```xml <!-- 检查context.xml配置 --> <Context path="/你的项目名" docBase="项目部署路径"/> ``` - 通过IDEA的`Edit Configurations`检查部署工件(Artifacts)是否包含所有编译文件 - 在`Project Structure`中确认WEB-INF/lib包含Oracle JDBC驱动(如ojdbc8.jar) #### 3. 数据库连接诊断 虽然数据库错误通常返回500状态码,但连接失败可能导致资源初始化异常: ```java // 正确的Oracle连接示例 String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; Class.forName("oracle.jdbc.driver.OracleDriver"); // 需捕获ClassNotFoundException Connection conn = DriverManager.getConnection(url, "username", "password"); ``` - 使用`try-with-resources`确保连接关闭 - 在Servlet的`init()`方法中测试数据库连接 #### 4. 日志分析 查看Tomcat日志定位根本原因: ```bash # 日志路径示例 $CATALINA_HOME/logs/catalina.out ``` 重点关注: - `SEVERE: Error configuring application listener` - `java.lang.ClassNotFoundException` - `ORA-12505`等Oracle错误代码 #### 5. 依赖冲突检查 在pom.xml中确认依赖版本兼容性: ```xml <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>21.5.0.0</version> </dependency> ``` Tomcat 8建议使用JDK 1.8配合Servlet 3.1规范
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值