如何将.jsp页眉和页脚添加到Spring MVC Web应用程序中? - java

如何将.jsp页眉和页脚添加到Spring MVC Web应用程序中?

我知道有很多不同的答案,但我想知道(它们确实但更重要是)正确的方法是什么? 我正在学习Spring,我暗示答案在于HandlerInterceptor。就目前而言,我可能只是这样做。即使有了这个包含解决方案,您能否详细说明在结构上放置页眉/页脚的位置?任何建议或方向将是巨大的。

参考方案

我在研究时发现了您的问题:-)不确定我的解决方案是<good | bad | a hack | already exists>还是有更好的方法,但是它对我当前的项目有效。
myapp-servlet.xml中,您可以使用自己的实现扩展viewResolver viewClass:
myapp-servlet.xml

<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"/>

通过覆盖renderMergedOutputModel,您可以强制所有视图实际上是一个模板,您可以在其中定义全局布局,然后简单地对部分代码进行<jsp:include/>编码。
JstlView.java

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);
    }
}

如果您查看Spring的InternalResourceView.java,则在确定使用哪种视图时会更好地了解Spring在做什么。
template.jsp

<!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>

How to obtain request / session / servletcontext attribute in JSP using EL?在这里帮助我获取了属性值${partial}
simple_partial.jsp

<p>I'm a partial!</p>

然后在控制器中,返回simple_partial视图
App.java

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";
    }
}

它将被template.jsp包装并做出响应。

如何将.apk文件转换为Java - java

如何在Android中将.apk文件转换为Java。 参考方案 谷歌用于Android应用程序(APK)的扩展程序乍一看似乎有些复杂,但实际上并非如此。实际上,.apk就是伪装成.apk的.zip文件。这简直是​​愚蠢,但你明白了。本质上,如果要查看应用程序的内容,他们只需将application-name.apk的扩展名更改为application-nam…

如何将.py导入java - java

我想为使用Tomcat的Java Servlet制作书籍的Web应用程序。我想将一些代码(读取*.epub,*.pdf,*.doc,*.mobi和*.txt文件)从项目口径导入我的项目中(如果可能)。口径源:http://bazaar.launchpad.net/~kovid/calibre/trunk/files我想在我的项目中使用此链接的一些源。Appl…

Spring MVC Web应用程序检测暴力攻击的最佳方法? - java

Spring 3.0 MVC中是否有专门用于帮助检测Web应用程序的身份验证/登录页面上的蛮力攻击的功能? 参考方案 经过长期验证的实践是,如果身份验证失败,则会引入随机但相当大的延迟。这样,合法用户将立即登录,但攻击者每次尝试将花费500ms-1s,这使整个暴力概念不切实际(将永远存在)。合法用户偶尔失败的登录只会使他们稍有延迟,并且不会引起注意。如果需要…

Spring MVC:如何获取请求的处理程序方法 - java

我正在尝试根据Spring @RequestMapping注释方法上存在的注释实现一些逻辑。因此,我的方法中有一个HttpServletRequest实例,我想问一下spring“给我一个方法,该方法将被调用以处理此请求”,因此我可以使用反射API来询问是否存在我的注释,因此我可以更改处理。有什么简单的方法可以从Spring MVC获取此信息? java大神…

将JSON发布到Spring MVC Controller返回400错误请求 - java

我想发布JSON并让Jackson将其转换为POJO,但是现在我什至无法发布简单的String参数。我正在使用Jackson 2.3.2(jackson-core和jackson-databaind)我正在使用Spring 3.2.8.RELEASE(spring-context,spring-webmvc)我的控制器如下所示:@RequestMapping…