我有以下课程 JAVA文件(数据)
package p1;
class data
{
private String pro;
private String sta;
public void set1(String a)
{
pro=a;
}
public void set2(String b)
{
sta=b;
}
}
用于从db检索数据的类文件 JAVA文件(conb)
package p1;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.*;
import p1.*;
public class conb
{
public static List<data> datadb() throws SQLException
{
List<data> n1=new ArrayList<data>();
Connection conn = null;
Statement st = null;
try
{
String userName = "frank";
String password = "asdf";
String url = "jdbc:mysql://localhost:8080/work";
Class.forName ("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection (url, userName, password);
}
catch (Exception e)
{
e.printStackTrace();
}
try {
st = conn.createStatement();
st.execute("select * from work1");
ResultSet rs = st.getResultSet();
while(rs.next())
{
data d1=new data();
d1.set1(rs.getString("pron"));
d1.set2(rs.getString("sdata"));
n1.add(d1);
}
rs.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
if (conn != null)
{
try
{
conn.close ();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
return n1;
}
}
此文件位于WEB-INF / Classes / p1中 我想在jsp文件中显示数据(使用jsp作为控制器和视图) 我在windows中使用tomcat 6.0。 我也为此写了jsp页面
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ import "java.util.*" %>
<%@ import "p1.conb" %>
<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">
</head>
<body>
<table cellpadding="2" cellspacing="2" width="100%">
<tr>
<td>Name</td>
<td>Start time</td>
</tr>
<tr>
<%
List<data> da1 = new List<data>();
da1=p1.conb.datadb();
%>
<c:forEach items="${da1}" >
<td><c:out value="{$da1.pro}" /></td>
<td><c:out value="{$da1.sta}" /></td>
</tr>
</c:forEach>
</table>
<html>
<head>
我收到错误 如何只使用jsp从数据库中检索数据。 我不想使用servlet作为控制器。
错误是:
org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to load class for JSP org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:161) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
答案 0 :(得分:1)
我必须管理我对这个答案感到不舒服,但是如果你只想让它运行,请删除<c:forEach [...]
循环。
替换此
<%
List<data> da1 = new List<data>();
da1=p1.conb.datadb();
%>
<c:forEach items="${da1}" >
<td><c:out value="{$da1.pro}" /></td>
<td><c:out value="{$da1.sta}" /></td>
</tr>
</c:forEach>
有这样的东西(你必须在data
类中创建getter方法:
<%
List<data> da1 = new List<data>();
da1=p1.conb.datadb();
for (data da : da1) {
%>
<tr>
<td><%=da.getPro()%></td>
<td><%=da.getSta()%></td>
</tr>
<%
}
%>
仅供参考 - 您的代码存在大量问题,仅举几例:
答案 1 :(得分:0)
我意识到我迟到了,但是我多次遇到这种类型的问题,因为我重构了JSP以停止使用scriptlet。在中间阶段,我有很多次使用加载数据的scriptlet,但我想将这些数据与一些JSTL标签/ EL表达式一起使用。这是我通常的临时解决方案:
<%
List<data> da1 = new List<data>();
da1=p1.conb.datadb();
pageContext.setAttribute("da1", da1);
%>
<c:forEach items="${da1}" >
<td><c:out value="{$da1.pro}" /></td>
<td><c:out value="{$da1.sta}" /></td>
</tr>
</c:forEach>
您可以轻松地将数据作为属性添加到请求范围中,但我会尽可能从本地开始,并根据需要转移到更广泛的上下文。