Java 如何将.jsp页眉和页脚添加到SpringMVCWeb应用程序中?

Java 如何将.jsp页眉和页脚添加到SpringMVCWeb应用程序中?,java,model-view-controller,jsp,web-applications,spring-mvc,Java,Model View Controller,Jsp,Web Applications,Spring Mvc,如何将.jsp页眉和页脚添加到SpringMVCWeb应用程序中 我知道有很多不同的答案,但我想知道(所有答案都是真的,但更重要的是)这样做的正确方法是什么?我只是在学习Spring,我有一个提示,答案在于HandlerInterceptor。现在,我可能只是这样做。jsp包含。即使有了这个include解决方案,您能详细说明我将在结构上放置页眉/页脚的位置吗?任何建议或指导都会很好。我会推荐第一个和第二个。我在研究时发现了您的问题:-)不确定我的解决方案是否是,或者是否有更好的方法,但它对我当

如何将.jsp页眉和页脚添加到SpringMVCWeb应用程序中


我知道有很多不同的答案,但我想知道(所有答案都是真的,但更重要的是)这样做的正确方法是什么?我只是在学习Spring,我有一个提示,答案在于HandlerInterceptor。现在,我可能只是这样做。jsp包含。即使有了这个include解决方案,您能详细说明我将在结构上放置页眉/页脚的位置吗?任何建议或指导都会很好。

我会推荐第一个和第二个。

我在研究时发现了您的问题:-)不确定我的解决方案是否是
,或者是否有更好的方法,但它对我当前的项目有效

myapp servlet.xml
中,您可以使用自己的实现扩展viewResolver viewClass:

myapp-servlet.xml 然后在控制器中,返回
simple\u partial
视图

App.java
它将被
template.jsp
包装并响应出来。

有没有不使用其他人代码的答案?现在我为页眉和页脚做一个简单的包含,然后这就是你的答案。你不需要这个网站上的任何东西。谢谢你,但我的问题远远超出了我现在的位置。对于阅读本文的其他人,我仍然非常感谢您提供的任何意见或详细说明。我建议您查看我提供的链接。即使你不想使用“其他人的代码”,你也可以洞察他们是如何看待它的。但是如果我们想给它添加一些例外呢?假设我想要一个没有页眉/页脚的login.jsp页面,我们如何才能达到这个目的?我认为还有另一个问题。如果我们希望通过ModelAndView传递带有某些动态内容的分部,它们将不会生效,即,在调用堆栈控制器>分部>ViewResolver中,模型内的数据将传递到ViewResolver并到达模板,而不是分部视图。我不知道我是否清楚,但我试过了。问得好。我写这篇文章已经有一段时间了,我记不清我到底做了什么。我想我在
JstlView
中使用了
rd.forward(requestToExpose,getRequestToExpose(request))
来转发到另一个资源。您还可以使用
prepareForRendering(getRequestToExpose(request),response)
获取请求调度器的路径。我相信一个
@ResponseBody
带注释的方法能够
返回新的ModelAndView(partial,model,modelObject)
正确地到达partial。我可能在我的
renderMergedOutputModel
中使用了
exposeModelAsRequestAttributes(model,requestToExpose)
,我将尝试查找一些代码,稍后编辑我的答案。这方面有更新吗?我也在同一个场景中
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  p:viewClass="com.my.app.view.JstlView"
  p:prefix="/WEB-INF/views/"
  p:suffix=".jsp"/>
package com.my.app.view;

import java.util.*;
import org.springframework.web.servlet.view.InternalResourceView;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class JstlView extends InternalResourceView {
    @Override
    protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String dispatcherPath = prepareForRendering(request, response);

        // set original view being asked for as a request parameter
        request.setAttribute("partial", dispatcherPath.substring(dispatcherPath.lastIndexOf("/") + 1);

        // force everything to be template.jsp
        RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/template.jsp");
        rd.include(request, response);
    }
}
<!doctype html>
<html lang="en">
<head></head>
<body>
    <header>
        <jsp:include page="header.jsp"/>
    </header>
    <jsp:include page="${partial}"/>
    <footer>
        <jsp:include page="footer.jsp"/>
    </footer>
</body>
</html>
<p>I'm a partial!</p>
package com.my.app.controller;

import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping(value="/")
public class App{
    @RequestMapping(method = RequestMethod.GET)
    public String index() {
        return "simple_partial";
    }
}