2012-04-13 43 views
0

我正在使用建模Web应用程序的模型/视图/控制器风格,将传入的HttpRequest路由到以Java编写的控制器Servlet,然后当Servlet完成后,让它使用.jsp文件渲染回View。 (这是非常Rails的风格。)如何在使用javax.servlet.RequestDispatcher.include()时将参数传递给.jsp文件?

这样做需要在控制器Servlet结束这样一行:

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

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

其他web框架提供了一种方法来实现这一点,所以似乎必须有一种方法来处理Servlet。特别是我在Java Google App Engine中工作。

+0

您不能将JSP页面作为函数调用,因为初始化和实例化的方式由Servlet Container完成。你可以做的是包含从JSP生成的响应,但不能作为一种方法。如果您在JSP中调用JSP以外的成员参考创建,那么我没有看到任何挑战。 – Phani 2012-04-13 07:30:03

+0

您的回复对我来说没有任何意义。我希望.jsp文件以某种方式访问​​Servlet创建的一些Java对象。 – Daniel 2012-04-13 07:41:23

+0

您可以像Alonso Dominguez建议的那样使用POJO,创建公共bean对象并将其作为参数传递。 – Phani 2012-04-13 07:44:28

回答

1

可以使用

request.setAttribute("attributeName",attributeValue); 

和其他JSP文件,您可以使用方法getAttribute()这样

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

谢谢,现在已经很清楚并且重要。 – Daniel 2012-04-13 08:22:26

0

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

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

请注意,如果只是需要访问触发该请求/响应处理的参数,则可以使用像${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特性。

+0

你能链接到一些文档吗?如何“将这些bean添加为请求属性”?什么是EL表达式,我可以在.jsp中的<% %>(Java)内或仅在<% %>(在HTML中说)内引用它? – Daniel 2012-04-13 07:45:39

+0

好的,编辑我的答案,希望这个新的信息可以帮助你。 – 2012-04-13 07:56:35

1

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

请求属性(更正确地称为“request-sc oped variables“) 是通过调用setAttribute()方法显式放置在请求 对象上的任何类型的对象。它们通过getAttribute()方法在 Java代码中检索,在带有 表达式语言参考的JSP页面中检索。总是使用request.getAttribute()到 获取在服务器端添加到请求范围的对象,即使用 request.setAttribute()。

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

一旦servlet获得请求,它可以添加其他属性,然后 将请求转发给另一个servlet进行处理。属性 允许servlet相互通信。

相关问题