私の問題は、tryステートメントで変数を設定する必要があることです。そうしないと、コンパイルエラーが発生します。
後でその変数を使用する必要がありますが、現在は範囲外であるか、そう信じています。tryステートメントの外部で変数を初期化し、それをnullに設定します。その後、外部からアクセスできる可能性があると思いましたが、それでも。を取得しNullPointerException
ます。
以下のコードは、読みやすくするために多くのコードが削除されています。これは悪いコードですが、サーブレットは初めてであり、すべての可動部分が想定どおりに動作することを確認したかっただけです。
createDocs(...)を呼び出し、必要なパラメーターを渡す別のクラスを作成しましたが、正常に機能します。これは、他のクラス(便宜上mainメソッドから実行)から実行するものであり、期待どおりに機能するため、呼び出したときになぜrs.getString("name")
取得するのか不思議に思っています。NullPointerException
問題の変数はResultSet変数"rs"です-
public class AgReportServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public AgReportServlet() {
super();
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ResultSet rs = null;
try {
rs = docs.getDocs(con, start, end, zone, locality);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.setContentType("text/xml");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" +
out.println(
"<table border=\"0\" cellspacing=\"0\" cellpadding=\"6\">\n");
// I have a resultset object need to iterate through it to display the file names
try {
while (rs.next()) { // page through the result set
out.println(
" <tr>\n" +
" <td>: " + rs.getString("name") + "</td>\n" +
" </tr>\n"
);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.println(
"</table></body>\n" +
"</html>"
);
out.flush();
out.close();
}
}