java web,Ajax页面显示问题

任务要求:
应用Ajax实现无刷新动态获取实时信息,要求应用Ajax实现无刷新,每隔10分钟从数据库获取一次最新公告,并滚动显示。

遇到问题:
在运行后用到的两个jsp页面一个空白,一个报出异常Unable to compile class for JSP,无法正常显示文本内容
如下是代码展示:
getInfo.jsp

<%@ page language="java" contentType="text/html;charset=UTF-8"  pageEncoding="UTF-8" %>
<%@ page import="java.sql.*" %>
<jsp:useBean id="conn" class="ConnDB"  scope="page"></jsp:useBean>
<ul>
    <%
        ResultSet rs = conn.executeQuery("select * from info order by id desc");
        if (rs.next()) {
            do {
                out.print("666");
                out.print("<li>"+rs.getString(1) + "</li>");

            } while (rs.next());
        } else {
            out.print("<li>暂无公告信息!</li>");
        }
    %>
</ul>


index.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>index</title>
  <script type="text/javascript" src="${pageContext.request.contextPath}/jquery-3.6.4.js"></script>
  <script language="JavaScript">
    function getInfo() {
      $.get("http://localhost:8080/Ajax_war_exploded/getInfo.jsp?nocache=" + new Date().getTime(), function (data) {
        $("#showInfo").html(data);
      });
    }
    $(document).ready(function () {
      getInfo();  //调用getInfo()方法获取公告信息
      window.setInterval("getInfo()", 600000);
    });
  </script>
</head>
<body>
<div id="showInfo"></div>
<section>
  <marquee direction="up" scrollamount="3"></marquee>
</section>
</body>
</html>


ConnDB.java


import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class ConnDB {
    public Connection conn = null;
    public Statement stmt = null;
    public ResultSet rs = null;

    // 指定资源文件保存的位置
    private static String propFileName = "connDB.properties";
    private static Properties prop = new Properties();

    // 定义并保存数据库驱动的变量
    private static String dbClassName = "com.mysql.cj.jdbc.Driver";
    private static String dbUrl =
            "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8";

    // 构造方法
    public ConnDB() {
        try {
            // 将Properties文件读取到工InputStream对象中
            InputStream in = getClass().getResourceAsStream(propFileName);
            prop.load(in);
            dbClassName = prop.getProperty("DB_CLASS_NAME"); //获取数据库驱动
            dbUrl = prop.getProperty("DB_URL", dbUrl);  //获取URL
        } catch (Exception e) {
            e.printStackTrace();  //输出异常信息
        }
    }

    // 连接数据库
    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName(dbClassName).newInstance(); // 装载数据库驱动
            // 建立与数据库DRL中定义的数据库的连接
            conn = DriverManager.getConnection(dbUrl,"root","226793");
            System.out.println("连接成功!");
        } catch (Exception ee) {
            ee.printStackTrace();
        }
        if (conn == null) {
            System.err.print("连接失败!");
        }
        return conn;
    }

    // 执行查询
    public ResultSet executeQuery(String sql) {
        try {
            conn = getConnection();
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            // 执行SQL语句,并返回一个ResultSet对象rs
            rs = stmt.executeQuery(sql);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return rs;
    }
    public static void query(){
         Connection conn = null;
         Statement stmt = null;
        ResultSet rs = null;
        try {
            conn=getConnection();
            stmt=conn.createStatement();
            String sql="select * from info";
            rs=stmt.executeQuery(sql);
            while (rs.next()){
                System.out.println(rs.getString("title"));
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }
    // 更新语句
    public int executeUpdate(String sql) {
        int result = 0;
        try {
            conn = getConnection();
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
            result = stmt.executeUpdate(sql); // 执行更新操作
        } catch (SQLException ex) {
            result = 0;
        }
        return result;
    }

    // 关闭数据库的连接
    public void close() {
        try {
            if (rs != null) {
                rs.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
 ConnDB a=new ConnDB();
 a.executeQuery("select * from info");
    query();
    }
}

connDB.properties

DB_CLASS_NAME=com.mysql.cj.jdbc.Driver
DB_URL=jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8
user=root
pass=226793

添加的jar包

img

数据库,在jdbc数据库中创建名为info的表,表中内容如下:

img

运行后结果如下:
index.jsp运行后显示内容

img

getInfo.jsp内容为

img

尝试解决:
在网站上搜索Unable to compile class for JSP异常后,说是因为tomcat版本太低,但我的tomcat版本为Tomcat 8.5.47,jdk版本为1.8.0_261,版本也不低,其次说是可能因为jar冲突,但在尝试过后发现问题依然无法解决

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    由于问题描述较为模糊,我无法判断具体问题所在。以下是一些常见的解决方案:

    1. 检查代码中的错误 在出现编译错误时,应该首先检查代码,尤其是JSP页面中的语法错误,确保代码没有错误。同时也应该检查数据库连接、SQL查询、JSP页面和Java代码等方面是否存在错误。

    2. 检查Tomcat和JDK版本 如题目所述,这两个版本已经满足要求,但还是需要检查一下是否与你使用的代码和JAR包相匹配。

    3. 检查JAR包冲突 尝试检查JAR包是否存在冲突,因为不同的JAR包可能包含相同的类,在运行时冲突产生。

    4. 配置Tomcat的上下文 在使用Tomcat时,每个Web应用程序都有一个上下文,由Tomcat容器维护。通过配置上下文,可以使Tomcat容器知道Web应用程序的相关信息。如果没有正确配置上下文,可能会导致错误,如404错误等。

    以上是一些可能的参考解决方案,如果以上不起作用,建议使用调试器或者日志来定位问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

没有编译成功,一般来讲跟tomcat和jdk没有关系,1.8的jdk应该可以跑