对tomcat的源码做一些分析,今天我们就开始servlet中的请求分析。
form表单中的默认类型
一、在index.jsp中get请求:
<form action="ParameterServlet" method="get"> username: <input type="text" name="username"/><br> password: <input type="password" name="password"/><br> file:<input type="file" name="file"><br> <input type="submit" value="submit"> </form>
二、在ParameterServlet中的doGet方法中:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletInputStream inputStream = request.getInputStream(); System.out.println("queryUrl: " + request.getMethod() + ", data: " + request.getQueryString()); System.out.println("--------------------------------------------------------------------------"); int len; while((len = inputStream.read()) != -1) { System.out.print((char)len); } inputStream.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
get请求的结果:
queryUrl: GET, data: username=huhx&password=123456&file=efdjoue.png --------------------------------------------------------------------------
post请求结果:
queryUrl: POST, data: null -------------------------------------------------------------------------- username=huhx&password=123456&file=test.png
三、get和post请求的一些总结
getQueryString方法得到的url中的请求参数部分,而request.getInputStream读取的是请求体的内容。对于get请求来说,从请求流中读取的数据是为空的。
form表单中的multipart类型
修改form表单的enctype为:multipart/form-data
一、index.jsp如下:
<form action="ParameterServlet" method="get" enctype="multipart/form-data"> username: <input type="text" name="username"/><br> password: <input type="password" name="password"/><br> file:<input type="file" name="file"><br> <input type="submit" value="submit"> </form>
get请求的结果和浏览器的地址url:
queryUrl: GET, data: username=Linux&password=password&file=efdjoue.png --------------------------------------------------------------------------
post请求的结果:
queryUrl: POST, data: null -------------------------------------------------------------------------- -----------------------------178538991256 Content-Disposition: form-data; name="username" huhx -----------------------------178538991256 Content-Disposition: form-data; name="password" 123456 -----------------------------178538991256 Content-Disposition: form-data; name="file"; filename="efdjoue.png" Content-Type: image/png PNG ....后面是图片的乱码信息,这里省略....
二、在设置了multipart/form-data之后的请求中
- get请求可以使用request.getParameter("username")得到对应的值
- post请求使用request.getParameter("username")得到的是null,getParameter("file")也是null。