使用javax.servlet.RequestDispatcher.include()时如何将参数传递给.jsp文件?

时间:2012-04-13 07:23:21

标签: java google-app-engine servlets

我正在使用模型/视图/控制器样式来构建Web应用程序,方法是将传入的HttpRequest路由到用Java编写的Controller Servlet,然后在Servlet完成后,使用.jsp文件渲染View。 (这非常适合Rails风格。)

执行此操作需要在Controller Servlet末尾添加如下所示的行:

getServletContext().getRequestDispatcher("/Bar.jsp").include(req, res);

主要问题是我想将参数传递给Bar.jsp,就好像它是我正在调用的函数一样。如果这是不可能的,我最终会在Bar.jsp的顶部放置大量的Java来找出Bar.jsp需要渲染的所有东西,这是相当难看的。

其他Web框架提供了一种方法,因此似乎必须有一种方法来使用Servlet。特别是我在Java Google App Engine中工作。

3 个答案:

答案 0 :(得分:1)

你可以使用

request.setAttribute("attributeName",attributeValue);

在其他jsp文件中,你可以像这样使用方法getAttribute()

request.getAttributeNames();
request.getAttribute("attributeName");

答案 1 :(得分:1)

此页面说得很好,也解决了参数和属性之间的差异:http://www.xyzws.com/Servletfaq/what-is-the-difference-between-the-request-attribute-and-request-parameter/1

  

请求属性(更正确地称为"请求范围的变量")   是明确放置在请求上的任何类型的对象   对象通过调用setAttribute()方法。他们被收回   Java代码通过getAttribute()方法和JSP页面中的   表达语言参考。始终使用request.getAttribute()来   获取一个对象添加到服务器端的请求范围,即使用   了request.setAttribute()。

     

属性是对象,可以放在请求,会话或   上下文对象。因为它们可以是任何对象,而不仅仅是String,   他们更灵活。您还可以以编程方式设置属性   并在以后检索它们。这在MVC模式中非常有用。对于   例如,您希望从一个jsp / servlet中获取数据库中的值   在另一个jsp中显示它们。现在,您的结果集已填充数据   准备好在servlet中然后使用setAttribute方法并发送它   结果集到另一个jsp,可以通过使用它来提取   getAttribute方法。

     

一旦servlet获得请求,它就可以添加其他属性   将请求转发到另一个servlet进行处理。属性   允许servlet彼此通信。

答案 2 :(得分:0)

正如其中一条评论中所说,你不能将参数传递给不同的JSP(在同一个请求中),就好像它是一个函数一样。

您可以做的最好的事情是创建一个(或几个)java bean,用它的属性封装参数。然后,在调用JSP之前将这些bean添加为请求属性。在JSP中,您可以使用EL表达式(如${myBean.myParameter})引用这些bean持有的值,而无需JSP中的其他Java代码。这是java的常见MVC框架。

请注意,如果只需要访问触发该请求/响应处理的参数,您可以使用${param.myParam}等表达式访问它们。

修改

很抱歉之前没有添加任何链接。 EL表达式是......符号${}(或#{}之间包含的表达式 - 但是因为它们是不同类型的EL表达式。 El表达式允许JSP开发人员访问存储在请求,会话或应用程序上下文中的数据(其他框架可以向该基本集添加更多上下文),而无需Java代码。在编写JSP时,我们必须避免使用<% ... %>,只使用旨在将输出呈现给视图的代码而不是繁重的数据处理。请点击best practices链接获取更多相关背景信息。

主要是大型的EL表达组,我无法解释SO帖子中的所有内容,但我建议您关注this link

向请求或任何其他范围添加变量或对象(java bean)非常简单。要在请求中添加bean,请执行以下操作:request.setAttribute("myBeanName", myBean);。类似于其他情境的东西。 Java EE tutorial将比我更好地解释,之后你应该能够理解JavaEE特性。