【问题标题】:How to use JSTL sql tag如何使用 JSTL sql 标签
【发布时间】:2011-12-03 13:35:17
【问题描述】:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>

<sql:setDataSource var="dataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/cloud" user="root"  password="root"
scope="session" /> 

<sql:query var="qryProvider" >
    SELECT * FROM `provider`;
</sql:query>

<table>
    <c:forEach var="row" items="${qryProvider.rows}">
        <tr>
            <td>${row.display_name}</td>

        </tr>
    </c:forEach>
</table>

我收到以下错误:

HTTP Status 500 -

type Exception report

message

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 /testJSTL.jsp at line 8

5: url="jdbc:mysql://localhost:3306/cloud" user="root"  password="root"
6: scope="session" /> 
7:  
8: <sql:query var="qryProvider" >
9:     SELECT * FROM `provider`;
10: </sql:query>
11:  


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:456)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "java.lang.NullPointerException"
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:911)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:840)
    org.apache.jsp.testJSTL_jsp._jspService(testJSTL_jsp.java:94)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

我尝试关注this tut,但如果我写它会给我一个错误

<sql:query var="qryProvider" dataSource="${dataSource}" >

我是新手,有人可以指出正确的方向吗?

【问题讨论】:

    标签: java mysql jstl


    【解决方案1】:

    SELECT * FROM provider;
    

    替换您的代码并导入 sql 包

    或 导入sql包和 消除 ;从您的选择声明中

    【讨论】:

      【解决方案2】:
       <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
      <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>   
      
      
      <sql:setDataSource var="dataSource" driver="com.mysql.jdbc.Driver"
      url="jdbc:mysql://localhost/cloud" user="root"  password="root"
      scope="session" /> 
      
      
      <sql:query var="qryProvider" dataSource="${dataSource}">
      
          SELECT * FROM provider;
      </sql:query>
      
      <table>
          <c:forEach var="row" items="${qryProvider.rows}">
              <tr>
                  <td>${row.display_name}</td>
      
              </tr>
          </c:forEach>
      </table>
      

      【讨论】:

      • 你能不能再补充一些解释?
      【解决方案3】:

      我的建议是完全忘记 &lt;sql&gt; 标记,并使用纯 Java 进行所有数据库操作(在您首选的 MVC 框架的 servlet 或操作中)。这个 servlet 将构建一个 bean 实例列表,准备好由您的 JSP 显示。使用RequestDispatcher 将请求从servlet 分派到JSP。

      即使official Java EE tutorial 说:

      用于访问表 7-7 中列出的数据库的 JSTL SQL 标记是 专为快速原型设计和简单应用而设计。用于生产 应用程序,数据库操作通常封装在 JavaBeans 组件。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      相关资源
      最近更新 更多