Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在servlet中计算JSP EL表达式_Jsp_Servlets_El - Fatal编程技术网

如何在servlet中计算JSP EL表达式

如何在servlet中计算JSP EL表达式,jsp,servlets,el,Jsp,Servlets,El,我想利用JSP表达式语言来计算servlet中的JSP EL表达式。 理想情况下,我希望使用JSP中使用的完全相同的ExpressionFactory和上下文,以便访问常见的JSP EL变量,如${param.myParam}或${cookie.mycokie} 到目前为止,我得出了以下结论: package test; import java.io.IOException; import javax.el.ELContext; import javax.el.ExpressionFactor

我想利用JSP表达式语言来计算servlet中的JSP EL表达式。 理想情况下,我希望使用JSP中使用的完全相同的ExpressionFactory和上下文,以便访问常见的JSP EL变量,如${param.myParam}或${cookie.mycokie}

到目前为止,我得出了以下结论:

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。

难道不需要向上下文中添加隐式对象解析器吗

StandardELContext context = new StandardELContext(expressionFactory);
context.addELResolver(new javax.servlet.jsp.el.ImplicitObjectELResolver());
更新

我添加了以下内容以使其工作,您可能需要更改一些参数

context.putContext(JspContext.class, jspf.getPageContext(this /*the current servlet*/, request, response, "/error", false, 8192, false));

谢谢,我甚至不知道有这样一个班。这当然是正确的,但是它失败了:javax.servlet.jsp.el.ImplicitObjectELResolver$ImplicitObjects.GetImplicitObjectSimpliciToObjectElResolver.java:612为了让ImplicitObjectELResolver能够访问隐式对象,似乎还需要一些魔法。