任务要求:
应用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包
数据库,在jdbc数据库中创建名为info的表,表中内容如下:
运行后结果如下:
index.jsp运行后显示内容
getInfo.jsp内容为
尝试解决:
在网站上搜索Unable to compile class for JSP异常后,说是因为tomcat版本太低,但我的tomcat版本为Tomcat 8.5.47,jdk版本为1.8.0_261,版本也不低,其次说是可能因为jar冲突,但在尝试过后发现问题依然无法解决
由于问题描述较为模糊,我无法判断具体问题所在。以下是一些常见的解决方案:
检查代码中的错误 在出现编译错误时,应该首先检查代码,尤其是JSP页面中的语法错误,确保代码没有错误。同时也应该检查数据库连接、SQL查询、JSP页面和Java代码等方面是否存在错误。
检查Tomcat和JDK版本 如题目所述,这两个版本已经满足要求,但还是需要检查一下是否与你使用的代码和JAR包相匹配。
检查JAR包冲突 尝试检查JAR包是否存在冲突,因为不同的JAR包可能包含相同的类,在运行时冲突产生。
配置Tomcat的上下文 在使用Tomcat时,每个Web应用程序都有一个上下文,由Tomcat容器维护。通过配置上下文,可以使Tomcat容器知道Web应用程序的相关信息。如果没有正确配置上下文,可能会导致错误,如404错误等。
以上是一些可能的参考解决方案,如果以上不起作用,建议使用调试器或者日志来定位问题。
没有编译成功,一般来讲跟tomcat和jdk没有关系,1.8的jdk应该可以跑