8

我在 Eclipse (helios) + Glassfish v3 中创建了一个简单的“hello world”servlet。我正在使用 Glassfish 的 Eclipse 插件 WEB-INF/ 文件夹中似乎没有 web.xml 但有一个 sun-web.xml。这是我第一次使用 glassfish,但对缺少 web.xml 感到有点惊讶 - 所以这里有一些问题:

  1. 我在哪里检查 servlet 的 url 映射?在 Eclipse 中创建新的 Servlet 时,它要求我提供 URL 映射,但我无法在任何可以调整设置的 .xml 文件中找到它。
  2. 如果没有任何 web.xml,从头开始创建它很容易出错。你有什么建议?谷歌样品和玩?不应该是自动创建的吗?
  3. 有没有人遇到过这个?我尝试查找 web.xml 和 sun-web.xml 之间的区别,但结果并没有什么启发性。我不想为了配置目的而学习另一个 xml,而且那太特定于 glassfish。

我们必须配置 servlet 上下文、映射等,尤其是在开发/测试期间,但是 web.xml 的完全缺失让我很难过。

4

5 回答 5

12

Eclipse 允许您在为 Java EE 6 创建动态 Web 项目时不创建 web.xml 文件,因为 Java EE 6 规范(通常)和 Servlet 3.0 规范(特别是)试图淡化部署描述符。

您可以使用注释来提供已包含在 web.xml 文件中的所有数据。Servlet 3.0 注释的Javadoc相当迟钝。您应该通读jcp.org 站点上的 Servlet 3.0 规范以获得更多解释性文本。

要更改 Servlet 3.0 servlet 的 url 映射,首先要查看 servlet 的源代码。查找(并更改) urlPatterns 元素的值。

如果您尝试创建基于 Servlet 3.0 的 Web 应用程序,请尽量避免创建 web.xml 文件。

sun-web.xml/glassfish-web.xml 文件用于“完成”war 文件的描述,以便部署到 GlassFish 容器中。

关于 WebServlet 之类的注释的另一条注释......它们不会将带注释的类集成到类层次结构中,因此正确使用 @WebServlet 看起来像

@WebServlet(
    name = "MyServlet", 
    urlPatterns = {"/path_to_servlet"}
)
public class MyServlet extends HttpServlet {}
于 2011-02-24T07:30:34.250 回答
10

如果您发现确实需要一个web.xml文件,您可以在 Project Explorer 视图中右键单击部署描述符,并且应该有一个选项“生成部署描述符存根”。这将使用and元素web.xml为您创建一个。display-namewelcome-file-list

于 2012-05-25T15:28:10.163 回答
4

创建“新建 > 动态 Web 项目”时单击“完成”似乎是一个坏习惯 - 您应该继续单击“下一步”并转到最后一个选择“生成 web.xml 部署描述符”的窗口窗格 -似乎默认情况下未选中。

好吧,这说明我对创建网络应用程序有点生疏了。在这里,我认为这是一个玻璃鱼特定的问题。

于 2011-02-24T03:25:59.147 回答
3

由于 Glassfish 3.x 是完全认证的 Java EE 6 服务器,它支持 Servlets 3.0。从 Servlets 3.0 开始,可以通过注解指定 web.xml 设置。

例如

@WebServlet(
    name = "MyServlet", 
    urlPatterns = {"/path_to_servlet"}
)
public class MyServlet {}
于 2011-02-24T03:22:18.993 回答
0

为了补充 TMN 所说的,我注意到项目浏览器在我出于某种原因执行 SVN 更新之前不会显示部署描述符。如果您有这个问题,请尝试更新您的代码。我已经在 HEAD 修订版中,但由于某种原因,更新显示了这种观点。

于 2012-09-25T14:17:15.633 回答