Mein Problem ist, dass ich eine Variable in einer try-Anweisung setzen muss, sonst bekomme ich einen Kompilierfehler.Wie zu vermeiden, Variable in einer try-Anweisung setzen
Später muss ich diese Variable verwenden, aber es ist jetzt außerhalb des Geltungsbereichs, oder so glaube ich. Ich initialisiere die Variable außerhalb der try-Anweisung und setze sie auf null, ich dachte, dass sie dann draußen zugänglich sein könnte, aber ich bekomme immer noch eine NullPointerException
.
Der Code ist unten, mit viel davon herausgenommen, um das Lesen zu erleichtern - ich weiß, es ist schlechter Code, aber ich bin neu Servlets und wollte nur sehen, dass es mit allen beweglichen Teilen läuft, was sie tun sollen .
Ich habe eine andere Klasse erstellt, die createDocs (...) aufruft und die erforderlichen Parameter übergibt, und es funktioniert gut. Das macht mich neugierig, warum, wenn ich rs.getString("name")
anrufe, bekomme ich die NullPointerException
, da dies genau das ist, was ich von der anderen Klasse mache (von einer Hauptmethode aus Bequemlichkeit) und es funktioniert wie erwartet.
Die betreffende Variable ist die ResultSet Variable "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();
}
}
Sie erkennen, dass der Code eine gespeicherte XSS-Sicherheitsanfälligkeit aufweist? –
Ich denke, das eigentliche Problem besteht darin, dass Sie nach dem Auslösen einer Ausnahme weitermachen, als ob nichts passieren würde.Wenn Sie eine Ausnahme auslösen oder einen Fehler zurückgeben, müssen Sie keine rs setzen. Hinweis: Wo die Stapelverfolgung läuft, wird der Benutzer sie nicht sehen. Es kann freundlicher sein, den Benutzer wissen zu lassen, dass ein Fehler aufgetreten ist. –