【问题标题】:Java JSP servlet can't see DB in JSPJava JSP servlet 在 JSP 中看不到 DB
【发布时间】:2015-02-23 18:50:23
【问题描述】:

我开始学习数据库和servlet,JSP。而且我不知道有些失败。我在 JSP 中看不到我的数据库。

Java 代码:

try {

        Class.forName("org.postgresql.Driver");
        connection = DriverManager.getConnection(url, login, password);
        String sql = "select * fiz_phone";
        Statement s = connection.createStatement();
        s.executeQuery(sql);
        rs = s.getResultSet();
        while (rs.next()) {
            dataList.add(rs.getInt("id"));
            dataList.add(rs.getString("name"));
            dataList.add(rs.getString("adress"));
            dataList.add(rs.getString("phone"));
            dataList.add(rs.getString("phone_adress"));
            dataList.add(rs.getInt("cost"));
            dataList.add(rs.getString("exempt_type"));
            dataList.add(rs.getInt("exempt"));
            dataList.add(rs.getString("date_claim"));
            dataList.add(rs.getInt("number_claim"));
            dataList.add(rs.getString("inspektor"));
            dataList.add(rs.getString("date_repair"));
            dataList.add(rs.getInt("phone_cost"));
            dataList.add(rs.getString("call"));
        }
        rs.close();
        s.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);

    }

HTML:

   <body>
    <table border="1">
        <tr>
            <td ><b>ID</b></td>
            <td ><b>Name</b></td>
            <td ><b>Adress</b></td>
            <td ><b>Phone</b></td>
            <td ><b>Phone adress</b></td>
            <td ><b>Cost</b></td>
            <td ><b>Exempt type</b></td>
            <td ><b>Exempt</b></td>
            <td ><b>Date claim</b></td>
            <td ><b>Number of claim</b></td>
            <td ><b>Inspektor</b></td>
            <td ><b>Date repair</b></td>
            <td ><b>Phone cost</b></td>
            <td ><b>Call</b></td>
    
    
        </tr>
        <%ArrayList<String> f = (ArrayList<String>) request
        .getAttribute("data");
        Iterator<String> itr = f.iterator();
            while (itr.hasNext()) {%>
    
        <tr id="tab">
    
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
            <td ><%=itr.next()%></td>
        </tr>
        <%}%>
    </table>
    </body>

和小服务程序

<servlet>
        <servlet-name>DataServlet</servlet-name>
        <servlet-class>work_project.Data</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>DataServlet</servlet-name>
        <url-pattern>/DataServlet</url-pattern>
    </servlet-mapping>

当我启动这个程序时,它给了我这个异常

org.apache.jasper.JasperException: An exception occurred processing JSP page /DataPage.jsp at line 35

32:     </tr>
33:     <%Iterator itr;%>
34:     <% List data= (List)request.getAttribute("data");
35:         for (itr=data.iterator(); itr.hasNext(); ) {
36:     %>
37:     <tr>
38:         <td ><%=itr.next()%></td>

【问题讨论】:

  • 发生了什么异常。发布您的完整堆栈跟踪。
  • 如果我理解你的话:org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) 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:727 ) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  • 堆栈跟踪不完整。实际异常不在此处。
  • 你能给我看看你完整的servlet代码吗?

标签: java jsp servlets jdbc


【解决方案1】:

我运行了您的代码示例。有效。唯一的区别是我在数据列表中插入了一些代码,而不是访问数据库。即使结果集为空,您也不应该得到空指针异常。

由于您在访问数据列表时遇到空指针异常,这似乎表明 servlet 中的原始列表为空。在 servlet 中实例化 dataList 的代码是什么?你有类似的声明吗

List<String> dataList = new ArrayList<String>();

尝试调试您的代码。在 setAtribute 语句的 servlet 中设置断点。查看dataList是否为null。

还要检查循环是否正在执行。确保结果集不为空。

【讨论】:

【解决方案2】:

代码应该是通过JDBC语句查询数据库的有效SQL查询。

String sql = "select * from fiz_phone";

这可能是一个错字,但你在 catch 块的代码中忽略了它

} catch (Exception e) {
    //TODO you should handle the exception here
    System.out.println("Exception is ;" + e);

}

此外,由于您正在学习,最好从结果集中为每条记录返回一个对象。

while (rs.next()) {
    MyObject obj = new MyObject();
    obj.setId(rs.getInt("id"));
    obj.setName(rs.getString("name"));
    ...

    dataList.add(obj);
}

在迭代器中也这样做

<%ArrayList<MyObject> f = (ArrayList<MyOobject>) request.getAttribute("data");
Iterator<MyObject> itr = f.iterator();
while (itr.hasNext()) {
  MyObject obj = itr.next();
  pageContext.setAttribute("row", obj);%>

<tr id="tab">
    <td >${row.id}</td>
    <td >$(row.name}</td>
    ...
</tr>
<%} pageContext.removeAttribute("row");%>

您应该将 MyObject 设为 java bean(即属性应该有 getter 和 setter)。之后你可以尝试使用 JSTL 标签库和forEach 标签来完全删除 scriptlet。

【讨论】:

  • 非常感谢。我这样做就像您的代码一样。但它不起作用。再次例外。在这句话中 work_project.Base row = itr.next(); %> 程序看不到“行”。 pp.vk.me/c621318/v621318101/5e62/xyrCspFUl0s.jpg
  • row 应设置为可通过表达式搜索的任何范围(即页面)。
【解决方案3】:

基于 Roman C 的答案,scriptlet 范围与表达式语言范围不同。如果您使用 jstl 核心模板进行循环,那么它应该会看到行。

  <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  <c:forEach var="row" items="${data}">
    <tr id="tab">
        <td >${row.id}</td>
        <td >${row.name}</td>
    </tr>
  </c:forEach>

我认为这不会解决最初的问题。数据可能仍然为空。

您是否尝试过使用调试器并测试 dataList 在使用 setAttribute 添加到请求时是否为空?

回复有关调试器的评论:

您需要再执行一步,以便初始化行。在 servlet 中为 setAttribute 语句尝试相同的操作,查看 dataList 是否为空。

【讨论】:

  • 我看到了(关于 scriplet)。用正确的 srciplets 重播程序,你是对的。这不是我的问题的解决方案。是的,我试过了,但是 debug 并没有告诉我什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多