<%
String fname=request.getParameter("fname");
String username=getVal("lname");
%>
<%!
private String getVal(String param){
return request.getParameter("fname");
}
%>
/*
--err
org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP
PWC6197: An error occurred at line: 5 in the jsp file: /register.jsp
PWC6199: Generated servlet error:
string:///register_jsp.java:12: cannot find symbol
symbol : variable request
location: class org.apache.jsp.register_jsp
/*
Как использовать объект "запрос" внутри функции в jsp
Ответ 1
JSP проходит через JSP-компилятор, который преобразует JSP-страницу в сервлет, автогенерирует Java-код.
Директивы JSP инструктируют JSP-компилятор, куда поставить. Все, что находится внутри <% %>
(называемое сценариями JSP), будет помещено внутри метода service()
созданного сервлета. Все внутри <%! %>
(называемое JSP-объявлениями) станет частью фактического класса сгенерированного сервлета, поэтому ваш getVal() станет методом экземпляра.
Стандартные экземпляры объектов request
(и session
и pageContext
и т.д.) определены внутри метода service()
, поэтому они фактически доступны ТОЛЬКО внутри секций сценария JSP.
Если вы используете Tomcat, например, вы можете посмотреть фактический код Java для ваших JSP-страниц, если вы заглянете в каталог "work" в установке Tomcat. Может быть интересно, если не получить лучшую картину о том, что происходит "под капотом".
Ответ 2
Запросдоступен внутри выражений сценария, потому что это аргумент метода, в котором эти выражения оцениваются (_jspService
). Но если вы хотите, чтобы он был доступен в ваших собственных методах, вы должны объявить его как аргумент:
<%
String fname = request.getParameter("fname");
String username = getVal("lname", request);
%>
<%!
private String getVal(String param, HttpServletRequest request) {
return request.getParameter("fname");
}
%>
Обратите внимание, что вы не должны использовать сценарии и получать параметры запроса в JSP. JSP следует использовать для создания разметки. Сделайте свою обработку сервлетом/действием, подготовьте данные, которые будут отображаться JSP, создав и запустив beans в области запроса, а затем отправьте в JSP, который должен использовать исключительно JSP EL, JSTL и другие настраиваемые теги,