在ASP中,有request.form
和request.queryString
属性,但在Java中。我们似乎只有一个集合,可以通过request.getParamaterMap
,getParametersNames
,getParameterValues
等进行访问。
是否有某种方法可以判断哪些值已过帐以及哪些值已在网址中指定?
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
。
答案 0 :(得分:25)
HttpServletRequest.getMethod():
返回发出此请求的HTTP方法的名称,例如GET,POST或PUT。与CGI变量REQUEST_METHOD的值相同。
您需要做的就是:
boolean isPost = "POST".equals(request.getMethod());
另外,我真的很困惑为什么你不会简单地使用request.getParameter("somename")
来检索作为请求参数发送的值。这种方法returns the parameter regardless of whether the request was sent via a GET or a POST:
请求参数是随请求一起发送的额外信息。对于HTTP servlet,参数包含在查询字符串或发布的表单数据中。
比尝试自己解析getQueryString()
要简单得多。
答案 1 :(得分:5)
没有直接的方法。 非直接 - 检查.getQueryString()
答案 2 :(得分:2)
如果您正在编写servlet,则可以通过调用 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
}
答案 3 :(得分:1)
为什么不首先检查查询字符串参数,如果你看不到,请点击帖子,然后挖出表单变量?
答案 4 :(得分:0)
我知道它不能解决您的问题,但如果我没记错,在使用Struts时,如果您的变量是在查询字符串或帖子正文中发送的,则会填充ActionForm。
我找到了RequestUtils类的源代码,也许方法“populate”就是你需要的:
答案 5 :(得分:0)
我是在“过滤器”中完成此操作的,因此也许某天某人可以使用它。
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest sreq = (HttpServletRequest)servletRequest;
System.out.println(sreq.getMethod());
}
答案 6 :(得分:0)
您可以使用request.getMethod()获取任何方法。我正在为此使用HandlerInterceptor。
检查此代码:
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;
}