2014-07-10 69 views
0

我给你一个例子,以了解我的意思。我有一个简单的网站,只有2页。主页面包含另一个页面(假设页面包含的是带有站点菜单的页面)。什么是正确的处理方式包括使用serlvet

我必须在该菜单中执行一些动态操作,所以我想通过使用一个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“主”页面?

谢谢

+0

使用ajax做这个东西。 –

+0

在学习java和jsp时,我必须用java学习! – MDP

+0

好吧,IMO,在JSP中使用的“正确的方式”包括添加页眉和页脚等重复的静态内容。如果你想重用“组件”(通常是表单),最好使用taglibs。 – Leo

回答

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) %> 

,您可以使用${foo}在你的jsp文件中。

这样你不仅限于service方法,并且可以传递任意对象。

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

0

我必须做一个项目,我需要做同样的事情!!这是我想出了什么: 你可以加载另一个jsp在你的main jsp里面的一个“iframe”。现在,当你点击菜单中的某些东西(如<a href="">/<a>的某些超链接)时,将该超链接的目标设置为该iframe。

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

为此,您可以只使用:

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

这里,“right_iframe”是一个将载入您的视图框架。 在Servlet内部,您可以使用RequestDispatcher或sendRedirect将请求转发到所需的JSP。

相关问题