私はJSPとサーブレットを学ぶのは初めてです。ストアドプロシージャを呼び出し、データベースから状態のリストを返すJavaクラスがあります(これは学習中のテストケースですが、他のより複雑なアクションは後で実行されます)。状態のリストは、フォームなどで表示/使用するためにJSPに返される必要があります...今のところ、JSPページを介してデータを印刷し、そこにあることを確認できてうれしいです。
ただし、JSPからJavaコードを呼び出すと、結果オブジェクトがnullとして返されるため、データにアクセスできないように見えます。ResultSetオブジェクトとしてデータを返そうとしましたが、結果は同じです。SQLから呼び出されたときにストアドプロシージャが機能することは知っています。さらに、doPostリクエストに応答し、正常に動作するサーブレットとしてJavaコードがあります...
何が欠けている/理解できないのでしょうか?これは可能ですか?
package edu.XXXX.ais.userapp;
import java.sql.*;
import java.util.*;
public class DBQueries {
public static Vector<String> getStatesList() {
Vector<String> results = new Vector<String>();
Connection con = null;
try {
// Example of executing a stored procedure
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection ("jdbc:mysql://hostname:3306/dbName","username","password");
CallableStatement cs = con.prepareCall("{call getStatesList()}");
ResultSet rs = cs.getResultSet();
while (rs.next()) {
results.add(rs.getString(1));
}
} catch (SQLException e) {
System.err.println("Servlet could not display records." + e);
} catch (ClassNotFoundException e) {
System.err.println("JDBC driver not found." + e);
} finally {
try {
if (con != null) {
con.close();
con = null;
}
} catch (SQLException e) {
System.err.println(e);
}
}
return results;
}
}
上記のJavaコードを呼び出すJSPページ(結果を受信できることを期待しています...)
<html>
<head>
<title>Foo</title>
</head>
<body>
<h3>List of states via a servlet call to the database</h3>
<%@ page import="java.util.*" %>
<%@ page import="edu.XXXX.ais.userapp.DBQueries" %>
<%
Vector rs = DBQueries.getStatesList();
if (rs != null)
for (int index = 0; index < rs.size(); index++) {
out.println("Name : " + (String) rs.get(index));
}
%>
</body>
</html>
結果として生じるTomcatエラーは次のとおりです。
org.apache.jasper.JasperException: An exception occurred processing JSP page /states.jsp at line 12
9: <%@ page import="edu.XXXX.ais.userapp.DBQueries" %>
10:
11: <%
12: Vector rs = DBQueries.getStatesList();
13: if (rs != null)
14: for (int index = 0; index < rs.size(); index++) {
15: out.println("Name : " + (String) rs.get(index));
Stacktrace:
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:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.lang.NullPointerException
edu.XXXX.ais.userapp.DBQueries.getStatesList(Unknown Source)
org.apache.jsp.states_jsp._jspService(states_jsp.java:75)
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:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)