Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 在SpringMVC3中截取视图/响应_Java_Spring_Spring Mvc - Fatal编程技术网

Java 在SpringMVC3中截取视图/响应

Java 在SpringMVC3中截取视图/响应,java,spring,spring-mvc,Java,Spring,Spring Mvc,我是SpringMVC3的新手,我了解基本概念。我能够做一些简单的事情,比如创建控制器、服务和视图。然而,我还没有进入更先进的领域。因此,如果这个问题看起来愚蠢(或不可能),我道歉 我想知道是否有办法截取视图和/或响应,并在将其发送到客户端之前对其进行修改?我想这就是Spring执行数据绑定以形成到客户端的元素的方式。我想做的是检查域类中元素的注释,并根据这些注释修改视图。这将涉及向响应中注入新代码(HTML或Javascript) 更新 当我进一步思考这个问题时,我意识到最终的呈现是由JSP完

我是SpringMVC3的新手,我了解基本概念。我能够做一些简单的事情,比如创建控制器、服务和视图。然而,我还没有进入更先进的领域。因此,如果这个问题看起来愚蠢(或不可能),我道歉

我想知道是否有办法截取视图和/或响应,并在将其发送到客户端之前对其进行修改?我想这就是Spring执行数据绑定以形成到客户端的元素的方式。我想做的是检查域类中元素的注释,并根据这些注释修改视图。这将涉及向响应中注入新代码(HTML或Javascript)

更新

当我进一步思考这个问题时,我意识到最终的呈现是由JSP完成的。所以我想问题是,是否有办法在模型移动到页面之前拦截它,并找出数据绑定到的bean上的注释


有没有办法做到这一点?

是的,实际上有很多方法:

  • spring mvc拦截器(在中搜索)-您可以定义
    预处理
    /
    后处理
    方法,并将拦截器应用于多个控制器
  • -定义在给定控制器的方法之前/之后执行的方面
  • servlet过滤器——这是最不可取的选项,因为它没有与spring集成——您不能注入依赖项

您可能正在寻找的类是
org.springframework.web.servlet.HandlerInterceptor
您可以在该接口上实现postHandle方法,并且正如签名所暗示的那样,可以访问请求和响应,以及您的控制器创建的模型对象的映射。(还有控制器本身,
对象处理程序
参数就是这样的。)

您可以通过将它们添加到DispatcherServlet中的处理程序映射来“打开它们”

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="interceptors">
        <list>
            <bean class="a.package.MyHandlerInterceptor"/>
        </list>
    </property>
</bean>

顺便说一句,绑定实际上是在定位控制器方法并调用它们的HandlerAdapter内部完成的,它不是拦截器

编辑: 要回答您的编辑,是的,在控制器完成之后,但在进入JSP呈现之前,您有机会获取模型对象并进一步使用它。因此,您可以将myCustomScript添加到
ModelMap
中,并在jsp的
中抛出
${myCustomScript}
,从
ModelMap
中获取一个备份对象并检查它,等等