【问题标题】:servlet-mapping attribute in web.xml for a project not residing on top-level in webappsweb.xml 中的 servlet-mapping 属性,用于不在 webapps 顶层的项目
【发布时间】:2012-03-28 20:07:14
【问题描述】:

我有以下设置。 itext 文件夹位于 webapps 的顶层:

├───itext
│   └───WEB-INF
│       ├───classes
│       │   └───com
│       │       └───imparator
│       │           └───ist
│       └───lib

在 web-inf 文件夹中,我有一个 web.xml 文件,我在其中进行 servlet 映射:

<servlet>
    <servlet-name>Itext Servlet</servlet-name>
    <servlet-class>com.imparator.ist.ItextServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Itext Servlet</servlet-name>
    <url-pattern>/fincc-itext</url-pattern>
</servlet-mapping>

现在,当我希望这个 servlet 提供某些东西时,这里是我的 action 属性,格式如下:

<form method="POST" action="/itext/fincc-itext">

================================================ ==========================================

现在,假设 itext 文件夹不在 webapps 的顶级文件夹中,而是在下面几个级别:

├───level1
│   └───level2
│       └───itext
│           └───WEB-INF
│               ├───classes
│               │   └───com
│               │       └───imparator
│               │           └───ist
│               └───lib

如何更新 servlet 映射和操作属性值以对应此目录结构?

【问题讨论】:

  • 请注意,URL 中的上下文路径不一定是部署时主 webapp 文件夹的文件夹名称。它可以在服务器配置中配置。您应该始终喜欢通过 HttpServletRequest#getContextPath()${pageContext.request.contextPath} 动态指定它,而不是在 HTML/JSP 中硬编码它。另见stackoverflow.com/questions/4764405/…

标签: java web-applications servlets


【解决方案1】:

除非上下文发生变化,否则这些不会改变。上下文是 itext,因为那是您 WEB-INF 所在的位置。

【讨论】:

  • 是什么意思?我仍然向 /itext/fincc-itext 发送请求?
  • 这样请求被发送到localhost:8080/itext/fincc-itext 这实际上不是servlet的位置... level1 和 level2 需要包含在路径中吗?是/否?
  • 这确实不会改变。除此之外,建议的文件夹结构不符合 servlet 规范,servletcontainer 将无法成功部署 webapp。
  • BalusC - 为什么它违反了 servlet 规范?它必须在 webapps 的根文件夹中吗?
  • 为什么不违反规范?当最终用户以不同的方式部署它时,为什么开发人员需要担心在他们的代码中正确设置路径以避免灾难?这正是 servlet 规范中详细指定正确文件夹结构的原因。所以当你作为开发者打算偏离标准时,每个人都可以简单地说你做错了,没有任何借口:)
【解决方案2】:

网络应用程序的设置必须是:

webapp
    -somefolders (you can put text, js, css, image files here)
    - WEB-INF
        - classes
        - lib (contains jars)
        - web.xml
        - xml or configuration files
    - META-INF (if needed)

这是标准,你必须遵守。如果要更改 servlet 路径,请在 web.xml 中进行更改。在您的情况下:

+---itext (web app name)
¦   +---somefolders (you can put text, js, css, image files here)
¦   ¦
¦   +---META-INF (if needed)
¦   ¦
¦   +---WEB-INF
¦       +---classes
¦       ¦   +---com
¦       ¦       +---imparator
¦       ¦           +---ist
¦       +---lib
¦   ¦
¦   +---web.xml
¦   ¦   
¦   +---xml or configuration files

您仍然需要保留您的应用程序结构并修改 web.xml 中的 servlet 路径:

<servlet-mapping>
    <servlet-name>Itext Servlet</servlet-name>
    <url-pattern>/itext/fincc-itext</url-pattern>
</servlet-mapping>

【讨论】:

  • 那个特定的 webapp 必须在 webapps 文件夹的正下方,对吧?
猜你喜欢
  • 2012-08-22
  • 2012-09-18
  • 1970-01-01
  • 2011-03-16
  • 2011-08-25
  • 2012-06-07
  • 2017-08-28
  • 2014-05-24
  • 1970-01-01
相关资源
最近更新 更多