在tomcat中部署java web应用程序的JSP问题

发布于 2024-09-06 04:34:26 字数 395 浏览 2 评论 0原文

我正在学习 ANT,并尝试在 tomcat 6.0.20 服务器中部署一个 Web 应用程序。 我构建了测试应用程序,并使用 manager ant 任务部署它,一切顺利。我加载一个 HTML 页面并且它可以工作...当我尝试查看 JSP tomcat 时,给我一个 JasperException,这是由自动生成的 Servlet 中的 NullPointerException 引起的。 JSP几乎是一个带有jsp扩展名的HTML文件。当 _jspInit 方法尝试运行以下命令时,会抛出异常: _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); 有人可以帮助我吗?谢谢!

I'm learning ANT and I'm trying to deploy a web application in tomcat 6.0.20 server.
I build the test application and I deploy it with the manager ant tasks and everything goes right. I load a HTML page and it works... When I try to view a JSP tomcat give me a JasperException, coused by a NullPointerException in the auto-generated Servlet. The JSP is almost an HTML file with jsp extension. The Exception is throwed in the _jspInit method when it tries to run the following:
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
somebody can help me? thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉梦枕江山 2024-09-13 04:34:26

可能您在 /WEB-INF/lib 中有 jsp-api-*.jar。将其删除。

编辑:解释

JSP API包含一个抽象类JspFactory。它有一个static 字段来存储特定于服务器的JspFactory 实现。因此,Tomcat 设置该字段的值,JSP 页面初始化代码读取该值以获得 JspFactory 实现。在您的情况下,您有两个不同的 JspFactory 类 - 一个由服务器类加载器从服务器 jar 加载,另一个由应用程序类加载器从 /WEB-INF/lib 加载。由于不同的类加载器加载的类是不同的类,它们的static字段值不同,因此JSP代码(_jspxFactory)获取到的JspFactory为<代码>空。

这说明了使用静态字段可能导致的问题之一。

Probably you have jsp-api-*.jar in /WEB-INF/lib. Remove it.

EDIT: Explanation

JSP API contains an abstract class JspFactory. It has a static field to store a server-specific JspFactory implementation. So, Tomcat sets a value of this field and JSP page initialization code reads it to obtain a JspFactory implementation. In your case you have two different JspFactory classes - one loaded by server classloader from server jars and another loaded by application classloader from /WEB-INF/lib. Because classes loaded by different classloaders are different classes, they have different static field values, therefore JspFactory obtained by the JSP code (_jspxFactory) is null.

This illustrates one of the possible problems caused by use of static fields.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文