【问题标题】:Can you render a file without a .jsp extension as a JSP?您可以将没有 .jsp 扩展名的文件呈现为 JSP 吗?
【发布时间】:2012-05-17 11:24:06
【问题描述】:

是否可以告诉标准 Java EE servlet 容器将文件解释为 JSP 并将其呈现为 JSP,即使它没有 .jsp 扩展名?

假设我的 WAR 根目录中有一个名为 foo.xyz 的文件。该文件包含一些 jstl 逻辑,正如您在 .jsp 文件中所期望的那样。如果我请求http://myserver/myapp/foo.xyz,我将看到该文件中的文字代码呈现为文本。有没有办法配置 Web 应用程序,使其使用 JSP 解释器呈现文件而不更改文件扩展名?

请不要问我为什么要这样做。约束很复杂。

【问题讨论】:

    标签: jsp jakarta-ee servlets web.xml


    【解决方案1】:

    您可以在web.xml 中添加以下配置,以使以.xyz 结尾的文件作为JSP 处理:

    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.xyz</url-pattern>
        </jsp-property-group>
    </jsp-config>
    

    此解决方案适用于 Tomcat 和 Websphere。并且可能与任何 JEE 兼容的服务器容器一起使用。

    【讨论】:

    • 不错。知道如何使用注释或其他机制而不是web.xml 文件来做到这一点吗?到目前为止,我已经能够使用新的 servlet 注释来定义和配置 servlet。
    • 回答我自己的问题,我已经通过 JSP 规范,web.xml 似乎是唯一可以向容器指示 JSP 配置的地方。
    【解决方案2】:

    将该 URL 模式上的 JSP servlet 映射添加到您的 Web 应用的 web.xml

    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.xyz</url-pattern>
    </servlet-mapping>
    

    请注意,这假定 servletcontainer 自己的 JSP servlet 使用 servlet 名称jsp 注册,这是 JSP servlet 的事实上的标准 servlet 名称。验证 servletcontainer 自己的 web.xml 中的 &lt;servlet&gt; 条目以确保。例如 Tomcat,即其安装文件夹中的 /conf/web.xml 文件。

    【讨论】:

    • 此解决方案适用于 Tomcat,但不适用于 Websphere。我认为这是一种 hack 而不是事实上的标准
    • @LaurentG:答案已经涵盖了这一点。只需使用与 Websphere 本身相同的 &lt;servlet-name&gt;
    • 由于我是用Tomcat开发并在Websphere上部署的,所以我认为我提出的最通用的解决方案更好(我不想管理两个web.xml)。但对于最常见的情况,您的解决方案也很有效。
    猜你喜欢
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    相关资源
    最近更新 更多