【发布时间】:2014-10-26 22:00:58
【问题描述】:
在我的 doPost 方法的顶部,我获取了一些我之前使用基本形式在 JSP 中设置的参数:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String serverName = request.getParameter("serverName");
String destFileName = request.getParameter("destFileName");
String userName = request.getParameter("userName");
String Message= request.getParameter("Message");
在 doPost 方法的最后,我使用 setAttribute 将它们添加回请求对象:
request.setAttribute("userName ", userName );
request.setAttribute("destFileName", destFileName);
request.setAttribute("serverName", serverName);
request.setAttribute("Message", Message);
request.getRequestDispatcher(page).forward(request, response);
然后我再次通过 request.getParameter 在我的 JSP 中获取它们:
<% /** if the parameters are already in place, grab them **/
String destFileName = request.getParameter("destFileName");
String user = request.getParameter("user");
String serverName = request.getParameter("serverName");
String Message = request.getParameter("Message");
%>
这有效,除非我通过 doPost 方法重写该值。如果是这种情况,那么我必须在 JSP 中使用 request.getAttribute 来检索它,因为 request.getParameter 将检索在 doPost 方法顶部定义的值,忽略顶部和底端。
有人对此有解释吗?我一切正常,但我想了解为什么我花了几个小时沮丧地找出问题所在。
【问题讨论】:
-
setParameter()和setAttribute()中的键相同。不是吗? -
属性和参数是不同的东西,所以当你在你的jsp中使用getParameter时,你得到的是页面请求发送的原始参数。
-
不是同一个请求吗?如果是,那么您也可以在 servlet 和 jsp 中获取它。您是否在 servlet 中使用
forward()或include()来转发/包含 jsp? -
请注意,如果您执行重定向,参数和属性都会丢失。
-
BTW 脚本 已弃用。看看 JSTL 和表达式语言,EL 中经常用到属性。