Я подозреваю, что это связано с тем, что сама пользовательская функция не определяется в основном выполнении служебного вызова JSP, а определяется как отдельный метод в сгенерированном классе JSP. Таким образом, переменная request
невидима для нее неявно.
Чтобы уточнить, если вы взглянули на исходный код Java, который генерирует JSP-компилятор (который зависит от сервера приложений), вы увидите, как он зависает вместе.
Я думаю, вам придется объявить объект запроса в качестве параметра для вашей функции и передать его при вызове.
<%!
private String process(String age, BigDecimal amount, ServletRequest request) {
String url=request.getURL;
....
}
%>