Я хотел бы использовать язык выражения JSP для оценки выражений JSP EL внутри сервлета. В идеале я хотел бы использовать тот же ExpressionFactory и контекст, который используется в JSP, чтобы получить доступ к обычным переменным ELSP, таким как $ {param.myParam} или $ {cookie.myCookie}.Как оценить выражение JSP EL внутри сервлета
До сих пор я придумал следующее:
package test;
import java.io.IOException;
import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.el.StandardELContext;
import javax.el.ValueExpression;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspApplicationContext;
import javax.servlet.jsp.JspFactory;
@WebServlet(name = "NewServlet", urlPatterns = {"/NewServlet"})
public class NewServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain;charset=UTF-8");
ServletContext svc = getServletContext();
JspFactory jspf = JspFactory.getDefaultFactory();
JspApplicationContext jspContext = jspf.getJspApplicationContext(svc);
ExpressionFactory expressionFactory = jspContext.getExpressionFactory();
ELContext context = new StandardELContext(expressionFactory);
ValueExpression expression = expressionFactory.createValueExpression(context, "hello ${param.x}", Object.class);
response.getWriter().println(expression.getValue(context));
}
}
который терпит неудачу с:
ELResolver cannot handle a null base Object with identifier 'param'
Проблема, кажется, заключается в нахождении правильного ELContext.
Спасибо, я даже не знал, существовал такой класс. Это, безусловно, на правильном пути, однако это не удается с: java.lang.NullPointerException в javax.servlet.jsp.el.ImplicitObjectELResolver $ ImplicitObjects.getImplicitObjects (ImplicitObjectELResolver.java:612) Некоторые больше магии, кажется, требуется чтобы ImplicitObjectELResolver получал доступ к неявным объектам. – Remi
Я адаптировал свой ответ –
Отлично, это работает, спасибо за волшебство! – Remi