在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}
由于
答案 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不允许任何响应状态代码或标题更改。
答案 2 :(得分:0)
您可以使用request.getParameterMap()another question which can help you方法访问所有请求参数,这将返回所有参数(键值对)的映射,您可以迭代并设置该属性。
request.setAttribute("name", "John"+System.currentTimeMillis());
您在此处所做的事情确实添加了一个名为name的新属性(前提是另一个条目不存在,并且该键作为名称)。
include和forward的结果与
相同