Java 可以从servlet访问原始servlet请求吗?

Java 可以从servlet访问原始servlet请求吗?,java,servlets,request,Java,Servlets,Request,这可能是个愚蠢的问题,但我想确定一下 当您有这样的简单html表单时: <form action='/requestlogger' method='post'> <input type='hidden' name='field1' value='fo' /> <input type='hidden' name='field2' value='bar'/> <input type='hidden' name='field3' v

这可能是个愚蠢的问题,但我想确定一下

当您有这样的简单html表单时:

  <form action='/requestlogger' method='post'>
    <input type='hidden' name='field1' value='fo' />
    <input type='hidden' name='field2' value='bar'/>
    <input type='hidden' name='field3' value='baz'/>
    <input type='submit'/>
  </form>
POST http://localhost:9090/requestlogger HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://localhost:9090/requestlogger/requestlogger.jsp
Accept-Language: pl-PL
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMDTDF; BRI/1; BRI/2; .NET4.0C)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:9090
Content-Length: 31
Connection: Keep-Alive
Pragma: no-cache
Cookie: JSESSIONID=69A1DD26A835FDBD8CAEA8BB3BEBF36B

field1=fo&field2=bar&field3=baz
我很好奇是否可以从servlet中捕获这些原始数据,所以我编写了测试方法:

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) {
    try {
        Writer out = resp.getWriter();
        BufferedReader br = new BufferedReader(req.getReader());
        String read = br.readLine();
        while(read != null) {
            out.write(read);
            read = br.readLine();
        }
        br.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
但我只得到:

field1=fo&field2=bar&field3=baz
当我想到这一点时,这正是我想得到的,因为webserver(tomcat)处理复杂的东西,我已经准备好使用HttpServletRequest,所有的头数据都可以通过API(req.getContentLength()、req.getCookies()、req.getHeaderNames()等)获得

所以我认为您不能从servlet获得“完整”原始请求数据的访问权限?或者我错过了什么


谢谢

您可能需要使用所有不同部分的方法来重建它。developerwjk很抱歉,我不明白您的意思,我的意思是您可能需要使用getMethod()、getHeaderNames()、getRequestURL()等来重建原始请求文本,因为它看起来没有其他方法。这正是我所怀疑的,因为WebServer解析了这个原始请求,servlet准备使用HttpServletRequest对象,但我很好奇是否有原始请求的副本可用。因此,没有理由存在此类功能。