等价于Spring Boot MVC的web.xml <jsp-config>?

时间:2019-05-19 17:23:45

标签: java spring spring-boot spring-mvc jsp

JSP规范允许我使用.html中的<jsp-config>部分将web.xml文件作为JSP服务(即,容器将它们作为JSP文件处理),例如:

<web-app …>
  <jsp-config>
    <jsp-property-group>
      <url-pattern>*.html</url-pattern>
    </jsp-property-group>
  </jsp-config>
</web-app>

但是,当我切换到运行带有嵌入式Tomcat的@SpringBootApplication时,它将完全绕过web.xml文件。 Spring Boot MVC中是否有等效设置可以按照标准web.xml设置JSP属性组的JSP配置,该配置将配置现有嵌入式Tomcat JSP servlet?

(我可能要配置的JSP设置的另一个示例是<trim-directive-whitespaces>。)

在将其标记为重复项之前,请仔细阅读。 我知道extensive answer by walkeros但是,该答案仅考虑添加 new JSP servlet。它没有解决向现有 JSP servlet添加新的JSP属性组的问题,并且根本没有提及<jsp-config>中的web.xml部分。

2 个答案:

答案 0 :(得分:0)

更新的答案:

spring-boot-starter-web不依赖于web.xml,因此您不能将两者结合使用。有一种将web.xmlSpring Boot结合使用的方式,即所谓的“传统”做事方式,以this sample project为例。似乎您只需要使用spring-boot-starter和一个jsp / web框架(示例项目中的Spring MVC),并使用web.xml进行servlet配置。

spring-boot-starter-web有关的原始答案(不适用于.html文件):

要配置Spring Boot查找视图文件的方式,请在application.properties中使用以下属性:

spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .html

要查看Spring Boot支持的所有属性,请参见this link。跳至SPRING MVC来查找与此案例相关的内容。

答案 1 :(得分:0)

您可能会找到一种使Spring Boot与XML配置一起使用的方法,但这不是应该的。 要将特殊的JSP配置应用于您的应用程序,您可以按照以下步骤进行操作:

  • 创建一个实现 JspConfigDescriptor 的JSP配置类,例如:
public class MyJspConfigDescriptor implements JspConfigDescriptor {

    private Collection<JspPropertyGroupDescriptor> jspPropertyGroups =
            new LinkedHashSet<JspPropertyGroupDescriptor>();

    private Collection<TaglibDescriptor> taglibs =
            new HashSet<TaglibDescriptor>();

    @Override
    public Collection<JspPropertyGroupDescriptor> getJspPropertyGroups() {
        JspPropertyGroup newPropertyGroup = new JspPropertyGroup();
        newPropertyGroup.addUrlPattern("*.html");
        // You can add more configurations as you wish!
        JspPropertyGroupDescriptorImpl jspDescriptor = new JspPropertyGroupDescriptorImpl(newPropertyGroup);
        jspPropertyGroups.add(jspDescriptor);
        return jspPropertyGroups;
    }

    @Override
    public Collection<TaglibDescriptor> getTaglibs() {
        return taglibs;
    }

}
  • 通知您的 SpringBootServletInitializer 有要添加的新配置,可以通过覆盖 onStartup 方法并将其添加到其中来实现:
@Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        servletContext.getJspConfigDescriptor().getJspPropertyGroups().addAll((new MyJspConfigDescriptor()).getJspPropertyGroups());
    }

我相信这会起作用,但是我并没有真正对其进行测试!