Java Servlet-2.3 在 Websphere Liberty Profile 8.5.5.6 中不工作

Java Servlet-2.3 not working in Websphere Liberty Profile 8.5.5.6

我们在 IBM Websphere Liberty 配置文件服务器中有一个 Java Web 应用程序 运行。我们最近开发了一个 Java Servlet,它负责使用 Java 库生成 JFreeCharts。

代码在web.xml

<servlet>
    <servlet-name>GraphicServlet</servlet-name>
    <servlet-class>com.test.GraphicServlet</servlet-class>
    <load-on-startup>10</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>GraphicServlet</servlet-name>
    <url-pattern>*.img</url-pattern>
</servlet-mapping>

index.html 文件中的代码

<img src="summary/chart.img" height="100" width="100" />

GraphicsServlet.java

中的代码

此 Servlet 实现了 doGet 方法,方法中的业务逻辑使用 JFreeCharts 生成图表图像文件 (.png),此图像以流的形式作为响应返回。

申请流程:

访问应用程序时,默认显示index.html文件,该页面有一个部分需要显示JFreeChart生成的图表。

场景描述:

访问应用程序时未显示图像文件。使用浏览器的开发者工具,我发现当一个请求发送到 *.img Url 时会打印 404 错误。接下来,我试图找出该 Servlet 是否真的部署到服务器上或是否偶然遗漏在 .war 文件中,我检查了 websphere 中的部署文件夹并找到部署的 Servlet。接下来,我尝试检查 Servlet 是否已启动并且 运行。从一个新的浏览器,我发送了一个测试请求,如 http://localhost:9080/myapp/summary/chart.img,它在屏幕上返回了 404 错误。

我想知道为什么 servlet 没有启动。所以,我在我的 GraphicsServlet 中实现了 HttpServlet 的 init() 方法,并写了一个 print 语句。当应用程序完成加载时,我没有得到打印。最后,我尝试注释掉 doGet 方法的每一行,即便如此我还是收到了 屏幕上出现 404 错误。

问题描述:我想知道为什么GraphicsServlet起不来。请告诉我是否有任何技术可以知道GraphicServlet失败背后的原因。

更新 1: 我尝试删除 web.xml 中的配置,并使用 @WebServlet 注释对 GraphicServlet 进行注释。现在,我可以看到那些打印语句,现在可以确认 GraphicServlet 已启动,并且在使用注释时 运行。所以,我开始研究 web.xml DOCTYPE 标签。 Web 应用程序 DTD 的版本很旧。是2.3版本,我们安装的Java版本是1.8。任何人都可以让我知道 WebApp-2.3 有什么问题吗?

更新 2: 我从 GraphicServlet 中删除了 @WebServlet 注释,我再次尝试使用 xml 配置,并将 web.xml 文件中的 Web 应用程序版本从 2.3 更改为 3.1(也是 3.0)。 GraphicServlet 仍未启动并且 运行.

更新 3: 我注意到 Websphere server.xml 文件中使用了 javaee-7.0 功能。

感谢您的耐心等待。

也许您应该将 web.xml 中的 servlet 映射更改为如下所示:

/summary/*.img