【问题标题】:How to serve the external jsp, not in WEB-INF/views, in Spring Boot?如何在 Spring Boot 中为外部 jsp 提供服务,而不是在 WEB-INF/views 中?
【发布时间】:2017-09-20 23:57:40
【问题描述】:

在origin老系统中,WEB-INF/views中有一个动态生成的JSP文件,在spring-mvc.xml中有如下配置。

<mvc:view-controller path="/downloadAppPage" view-name="downloadAppPage" />
<!-- mvc view -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:prefix="/WEB-INF/views/" p:suffix=".jsp" p:contentType="text/html; charset=utf-8" />

但是现在,我通过 Spring Boot 加载和嵌入式 tomcat 启动(jar -jar *.war)更改了原始系统。并且不再访问downloadAppPage。

那么是否可以配置或编码应用程序以在 Spring Boot 上下文路径之外提供外部 JSP 文件?

谢谢, 詹姆斯。

【问题讨论】:

  • 你的意思是 /WEB-INF/views 路径里面的 downloadAppPage 吗?
  • 如果你迁移到 spring-boot 为什么不在视图侧使用 thymeleaf?会更容易和更一致
  • @BhushanUniyal,原来的downloadAppPage在/WEB-INF/views,是动态生成的。目前胖罐子没有这样的路径。
  • @cralfaro 这是一个遗留项目,但我可以试试 thymeleaf。
  • @James.Y 我只是告诉你,因为它很容易迁移,而且速度很快,你也将拥有一个更加一致和稳定的项目

标签: spring jsp spring-mvc spring-boot


【解决方案1】:

您可以将视图解析器类型的其他 bean 添加到配置中,添加您的外部文件夹。它们将按照您将它们放入配置的顺序进行处理。您也可以编写自己的视图解析器。

public class MyViewResolver extends InternalResourceViewResolver {
@Override
protected AbstractUrlBasedView buildView(String viewName) throws Exception {
    HttpServletRequest request=((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
    String viewFile =request.getRealPath(this.getPrefix()+viewName+this.getSuffix());
    File reqFile=new File(viewFile);
    System.out.println(reqFile.getAbsolutePath()+":exists:"+reqFile.exists());
    if(!reqFile.exists()){
        viewName="default";
    }
    InternalResourceView view = (InternalResourceView) super.buildView(viewName);
    view.setAlwaysInclude(false);
    return view;
}
}
 // example extracted from https://javabeat.net/extending-viewresolver-and-chaining-viewresolvers-in-spring-mvc/

然后,您的配置文件将如下所示:

<mvc:view-controller path="/downloadAppPage" view-name="downloadAppPage" />
<!-- mvc view -->
<bean class="mypack.MyViewResolver">
        <property name="prefix" value="/your/new/path/" />
        <property name="suffix" value=".jsp" />
        <property name="order" value="0" />
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
        <property name="order" value="1" />
</bean>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-01
    • 2014-05-05
    • 2013-12-02
    • 2019-05-31
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多