8

我是 JSP 的新手。我有一个jsp页面,其中一个参数通过http post传递给这个jsp页面。如图所示,我可以在 firebug 中看到参数。 在此处输入图像描述

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

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

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

4

7 回答 7

7

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

您为打印该值所做的操作是绝对正确的。我不会寻求最佳实践,但它应该有效。

检查您的代码以获取安全过滤器,看看您是否可以找出值被删除/覆盖的位置。

看到你的 web.xml 之后

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

你有两个选择:

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

我已经测试了两者,它工作得很好。

于 2013-03-25T09:51:55.027 回答
3

这里有一些检查。

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

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

2) JSP 上的控件名称为token。像。

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

3) 你得到的是提交按钮而不是按钮的意思。

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

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

于 2013-03-26T05:31:09.657 回答
2

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

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

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

另一种方法是根本不执行重定向,而只是转发。这是否是正确的方法取决于问题中没有详细说明的具体功能要求。要了解差异,请仔细阅读RequestDispatcher.forward() 与 HttpServletResponse.sendRedirect()以及我们的 servlets wiki 页面,以了解如何正确使用 servlet 来满足此类需求。JSP 页面根本不适合这项工作。

于 2013-03-25T13:19:09.230 回答
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>
于 2013-03-28T08:39:02.877 回答
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);
    }
}
%>
于 2013-03-22T13:11:44.117 回答
1

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

于 2013-03-22T15:37:24.090 回答
0

你可以像这样打印

${param.token}

这将打印值

于 2013-03-22T13:08:46.187 回答