Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在jsp中调用Spring MVC控制器_Java_Spring_Jsp_Spring Mvc - Fatal编程技术网

Java 如何在jsp中调用Spring MVC控制器

Java 如何在jsp中调用Spring MVC控制器,java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,我想包括一个jsp页面作为示例 <ui:include src="/WEB-INF/jsp/header.jsp" /> 我的标题方法 public String header(Map<String, Object> model){ model.put("test", "test"); return "header"; } 公共字符串头(映射模型){ 模型放置(“测试”、“测试”); 返回“标题”; } 但是控制器没有被使用,并且${test}是空的

我想包括一个jsp页面作为示例

<ui:include src="/WEB-INF/jsp/header.jsp" />
我的标题方法

public String header(Map<String, Object> model){
    model.put("test", "test");
    return "header";
}
公共字符串头(映射模型){
模型放置(“测试”、“测试”);
返回“标题”;
}

但是控制器没有被使用,并且
${test}
是空的

我认为,如果您从MVC视图调用MVC控制器,您的应用程序将中断常见的MVC原则。您的代码将很难调试、测试,也很难被其他人理解

最好在一个控制器中为视图的所有部分(页面的主要部分、页眉和页脚)准备模型属性。传递给JSP视图的模型在包含的自定义JSP标记和JSP中可用

可以使用带注释的方法一次向几个控制器方法提供属性


您可以使用JSP页面代替JSP页面来定义页眉和页脚(至少我在应用程序中是这样做的)。

首先,JSP不应该直接“调用”任何控制器


其次,我看到您正在使用Spring框架,在Spring中,从任何控制器到JSP,只有一个模型对象被传递到JSP。因此,如果在标题中需要初始化另一个模型,则必须调用控制器的URL,而不是调用header.jsp。

答案已经解释了模型应该由控制器填充。。。如果在所有页面(例如页眉或页脚)中需要相同的模型变量,常用的方法是在单个HandlerInterceptor中丰富模型,而不是在每个控制器方法中。

Ok我可以在HandlerInterceptor中初始化变量。在拦截器方法中,我有3个对象(HttpServletRequest、HttpServletResponse和Object handler)。如何将数据从拦截器传输到控制器或je jsp页面?
Header
${test}
public String header(Map<String, Object> model){
    model.put("test", "test");
    return "header";
}