什么是正确的处理方式包括使用servlet

时间:2014-07-10 12:51:07

标签: java jsp servlets jspinclude

我举个例子来说明我的意思。我有一个只有2页的简单网站。主页面包含另一个页面(假设包含的页面是包含站点菜单的页面)。

我必须在该菜单中进行一些动态操作,所以我想通过使用servlet来控制该菜单。

我在servlet中做了一些“东西”之后我想告诉servlet“将自己重定向”到jsp页面并打印,在那个页面上(主页包含),我从servlet传递的内容到jsp页面。

我无法使用此代码

request.setAttribute("var", var)
request.getRequestDispatcher(destinationPage).forward(request, response)

因为,当然,我的所有网站都会被重定向到“destinationPage”页面,而不仅仅是包含页面!

相反,在servlet中使用此代码是否正确?

request.setAttribute("var", var)
request.getRequestDispatcher(destinationPage).include(request, response);

我可以用上面的代码处理很多包含吗?

在jsp“主”页面中处理许多内容的正确方法是什么?

谢谢

2 个答案:

答案 0 :(得分:0)

我假设:

  • 你有JSP页面
  • 您想在其他页面中包含一个页面(比如菜单)
  • 您需要使用Java动态操作来控制包含的页面

您当然可以在菜单jsp中包含一个servlet,但该servlet代码不应该重定向。它只是设置请求属性并返回,让调用jsp执行该部分。

但恕我直言,你不应该使用servlet。如果它只需要初始请求和响应,则应使用可以访问请求和响应的过滤器(并且可以设置将在所有servlet和jsp中使用的请求属性)。在任何其他情况下,您可以访问实用程序类的静态方法,或使用ServletContextListener将实用程序对象放在servlet上下文属性中,并在任何jsp页面中使用它:

<% UtilityClass.putMenuElementsIntoRequest(...); %>

<% application.getAttribute("utilityObject").putMenuElementsIntoRequest(...); %>

甚至(说FooStringList<String>之一,...)

<% Foo foo = application.getAttribute("utilityObject").getFoo(...);
   pageContext.setAttribute("foo", foo) %>

您可以在jsp文件中使用${foo}

这样,您不仅可以使用service方法,还可以传递任意对象。

但是如果你真的要做真正的事情......使用像Apache Tiles这样的框架来管理你的控制器的布局,Struts或Spring MVC,并在WEB-INF下隐藏你的jsp视图......

答案 1 :(得分:0)

我必须做一个项目,我被要求做同样的事情!这就是我提出的: 您可以在“iframe”中的主jsp中加载另一个jsp。现在,只要您单击菜单中的某些内容(某些超链接,如<a href="">/<a>),就会将该超链接的目标设置为该iframe。

例如,您在菜单中有一个选项作为“编辑配置文件”,并且您想首先调用一个servlet“EditProfileServlet”,它将向您发送请求EditProfile.jsp,它将显示必要的内容。

为此你可以使用它:

<a href="EditProfileServlet" target="right_iframe">Edit Profile</a>

此处,“right_iframe”是将加载视图的框架。 在Servlet中,您可以使用RequestDispatcher或sendRedirect将请求转发到所需的JSP。