如何在JSP中获取HTTP post参数

如何在JSP中获取HTTP post参数,jsp,http-post,Jsp,Http Post,我不熟悉JSP。我有一个jsp页面,其中一个参数通过HTTPPOST传递给这个jsp页面。我可以在firebug中看到参数,如图所示。 但是在我的页面中,当我试图打印令牌变量时,变量总是空的。我按如下方式打印变量: <% String token = request.getParameter("token"); %> 我做错了什么?如何获取令牌参数 您可以像 ${param.token} 这将打印值首选的习惯用法是使用表单中的servle

我不熟悉JSP。我有一个jsp页面,其中一个参数通过HTTPPOST传递给这个jsp页面。我可以在firebug中看到参数,如图所示。

但是在我的页面中,当我试图打印令牌变量时,变量总是空的。我按如下方式打印变量:

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

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

您可以像

${param.token}

这将打印值

首选的习惯用法是使用表单中的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>

${par.key}=${par.value[0]};
或在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);
    }
}
%>


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

在我看来,
token
属性看起来像一个
nonce
,一些安全过滤器可能正在从请求对象中删除该值

您所做的打印值是绝对正确的。我不追求最佳实践,但它应该会奏效

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

查看web.xml后

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

您有两个选择:

  • 创建一个直接url,并使用post将值传递给它。例如:url-yourdomain.com/welcome.jsp
  • 要求其他项目在url中传递参数(GET请求)

  • 我已经测试了这两个程序,效果很好。

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

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

    String token = request.getParameter("token");
    response.sendRedirect("/CR?token=" + URLEncoder.encode(token, "UTF-8"));
    
    另一种方法是根本不执行重定向,只执行转发。这是否是正确的方法取决于具体的功能需求,这在问题中没有详细阐述。要了解差异,请仔细阅读,当然还要学习如何正确使用servlet满足此类需求。JSP页面对于作业来说是错误的工具。

    以下是一些检查

    1) 在JSP页面中使用method=“post”创建表单

    <form name="form1" action="nextpage" method="post">
    
    
    
    2) JSP上控件的名称是标记。 喜欢

    
    
    3) 您得到的是提交按钮,而不是按钮的意思

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

    在检查了所有这些点之后。它会给你准确的错误。您将能够轻松地修复它。

    如图所示,http响应代码为

    这就是为什么您无法获取token参数,因为当浏览器访问jsp页面时,它来自重定向,而不是请求转发

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

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

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

    response.sendRedirect....
    

    或者直接更改表单提交到jsp页面

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

    如何打印值?这不会打印任何内容,它会按照它所说的方式打印值。我正在打印值。我尝试了这两种方法,但都是空的。谢谢。我已经打印了类似的令牌变量,但它总是空的。实际上,这是请求参数。您需要再次在Servlet中设置request,在request中设置该参数,这是什么意思。很抱歉,您从jsp发送了该请求。因此它在jsp中是可访问的。parameters.get()是否与request.getParameter不同?
    parameters.get()从映射参数中提取值,
    request.getParameter
    直接从请求对象中提取值。映射的优点是,如果您没有完全正确地获取名称,您可以在映射上进行迭代,查看传递给JSP的是什么,而不是您认为应该传递的是什么?将只有一个参数传递到我的页面。谢谢。是的,你可以。但这与说
    request.getParameter(“token”)
    完全相同,您说失败了。所以…要么是其他地方出了问题,要么参数名不完全是“token”。我确实回答了最初提出的问题。屏幕截图和附加信息随后出现(完全改变了问题)。嗨,这是我没有检查的一件事。首先谢谢你的回答。我刚检查了我的web.xml文件,但在我的web.xml文件上看不到任何过滤器。我可以检查其他过滤器吗?任何其他帮助都会很好。您需要提供更多关于您正在使用的框架的信息。您的web.xml应该提供一些提示。如果可以的话,你可以把它寄出去。你能告诉我你的电子邮件地址吗。由于一些安全问题,我更愿意将其发布在您的电子邮件上,而不是公开的。当前,在请求被重定向到welcome.jsp之后,我仍然可以在firebug中看到posted token变量。你还认为我的问题是因为重定向吗?如果是,第一种选择对我来说更可行。但是我怎样才能重定向帖子呢?感谢仔细查看屏幕截图,帖子得到了302的回复。另外,请检查您的加密类型不是multipart/data。
    request.getRequestDispacher("your jsp page path").forword(request, response)
    
    <form action="your jsp page link">
    ...
    </form>