我是 JSP 的新手。我有一个jsp页面,其中一个参数通过http post传递给这个jsp页面。如图所示,我可以在 firebug 中看到参数。
但是在我的页面中,当我尝试打印令牌变量时,该变量始终为空。我按如下方式打印变量:
<%
String token = request.getParameter("token");
%>
我究竟做错了什么?如何获取令牌参数?
该token
属性对我来说看起来像一个nonce
,并且某些安全过滤器可能正在从请求对象中删除该值。
您为打印该值所做的操作是绝对正确的。我不会寻求最佳实践,但它应该有效。
检查您的代码以获取安全过滤器,看看您是否可以找出值被删除/覆盖的位置。
看到你的 web.xml 之后。
该值使用 POST 传递给域。请求在内部被重定向到欢迎页面并且值丢失。如果您使用 GET 传递值,则该值将被保留。
你有两个选择:
我已经测试了两者,它工作得很好。
这里有一些检查。
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"/>
在检查了所有这些点之后。它会给你确切的错误。而且您将能够轻松修复它。
根据屏幕截图,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 页面根本不适合这项工作。
如您在图片中看到的,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>
首选的习惯用法是使用表单中的 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);
}
}
%>
jsp页面可以使用${param.token}打印请求参数
你可以像这样打印
${param.token}
这将打印值