Прежде всего этот код типа должен быть в сервлете, а не в JSP.
Декларация (<%!
):
<%!
javax.naming.InitialContext ic2 = new javax.naming.InitialContext();
%>
ic2
является переменной-членом.И причина, по которой вы не можете сделать ic2 = new javax.naming.InitialContext();
, заключается в том, что конструктор выдает javax.naming.NamingException
.
Представьте себе что-то следующее:
public class JspServlet {
//there is no way to handle that exception here
javax.naming.InitialContext ic2 = new javax.naming.InitialContext();
//...
Scriptlet (<%
):
<%
javax.naming.InitialContext ic = new javax.naming.InitialContext();
%>
И причина того, что это можно сделать там (внутри скрипта), заключается в том, что все в скрипте идет внутри блока try
сгенерированного метода сервиса JSP.
Представьте себе следующее:
public class JspServlet {
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
try {
javax.naming.InitialContext ic = new javax.naming.InitialContext();
} catch (Exception e) {
//...
}
Я думаю, что будет больше смысла, если вы узнаете больше о жизненном цикле JSP.