如何将Servlet请求参数包含到新的JSP页面?

时间:2011-11-14 14:32:04

标签: java servlets

在Java Servlet中,如何在响应后包含原始参数?

Servlet
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String cmd = request.getParameter("cmd");
        System.out.println("service , cmd="+cmd);
        request.setAttribute("name", "John"+System.currentTimeMillis());
        RequestDispatcher rd = request.getRequestDispatcher("process.jsp");
        rd.include(request, response);
    }

JSP
main ${name}<br>
cmd ${cmd}
  1. 如果我想将所有参数(如“cmd”)包含在新的jsp页面中,该怎么做?
  2. 基于No.1,如果我想在新的jsp页面中添加NEW属性,比如“name”,该怎么做?
  3. 在上述代码中,使用include或forward,结果相同。为什么?
  4. 由于

3 个答案:

答案 0 :(得分:3)

  

如果我想将所有参数(如“cmd”)包含到新的jsp页面中,该怎么做?

所有请求参数均由${param}地图提供给EL。

${param.cmd}

您无需在servlet中准备任何内容。


  

基于No.1,如果我想在新的jsp页面中添加NEW属性,比如“name”,该怎么做?

您已经通过request.setAttribute("name", name)${name}完成了此操作。


  

在上述代码中,使用include或forward,结果相同。为什么?

不完全是。如果您使用include(),则委托人将无法控制响应标头。在这种情况下,您应该使用forward()。另请参阅javadoc。只有在想要在事前和事后附加内容而不是完全委派请求/响应时,才应使用include()

另见:

答案 1 :(得分:1)

这是相同的请求,你根本不需要做任何事情。

转发意味着您无法提交任何响应(无输出到客户端)。 Include不允许任何响应状态代码或标题更改。

See the docs for forward/include

答案 2 :(得分:0)

您可以使用request.getParameterMap()another question which can help you方法访问所有请求参数,这将返回所有参数(键值对)的映射,您可以迭代并设置该属性。

request.setAttribute("name", "John"+System.currentTimeMillis());

您在此处所做的事情确实添加了一个名为name的新属性(前提是另一个条目不存在,并且该键作为名称)。

include和forward的结果与

相同
  • 您没有在回复中添加任何特定内容
  • 转发请求时,您转发控件以处理对另一个组件的响应(在您的情况下为process.jsp) 当您在请求中包含jsp时,您正在执行包含的组件,并且可以选择向流添加额外的内容(您不会这样做)。 这就是为什么这两个动作都会显示相同的结果。