【发布时间】: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