在 ASP 中,有
request.form
和 request.queryString
属性,但在 Java 中。看起来我们只有一个集合,可以通过 request.getParamaterMap
、getParametersNames
、getParameterValues
等访问。
是否有某种方法可以判断哪些值已发布以及哪些值已在 URL 中指定?
PS:
我想要实现的是制作一个可以处理以下情况的页面
request.getReader()
)。我使用的是tomcat 6。
根据我到目前为止所看到的,如果我发出
request.getReader()
,发布的值将不再出现在 getParamater
集合中,但查询字符串参数仍然存在。
另一方面,如果我发出任何
getParameters
方法,getReader
返回空字符串。
看来鱼与熊掌不可兼得啊
所以,我想解决方案如下:
getReader
阅读正文。request.getParameter
还有更好的主意吗?
只是为了澄清事情。问题似乎是,使用
getParameter
,您可以获得发布的值以及通过 URL 传递的值,请考虑以下示例:
<%@page import="java.util.*"%>
<%
Integer i;
String name;
String [] values;
for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
name = (String) e.nextElement();
values = request.getParameterValues( name );
for ( i=0; i < values.length; i ++ ) {
out.println( name + ":" + values[i] + "<br/>" );
}
}
%>
<html>
<head><title>param test</title>
</head>
<body>
<form method="post" action="http://localhost:8080/jsp_debug/param_test.jsp?data=from_get">
<input type="text" name="data" value="from_post">
<input type="submit" value="ok">
</form>
</body>
</html>
这段代码的输出是
data:from_get
data:from_post
...
似乎为了找到哪个参数来自哪里,我必须检查
request.getQueryString
。
HttpServletRequest.getMethod():
返回发出此请求的 HTTP 方法的名称,例如 GET、POST 或 PUT。与 CGI 变量 REQUEST_METHOD 的值相同。
您需要做的就是:
boolean isPost = "POST".equals(request.getMethod());
我也很困惑为什么你不简单地使用
request.getParameter("somename")
来检索作为请求参数发送的值。无论请求是通过 GET 还是 POST 发送,此方法都会返回参数:
请求参数是随请求发送的额外信息。对于 HTTP Servlet,参数包含在查询字符串或发布的表单数据中。这比尝试自己解析
getQueryString()
要简单得多。
doGet 或 doPost 方法来进行区分。
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException{
//Set a variable or invoke the GET specific logic
handleRequest(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException{
//Set a variable or invoke the POST specific logic
handleRequest(request, response);
}
public void handleRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException{
//Do stuff with the request
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest sreq = (HttpServletRequest)servletRequest;
System.out.println(sreq.getMethod());
}
检查此代码:
public class LoggingMethodInterceptor implements HandlerInterceptor {
Logger log = LoggerFactory.getLogger(LoggingMethodInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
log.info("[START] [" + request.getMethod() + "] [" + request.getRequestURL() + "] StartTime: {} milliseconds",
System.currentTimeMillis());
return true;
}