对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=&file=efdjoue.png
--------------------------------------------------------------------------

post请求结果:

queryUrl: POST, data: null
--------------------------------------------------------------------------
username=huhx&password=&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:

aaarticlea/png;base64,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" alt="" />

queryUrl: GET, data: username=Linux&password=password&file=efdjoue.png
--------------------------------------------------------------------------

post请求的结果:

queryUrl: POST, data: null
--------------------------------------------------------------------------
-----------------------------
Content-Disposition: form-data; name="username" huhx
-----------------------------
Content-Disposition: form-data; name="password" -----------------------------
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。

友情链接

web基础----->servlet中得到请求的数据的更多相关文章

  1. Java Web之Servlet中response、request乱码问题解决

    Java Web之Servlet中response.request乱码问题解决   一.request请求参数出现的乱码问题 get请求: get请求的参数是在url后面提交过来的,也就是在请求行中, ...

  2. jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法

    jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Objec ...

  3. Java Web基础 --- Servlet 综述(理论篇)

    摘要: Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.本文首先从请求/响应架构应用的大背景谈起 Servlet 的由来,明确 Ser ...

  4. 【Java框架型项目从入门到装逼】第五节 - 在Servlet中接收和返回数据

    在上一节的程序中,我们可以看到HttpServletRequest, HttpServletResponse这两个对象.可以说,这是JavaWeb中至关重要的两个对象.接下来,我们来做一个简短的说明: ...

  5. Servlet中接收和返回数据

    public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest re ...

  6. Servlet中的请求包含

    public class SrcIncludeServlet extends HttpServlet { public void doGet(HttpServletRequest request, H ...

  7. Servlet中的请求转发RequestDispatcher接口的forword与Include的区别

    RequestDispatcher接口中具有两个方法: forward() 与 include() 均 可完成请求 的转发.区别如下: forword(): 使用该方法,则当前 的 Servlet 中 ...

  8. 关于Node.js中HTTP请求返回数据需要JSON解析的问题

    在编写项目过程中,需要用到实时数据的推送需求, 所以首先想到了NodeJS的websocket模块 在网上找了一个聊天室的例子  然后将其改为自己需求的推送 其中遇到的问题 返回数据问题  :   由 ...

  9. springMVC中接收请求参数&&数据转发

    ### 1. 接收请求参数 #### 1.1. [不推荐] 通过HttpServletRequest获取请求参数 假设存在: <form action="handle_login.do ...

随机推荐

  1. Postgres数据库备份与还原命令

    备份 pg_dump.exe -c -b -E UTF8 -U postgres -h 127.0.0.1 -p 5432 -f "f:\testdb001.bak" testdb ...

  2. Apache HttpComponents 获取Cookie

    package org.apache.http.examples.client; import java.util.List; import org.apache.http.HttpEntity; i ...

  3. golang web开发获取get、post、cookie参数

    在成熟的语言java.python.php要获取这些参数应该来讲都非常简单,过较新的语言golang用获取这些个参数还是费了不少劲,特此记录一下. golang版本:1.3.1在贴代码之前如果能先理解 ...

  4. 使用平台调用(P/Invoke)

    使用平台调用 P/Invoke.它的全名叫平台调用(platform invoke).用于调用dll 中实现的非托管的单调(flat)编程接口.被称为使用C或C++ 调用约定(calling conv ...

  5. 防火墙导致MySQL无法访问的问题解决案例

    问题 数据库总是访问不了以致不得不反反复复的重启MySQL数据库. 但是重启的效果并不明显,重启10几分钟后问题依然出现.导致前端用户难以正常访问网站.另外他们还通过google,百度搜索,怀疑是数据 ...

  6. js学习笔记28----事件默认行为

    事件默认行为 : 当一个事件发生的时候浏览器自己会默认做的事情.   怎么阻止? 当前这个行为是什么事件触发的,然后在这个事件的处理函数中使用return false;   右键菜单事件 oncont ...

  7. ASP.NET MVC 使用 Datatables (2)

    在服务器端实现分页,排序,获取当前页面数据 在上篇的基础上进行改造(datatables的客户端实现) 1.修改View页面代码如下: <div class="row"> ...

  8. 使用子查询可提升 COUNT DISTINCT 速度 50 倍

    注:这些技术是通用的,只不过我们选择使用Postgres的语法.使用独特的pgAdminIII生成解释图形. 很有用,但太慢 Count distinct是SQL分析时的祸根,因此它是我第一篇博客的不 ...

  9. jQuery方法笔记

    .clone() $(selector).clone(includeEvents) $(this).clone(true) //boolean值,true/false分别对饮是否复制元素的所有事件处理

  10. selenium测试(Java)-- 一组元素操作(十一)

    利用下面的例子来编写测试脚本 页面代码: <!DOCTYPE html> <html> <head> <meta http-equiv="conte ...