Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定某个参数是否已;张贴「;或;geted";来自Java?_Java_Http_Post_Get - Fatal编程技术网

如何确定某个参数是否已;张贴「;或;geted";来自Java?

如何确定某个参数是否已;张贴「;或;geted";来自Java?,java,http,post,get,Java,Http,Post,Get,在ASP中,有request.form和request.queryString属性,但在Java中没有。我们似乎只有一个集合,可以通过request.getParameterMap,getParametersNames,getParameterValues等访问 有没有办法告诉我们哪些值已发布,哪些值已在URL中指定 附言: 我试图实现的是制作一个能够处理以下情况的页面 读取来自查询字符串(get)的变量 阅读一篇带有特定名称的文章(例如“xml”) 如果那篇文章不见了,请通读全文(用 re

在ASP中,有
request.form
request.queryString
属性,但在Java中没有。我们似乎只有一个集合,可以通过
request.getParameterMap
getParametersNames
getParameterValues
等访问

有没有办法告诉我们哪些值已发布,哪些值已在URL中指定


附言:

我试图实现的是制作一个能够处理以下情况的页面

  • 读取来自查询字符串(get)的变量
  • 阅读一篇带有特定名称的文章(例如“xml”)
  • 如果那篇文章不见了,请通读全文(用
    request.getReader()
我正在使用Tomcat6

根据我到目前为止看到的情况,如果我发出一个
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,可以通过调用doGetdoPost方法来区分

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;
}