내 문제는 try 문에서 변수를 설정해야한다는 것입니다. 그렇지 않으면 컴파일 오류가 발생합니다.try 문에서 변수 설정을 피하는 방법
나중에이 변수를 사용해야하지만 현재 범위를 벗어났습니다. 또는 그렇게 믿습니다. try 문 외부에서 변수를 초기화하고 null로 설정하면 외부에서 액세스 할 수 있다고 생각했지만 여전히 NullPointerException
이 표시됩니다.
코드가 아래에 있습니다. 읽기 쉽도록 많은 코드가 포함되어 있습니다. 잘못된 코드 인 것을 알고 있지만, Servlets을 처음 접했고 모든 움직이는 부분이 실행되는 것을보고 싶었습니다. .
나는 createDocs (...)를 호출하고 필수 매개 변수를 전달하는 또 다른 클래스를 만들었고 올바르게 작동합니다. 그래서 그것은 제가 rs.getString("name")
이라고 부르면 NullPointerException
을 얻었습니다. 이것은 다른 클래스 (편의상 main 메소드에서 실행)에서했던 것과 정확히 같고 예상대로 작동합니다.
문제의 변수는 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();
}
}
코드에 저장된 XSS 취약점이있는 것으로 알고 있습니까? –
나는 실제 문제는 예외가 제기 된 후에도 아무 일도 일어나지 않는 것처럼 계속 진행된다고 생각합니다.예외를 던지거나 오류를 반환하면 rs를 설정할 필요가 없습니다. 참고 : 스택 트레이스는 어디로 이동합니까? 사용자는 스택 트레이스를 볼 수 없습니다. 사용자에게 오류가 발생했음을 알리는 것이 더 친숙 할 수 있습니다. –