如何确定某个参数是否已;张贴「;或;geted";来自Java?
在ASP中,有如何确定某个参数是否已;张贴「;或;geted";来自Java?,java,http,post,get,Java,Http,Post,Get,在ASP中,有request.form和request.queryString属性,但在Java中没有。我们似乎只有一个集合,可以通过request.getParameterMap,getParametersNames,getParameterValues等访问 有没有办法告诉我们哪些值已发布,哪些值已在URL中指定 附言: 我试图实现的是制作一个能够处理以下情况的页面 读取来自查询字符串(get)的变量 阅读一篇带有特定名称的文章(例如“xml”) 如果那篇文章不见了,请通读全文(用 re
request.form
和request.queryString
属性,但在Java中没有。我们似乎只有一个集合,可以通过request.getParameterMap
,getParametersNames
,getParameterValues
等访问
有没有办法告诉我们哪些值已发布,哪些值已在URL中指定
附言: 我试图实现的是制作一个能够处理以下情况的页面
- 读取来自查询字符串(get)的变量
- 阅读一篇带有特定名称的文章(例如“xml”)
- 如果那篇文章不见了,请通读全文(用
)request.getReader()
request.getReader()
,发布的值将不再出现在getParamater
集合中,但是querystring参数仍然存在
另一方面,如果我发出任何getParameters
方法,getReader
返回空字符串
看来我不能既有蛋糕又吃
因此,我想解决方案如下:
- 使用
阅读正文getReader
- 看看xml帖子是否存在(缺点是,我必须手动解析正文
- 如果是,则获取http消息体并去掉“xml=”部分
- 如果不是,那就去拿尸体
- 通过
request.getParameter
- PS:有人知道如何使用相同的方法解析主体吗 是否由HttpServlet使用
- PS:是一个解码ASP函数。我可以把它重写一下吗 爪哇
- PS:还有(现在没有机器测试)
只是澄清事情。问题似乎是用<代码> GETFARECTION/COD>你得到的值和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>
似乎为了找到哪个参数来自何处,我必须检查request.getQueryString
没有直接的方法。
非直接-check.getQueryString()为什么不先检查查询字符串参数,如果没有,请查看一篇文章,然后找出表单变量?如果您正在编写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
}
:
返回发出此请求的HTTP方法的名称,例如GET、POST或PUT。与CGI变量request\方法的值相同
您需要做的就是:
boolean isPost = "POST".equals(request.getMethod());
另外,我真的很困惑为什么不简单地使用request.getParameter(“somename”)
来检索作为请求参数发送的值。此方法:
请求参数是随请求发送的额外信息。对于HTTP servlet,参数包含在查询字符串或发布的表单数据中
这比尝试自己解析
getQueryString()
要简单得多。我知道这并不能解决您的问题,但是如果我没记错的话,在使用Struts时,如果您的变量在查询字符串或post正文中发送,ActionForm将被填充
我找到了RequestUtils类的源代码,也许“填充”方法就是您需要的:
我在我的过滤器里做了这个,所以也许有一天有人可以使用这个
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest sreq = (HttpServletRequest)servletRequest;
System.out.println(sreq.getMethod());
}
您可以使用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;
}
你使用的是什么服务器?sun HttpServer?你应该获取整个URL并反序列化参数。如果你想要的参数在那里,它就是get。如果它不在那里但存在,那么它就是POST参数。QueryString参数没有问题,我想我会一直使用它们…问题是一旦我发布getReader,GetParameters就不存在了er返回发布的值…我希望自己避免解析帖子…如果帖子是使用http主体而不是参数生成的,我无法使用request.getParameter(“somename”)获取它,我必须使用request.getReader()…在那之后,我就不能再使用request.getParameter了。另外,别忘了我可以有一个带有querystring信息的帖子(你只需要在表单标记的action参数中使用类似'xx.jsp?field1=value1,field2=value2'的内容),在这种情况下,request.getMethod将返回“post”,但我会有“post”和“geted”getParameter集合中的所有参数都混在一起…这就是问题所在…我认为您使用了不同或不正确的术语来描述您的问题。读取postdata或多部分数据与仅读取“参数”不同事实上,我对java非常陌生,可能会有点混淆……但我认为这与多部分内容无关(我的意思是,表单根本没有enctype属性)……我已经更新了问题以澄清问题……甚至更好:
HttpMethod.GET.matches(request.getMethod())
。相应地发布。您可以使用get info发布帖子,请参阅我对matt b的评论
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;
}