【发布时间】:2010-03-01 13:26:23
【问题描述】:
我在调试 Java EE 方面没有经验(我是一个 javascript 专家),我需要查看哪些 HTTP POST 参数到达服务器端。我在表单指向其操作的 jsp 文件中放置了一个断点,现在我在调试变量窗口中找不到 POST 内容。
他们在哪里?如何在调试中查找 POST?
[我会使用wireshark,但它通过https]
【问题讨论】:
我在调试 Java EE 方面没有经验(我是一个 javascript 专家),我需要查看哪些 HTTP POST 参数到达服务器端。我在表单指向其操作的 jsp 文件中放置了一个断点,现在我在调试变量窗口中找不到 POST 内容。
他们在哪里?如何在调试中查找 POST?
[我会使用wireshark,但它通过https]
【问题讨论】:
在 jsp 中,您可以使用 request 对象并调用其方法 getParameterNames () 或 getParameter (String name)。也可以调用request.getMethod ()确保从POST请求中获取参数。
<%
if (request.getMethod().equals("POST")) {
for (String paramName : request.getParameterNames ()) {
String value = request.getParameter (paramName);
}
}
%>
【讨论】:
在断点中,只需检查JspContext 实例的HttpServletRequest 属性,然后检查其parameterMap 属性。
或者按照穷人的方式在 JSP 中打印它们:
<c:forEach items="${param}" var="p">
Param: ${p.key}=
<c:forEach items="${p.value}" var="v" varStatus="loop">
${v}${loop.last ? '<br>' : ','}
</c:forEach>
</c:forEach>
也就是说,您通常会在 servlet 类中对它们感兴趣,而不是在 JSP 中。这表明您正在使用 scriptlets 在 JSP 文件中执行一些业务逻辑。这被认为是不好的做法。不要这样做,在为时已晚之前将原始 Java 代码移动到真正的 Java 类中。仅使用 JSP 进行演示。您可以使用 JSTL 之类的标记库来控制页面流,并使用 EL 访问后端数据。
【讨论】:
在调试模式下:见 请求 -> 请求 -> coyoteRequest -> 参数 -> paramHashValues
【讨论】: