对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. linux内存查看及释放

    查看内存 常用的查看内存工具有:top,ps,free,/proc/meminfo,/proc/$PID/status等,一般都指定了虚拟内存占用情况,但ps或/proc/$PID/status中RS ...

  2. ASP.NET中上传图片检测其是否为真实的图片 防范病毒上传至服务器

    一.需求 我们在用.net开发网站时,经常会用到图片上传,可以说是每个网站必备的,大到门户网站,电商网站,政务系统,OA系统,小到企业网站,个人网站,博客网站,导航网站等等,都有用到图片上传,那么在客 ...

  3. libtommath.a: could not read symbols: Bad value 编译错误

    最近做个项目需要RSA,便调用了tommath,平时开发环境都在32位的系统上,编译运行一切都没问题,但当把程序换到一台64位系统上编译时出现: /usr/bin/ld: /usr/lib/gcc/x ...

  4. Application.idle方法

    Application.Idle()方法表示:当应用程序处于空闲状态时执行相应代码. 示例程序 1.界面设计:一个简单的Lable控件 2.代码 using System; using System. ...

  5. CSRF简单介绍及利用方法

    x00 简要介绍 CSRF(Cross-site request forgery)跨站请求伪造,由于目标站无token/referer限制,导致攻击者可以用户的身份完成操作达到各种目的.根据HTTP请 ...

  6. e667. 在给定图像中创建缓冲图像

    An Image object cannot be converted to a BufferedImage object. The closest equivalent is to create a ...

  7. C# winform 获取当前路径

    // 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory// 获取模块的完整路径.System.Diagnostics.Process.Get ...

  8. QTableWidget的表头颜色设置

    设置水平和垂直表头的颜色ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{b ...

  9. CentOS后台运行和关闭、查看后台任务命令

    fg.bg.jobs.&.nohup.ctrl+z.ctrl+c 命令 一.& 加在一个命令的最后,可以把这个命令放到后台执行,如 watch -n 10 sh test.sh &am ...

  10. 查看CentOS的网络带宽出口

    检查维护系统的时候,经常会要查看服务器的网络端口是多大的,所以需要用到Linux的一个命令. 如何查看CentOS的网络带宽出口多大?可以用下面的命令来查看. # ethtool eth0 前面是命令 ...