【问题标题】:Not able to access static fields in JSP using EL in Tomcat 8无法在 Tomcat 8 中使用 EL 访问 JSP 中的静态字段
【发布时间】:2015-05-12 10:06:28
【问题描述】:

我正在尝试使用 Tomcat 8 容器中的 EL 从我的 JSP 访问我的 java 文件中的静态字段,但出现错误(如下所示)。

Tomcat8 是否支持 EL 3.0?如果是,那我错过了什么?

AppConstants.java

package com.study.el;

public final class AppConstants {

    public static final String NAME = "abc";

    private AppConstants() {
    }
}

AppContextListener.java

package com.study.el;

@WebListener
public class AppContextListener implements ServletContextListener {

    private ServletContext appContext;

    @Override
    public void contextInitialized(ServletContextEvent event) {
        JspFactory.getDefaultFactory().getJspApplicationContext(event.getServletContext()).addELContextListener(new ELContextListener() {
            @Override
            public void contextCreated(ELContextEvent event) {
                event.getELContext().getImportHandler().importClass("com.study.el.AppConstants");
            }
        });
    }


    @Override
    public void contextDestroyed(ServletContextEvent contextEvent) {
        //nothing to implement
    }
}

index.jsp

<!DOCTYPE html>
<html>
    <head>
        <title>Start Page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h1>Hello World!</h1>
        <h1>Hello ${AppConstants.NAME}</h1>
    </body>
</html>

错误日志:

javax.el.ELException: The class [com.study.el.AppConstants] could not be imported as it could not be found
javax.el.ImportHandler.importClass(ImportHandler.java:114)

【问题讨论】:

  • 我认为问题出在私有构造函数上。
  • 我将构造函数更改为public 并重新运行程序,仍然得到相同的异常。
  • @NaMaN - 尝试将 jsp-api.jar 替换为 javax.servlet.jsp-api-2.3.2-b01.jar 并将其重命名为 jsp-api.jar 并将其放在 Tomcat8/lib 目录中。还通过将Hello ${AppConstants.NAME} 替换为Testing: ${Boolean.TRUE} 来更改JSP,但仍然无法正常工作

标签: java jsp tomcat servlets el


【解决方案1】:

但是如果你试图改变这个语句“private ServletContext appContext;”到“ public ServletContext appContext;”

【讨论】:

  • Nope :( 将“private ServletContext appContext;”更改为“public ServletContext appContext;”但它不起作用。
  • 将此添加到您的 jsp 文件中:
【解决方案2】:

现在您尝试导入您的课程:

<%@ page import=”your_package.your_class_name” %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 2011-09-17
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2016-01-05
    相关资源
    最近更新 更多