Как использовать объект "запрос" внутри функции в jsp

    <%
    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
/*

Ответ 1

JSP проходит через JSP-компилятор, который преобразует JSP-страницу в сервлет, автогенерирует Java-код.

Директивы JSP инструктируют JSP-компилятор, куда поставить. Все, что находится внутри <% %> (называемое сценариями JSP), будет помещено внутри метода service() созданного сервлета. Все внутри <%! %> (называемое JSP-объявлениями) станет частью фактического класса сгенерированного сервлета, поэтому ваш getVal() станет методом экземпляра.

Стандартные экземпляры объектов requestsession и 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 и другие настраиваемые теги,