当前位置:  开发笔记 > 编程语言 > 正文

将SiteMesh与RequestDispatcher的forward()一起使用

如何解决《将SiteMesh与RequestDispatcher的forward()一起使用》经验,为你挑选了1个好方法。

我正在尝试使用Tomcat 5作为我的容器将SiteMesh集成到遗留应用程序中.我有一个main.jsp我正在用一个简单的装饰器装饰.

decorators.xml,我刚刚定义了一个装饰器:


  
    /jsp/main.jsp
  

如果我手动去,这个装饰工作http://example.com/my-webapp/jsp/main.jsp.但是,有一些地方的servlet,而不是重定向到jsp,执行转发:

getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response);

这意味着URL保留在类似于http://example.com/my-webapp/servlet/MyServletjsp文件的东西上,因此没有被装饰,我认为因为它与模式不匹配decorators.xml.

我不能做,/*因为还有其他jsps不需要装饰layout-main.jsp.我不能做一个/servlet/MyServlet*因为有时MyServlet可能转发main.jsp,也许error.jsp在其他时间转发.

有没有办法解决这个问题,而无需对servlet如何工作进行广泛的更改?由于它是一个遗留的应用程序,我没有那么多的自由来改变事物,所以我希望有一些配置方面可以解决这个问题.

SiteMesh的文档真的不是很好.我一直在为分发附带的示例应用程序工作.我真的很喜欢SiteMesh,我希望能在这种情况下让它工作.



1> skaffman..:

我的理解是SiteMesh作为Servlet过滤器集成到应用程序中.默认情况下,仅针对原始传入请求(在您的情况下,对servlet的请求)调用servlet过滤器.后续转发或包含请求不会通过过滤器传递,因此不会通过sitemesh传递.

但是,您可以使用以下内容指示过滤器被调用:


    sitemesh
    MyServlet
    FORWARD

它指示容器仅对FORWARD请求进行操作.其他选项包括INCLUDE和REQUEST,你可以有几个元素.

因此,您可以选择更改过滤器配置以指定FORWARD,或更改过滤器映射以匹配servlet路径,而不是JSP路径.任何一个都应该工作.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有