如何在JSP中获取HTTP post参数

时间:2013-03-22 12:48:07

标签: jsp http-post

我是JSP的新手。我有一个jsp页面,其中一个参数通过http post传递给这个jsp页面。我可以在图片中看到firebug中的参数。  enter image description here

但是在我的页面中,当我尝试打印令牌变量时,变量始终为null。我按如下方式打印变量:

     <%
        String token = request.getParameter("token");
     %>

我做错了什么?如何获取令牌参数?

7 个答案:

答案 0 :(得分:6)

token属性看起来像nonce,某些安全过滤器可能会从请求对象中删除该值。

您所做的打印值绝对正确。我不打算采用最佳实践,但它应该可行。

检查代码中的安全过滤器,看看是否可以找到删除/覆盖值的位置。

看到您的web.xml后

使用POST将值传递给域。请求在内部重定向到欢迎页面,并且值丢失。如果使用GET传递值,则将保留该值。

您有两种选择:

  1. 创建一个直接网址,然后使用帖子将值传递给它。例如:url - yourdomain.com/welcome.jsp。
  2. 要求其他项目在url(GET请求)中传递参数。
  3. 我已经对它们进行了测试,但它的工作正常。

答案 1 :(得分:3)

以下是一些检查。

1)JSP页面中带有method =“post”的表单。

<form name="form1" action="nextpage" method="post">

2)JSP上的控件名称是令牌。 等。

 <input type="text" name="token" value="chintan"/>

3)你得到提交按钮而不是按钮意味着。

<input type="submit" name="submit" value="submit"/>

检查完所有这些点后。它会给你准确的错误。而且你将能够轻松解决它。

答案 2 :(得分:2)

根据截图,POST请求导致HTTP 302 response,这意味着它已被重定向。重定向基本上指示客户端在给定的URL上触发全新的HTTP请求。这不会以某种方式神奇地接管先前请求中的所有请求参数。

您需要自行传递您希望保留在重定向请求中的请求参数以及重定向网址:

String token = request.getParameter("token");
response.sendRedirect("/CR?token=" + URLEncoder.encode(token, "UTF-8"));

另一种方法是根本不执行重定向,而只是前进。这是否正确的方法取决于具体的功能要求,这个问题在这个问题中没有详细说明。要了解这些差异,请仔细阅读RequestDispatcher.forward() vs HttpServletResponse.sendRedirect(),当然还要our servlets wiki page,以了解如何正确使用servlet来满足此类要求。 JSP页面对于这项工作来说简直就是错误的工具。

答案 3 :(得分:2)

如图所示,http响应代码为 302

这就是为什么你无法获得令牌参数的原因,因为当浏览器到达你的jsp页面时,它来自重定向,但不是请求转发。

也就是说,您的浏览请求您的jsp页面没有任何参数......

您可以检查您发布的操作是否为servlet,然后重定向到jsp页面????

检查您的操作代码并更改代码

response.sendRedirect....

request.getRequestDispacher("your jsp page path").forword(request, response)

或者只是将表单直接更改为jsp页面

<form action="your jsp page link">
...
</form>

答案 4 :(得分:1)

首选的习惯用法是使用表单中的servlet,而不是JSP。然后,servlet可以使用JSP作为视图。其中一个原因是避免做你看起来正在做的事情:在页面上放置java代码,并可能将表示与逻辑混合。

但是,如果您别无选择,我建议您使用JSTL:

<c:forEach var="par" items="${paramValues}">
    <c:if test="${fn:startsWith(par.key, 'token')}"> 
        ${par.key} = ${par.value[0]};
    </c:if>
</c:forEach>

或者在Java中:

<%@ page import = "java.util.Map" %>
<%
Map<String, String[]> parameters = request.getParameterMap();
for(String parameter : parameters.keySet()) {
    if(parameter.toLowerCase().startsWith("token")) {
        String[] values = parameters.get(parameter);
    }
}
%>

答案 5 :(得分:1)

您可以使用$ {param.token}在jsp页面中打印请求参数

答案 6 :(得分:0)

你可以像

一样打印
${param.token}

这将打印值