我正在使用 Java Servlet 和 JSP 开发一个网站。我在tomcat上运行它。 我的一个 JSP 使用了一个名为 Message 的自定义类。我在 servlet 中设置了一个数组列表消息,然后尝试使用 request.getAttribute() 在我的 JSP 中访问它 如果我将消息打印到控制台,它就可以工作。但是,当我尝试在我的网站上使用它们时,出现异常。
java.lang.ClassCastException: Message cannot be cast to classes.Message
org.apache.jsp.html.Chatroom_jsp._jspService(Chatroom_jsp.java:137)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:4
53)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
MessageServlet.doGet(MessageServlet.java:67)
javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
我采取的步骤:将页面导入放在 jsp 之上,将类添加到 web-inf/classes 并将类添加到 catalina.properties。但它仍然不起作用。 任何帮助将不胜感激!
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"
%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.Date"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.PreparedStatement"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.util.List"%>
<%@ page import="classes.Message"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h2>Chat Messages</h2>
<table>
<!-- dynamically generate the messages here -->
<tr>
<th>user</th>
<th>message</th>
<th>time</th>
</tr>
<%
//set the messages into an arraylist
ArrayList <Message> msgs = new ArrayList<Message>();
msgs = (ArrayList) request.getAttribute("messages");
//TEST OUTPUT, to check if we can access messages
System.out.println("hi. this is the message");
System.out.println(msgs.get(0));
//Message mess = new Message();
//mess.setMessage(msgs.get(0).getMessage());
//mess.setTime(msgs.get(0).getTime());
//mess.setUserId(msgs.get(0).getUserId());
//mess.setFname(msgs.get(0).getFname());
for(Message mess : msgs)
{
%>
<td><%=mess.getFname() %></td>
<td><%=mess.getMessage() %></td>
<td><%=mess.getTime() %></td>
<%
}
%>
</table>
<form>
<div class="container">
<input type="text" placeholder="Enter message here " name="userPost" required>
<button onClick = 'myFunction(); return false' type="submit">Submit</button>
<p id = "demo"></p>
</div>
</form>
<script>
function myFunction() {
document.getElementByID("demo").innerHTML = "Hello";
}
// Get the modal
var model = document.getElementById('id01');
</script>
</body>
</html>
最佳答案
您的 import
声明不正确。您的类的完全限定类名称是简单的 Message
,而不是 classes.Message
。
因此,您的导入行应如下所示:
<%@page import="Message"%>
但是!你不能导入没有包的类...上面的填充会导致编译器错误。
因此,您真正要做的是将您的Message
类从所谓的“默认包”(即无包 ) 成一个包。您分两步完成:
向您的类添加一个
package
声明,如下所示:包金币;
公开课留言 ...
将
/li>Message.java
从src/Message.java
移动到src/sgolds/Message.java
现在重新编译您的 .java 文件。
现在,更新您的 JSP 以获得正确的导入
:
<%@page import="sgolds.Message"%>
你应该可以开始了。
关于java - Tomcat 和 JSP 的 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53659072/