Java 从数据库表中检索数据并用html将其显示在table中

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23141409/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 21:01:53  来源:igfitidea点击:

retrieve data from database table and display it in atable with html

javajspservletsjdbcscriptlet

提问by user3546361

i am a beginer and am currently working on my final school project which require retrieving data from a database table and displaying the datas in an html page. i have searched alot but still no progress. i was linked to this site through google, i saw a format and i try to do the same thing but after running the code i get this error

我是初学者,目前正在从事我的最终学校项目,该项目需要从数据库表中检索数据并在 html 页面中显示数据。我已经搜索了很多,但仍然没有进展。我通过谷歌链接到这个网站,我看到了一种格式,我尝试做同样的事情,但在运行代码后我得到这个错误

Exception report

异常报告

message An exception occurred processing JSP page /crimeinfo.jsp at line 32 description The server encountered an internal error that prevented it from fulfilling this request.

exception

例外

org.apache.jasper.JasperException: An exception occurred processing JSP page /crimeinfo.jsp at line 32
29:     
30:     
31:     <%List <String> data =(List)request.getAttribute("data");
32:     Iterator <String> itr = data.iterator() ;
33:     for (itr = data.iterator();
34:     itr.hasNext();)
35:     {%>

please i need help. i dont known what else to do. thnks...

请我需要帮助。我不知道还能做什么。谢谢...

viewcrime.xml

viewcrime.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--web.xml code-->
<servlet>
<servlet-name>viewcrimereport</servlet-name>
<servlet-class>viewcrimereport</servlet-class>
<servlet-mapping>
<servlet-name>viewcrimereport</servlet-name>
<url-pattern>viewcrimereport</url-pattern>
</servlet-mapping></servlet>

viewcrimereport.java

查看犯罪报告.java

public class viewcrimereport extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
     private ServletConfig config;
     String page = "crimeinfo.jsp";
     public void init(ServletConfig config)
         throws ServletException{
         this.config = config; }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out=response.getWriter();
    response.setContentType("text/html");
    Connection conn = null;
    String url = "jdbc:mysql://localhost/citycrime";
    String userName = "root";
    String passw = "jids";
    PreparedStatement pst = null;
    ResultSet rs;
    ArrayList<String> datalist = new ArrayList<String>();
    try{    
            int i=0;
    Class.forName("com.mysql.jdbc.Driver").newInstance();
        conn = DriverManager.getConnection(url, userName, passw);
        pst = conn.prepareStatement("");
    String sql ="select suspectname,suspectaliases,suspectht,suspectgender,features,crimeaddress,crimetype,caseno,casestatus from crimereport";
        pst.executeQuery(sql);
        rs = pst.getResultSet();
        while(rs.next()){
            datalist.add(rs.getString("suspectname"));
            datalist.add(rs.getString("suspectaliases"));
            datalist.add(rs.getString("suspectht"));
            datalist.add(rs.getString("suspectgender"));
            datalist.add(rs.getString("features"));
            datalist.add(rs.getString("crimeaddress"));
            datalist.add(rs.getString("crimetype"));
            datalist.add(rs.getString("caseno"));
            datalist.add(rs.getString("casestatus"));}
        rs.close();pst.close(); }
    catch(Exception e){System.out.println("Exception is;"+e);}
    request.setAttribute("data",datalist);
    RequestDispatcher dispatcher = request.getRequestDispatcher(page);
    if (dispatcher != null){
        dispatcher.forward(request, response);
    }
        }
}    

crimeinfo.jsp

犯罪信息.jsp

<%@ page language="java" import="java.sql.*" import="java.util.*" 
contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Crime Report</title>
</head>
<body>
    <table border="1" with="600">
    <tr><td><tb><td>SuspectName</td></b>
    <td><tb>SuspectAlias</b></td>
    <td><tb>suspectaliases</tb></td>
    <td><tb>Height</tb></td>
    <td><tb>suspectht</tb></td>
    <td><tb>Gender</tb></td>
    <td><tb>suspectgender</tb></td>
    <td><tb>Features</tb></td>
    <td><tb>features</tb></td>
    <td><tb>Address</tb></td>
    <td><tb>crimeaddress</tb></td>
    <td><tb>CrimeType</tb></td>
    <td><tb>crimetype</tb></td>
    <td><tb>CaseNumber</tb></td>
    <td><tb>caseno</tb></td>
    <td><tb>Status</tb></td>
    <td><tb>casestatus</tb></td></tr>
    <% Iterator <String> itr;%>
    <%List data =(List)request.getAttribute("datalist");
    for (itr = data.iterator();
    itr.hasNext();){%><tr>
    <%String s =(String)itr.next(); %>
    <td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
        <tr><td><%=itr.next()%>></td>
        <tr><td><%=itr.next()%>></td>
<tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td>
    <tr><td><%=itr.next()%>></td></tr><%} %>
</table>
</body>
</html>

回答by maxx777

  1. At line 32, make it Iterator itr = data.iterator() ;I advise you to use while(itr.hasNext()instaed of for loop for more clarity of the code. Also, the initialization part in the for loop is retundant.

  2. rename your xml file to web.xmland put it as \WEB-INF\web.xml

  3. in web.xml, url-pattern should be <url-pattern>/viewcrimereport</url-pattern>

  4. for your servlet, since you have already extended HttpServletclass, there is no need to implement Servletinterface. HttpServlet class already implements that interface

  5. you have not closed your connection. use conn.close().

  6. in your jsp, it should be <%List data =(List)request.getAttribute("data");because you have set request attribute with name dataand not "datalist"

  7. use of scriptlets (those <% %>things) are discouraged. see this

  8. since you are not outputting anything from your servlet to your browser, you can omit the following code PrintWriter out=response.getWriter(); response.setContentType("text/html");

  9. in my personal opinion, i would suggest to use serviceinstead of doGet(). Service method will itself call the doGet method. Plus it can also invoke other meyhods like doPost, doHead etc if it requires.

  1. 在第 32 行,Iterator itr = data.iterator() ;我建议您使用while(itr.hasNext()for 循环的 instaed 以使代码更清晰。此外,for 循环中的初始化部分是冗长的。

  2. 将您的 xml 文件重命名web.xml\WEB-INF\web.xml

  3. 在 web.xml 中,url-pattern 应该是 <url-pattern>/viewcrimereport</url-pattern>

  4. 对于您的 servlet,由于您已经扩展了HttpServlet类,因此无需实现Servlet接口。HttpServlet 类已经实现了该接口

  5. 您尚未关闭连接。使用conn.close().

  6. 在您的jsp中,应该是<%List data =(List)request.getAttribute("data");因为您设置了名称data而不是“datalist”的请求属性

  7. <% %>不鼓励使用脚本(那些东西)。看到这个

  8. 由于您没有从 servlet 向浏览器输出任何内容,因此可以省略以下代码 PrintWriter out=response.getWriter(); response.setContentType("text/html");

  9. 在我个人看来,我建议使用service而不是doGet(). Service 方法本身会调用 doGet 方法。此外,如果需要,它还可以调用其他方法,如 doPost、doHead 等。

回答by Kashish Narang

You can use the datalist.get(column index)method of ArrayList. For more details refer to: http://www.tutorialspoint.com/java/java_arraylist_class.htm

您可以使用 的datalist.get(column index)方法ArrayList。更多详情请参考:http: //www.tutorialspoint.com/java/java_arraylist_class.htm