为什么tomcat将* .jspf片段包含为静态文本,而jetty动态处理它们?

时间:2016-02-05 23:28:33

标签: jsp tomcat servlet-container jsp-fragments

我正在使用jetty maven插件开发我的玩具项目并执行目标jetty:run。现在我决定检查它在tomcat上的工作原理。

我有两个jspf片段:header.jspffooter.jspfWEB-INF/jspf/内,包含所有jsp页面的公共代码。我包括这样的片段:

<jsp:include page="WEB-INF/jspf/header.jspf" flush="true">
    <jsp:param name="pageTitle" value="Customer registration"/>
</jsp:include>

Jetty像动态片段一样处理它们,而tomcat将它们作为静态文本处理,这就是我能看到的原因:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

在浏览器的网页开头。通过将* .jspf重命名为* .jsp,可以轻松解决tomcat的问题。问题是:为什么不同的servlet容器的行为不同?我在tomcat 8/9和jetty 9.3.7上进行了测试。

1 个答案:

答案 0 :(得分:1)

向mywebapp / WEB-INF / web.xml文件添加新的文件扩展名。为什么Tomcat没有做这个默认我不知道。默认值在conf / web.xml文件中,您也可以编辑它。另一个servlet引擎可能使用不同的servlet名称,因此这只是Tomcat解决方案。

 public class CustomHeaderTextView extends TextView {

    public CustomHeaderTextView(Context context) {
        super(context);
    }

    public CustomHeaderTextView(Context context, AttributeSet attrs)     {
        super(context, attrs);
    }

    public CustomHeaderTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}