Servlet处理客户端HTTP请求

简介:

本篇博客将在上一篇博客《Servlet第一个示例》的基础上继续介绍,Servlet如何处理客户端的请求,获得客户端的请求消息。

首先我们新建一个静态页面index.html,用于向Servlet提交请求。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Servlet</title>
</head>
<body>
    <form action="Test" method="POST">
        <table>
            <tr>
                <td>用户编号</td>
                <td><input type="text" name="userId"></td>
            </tr>
            <tr>
                <td>用户名称</td>
                <td><input type="text" name="userName"></td>
            </tr>
            <tr>
                <td>用户性别</td>
                <td><select name="userSex"><option value="1"></option>
                        <option value="2"></option></select></td>
            </tr>
            <tr>
                <td>兴趣爱好</td>
                <td><input type="checkbox" name="interest1">兴趣1&nbsp;&nbsp;<input
                    type="checkbox" name="interest2">兴趣2</td>
            </tr>
            <tr>
            <td colspan="2"><input type="submit"></td>
         </tr>
        </table>
    </form>
</body>
</html>

然后,我们需要修改Test中的方法,因为页面采用POST方式提交,所以在Test Servlet中,我们仅对Post的请求做处理。

package com.gujin.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Test extends HttpServlet
{
   private static final long serialVersionUID = 1L;

   protected void doPost(HttpServletRequest request,
         HttpServletResponse response) throws ServletException, IOException
   {
      request.setCharacterEncoding("UTF-8");
      // 获得请求头信息
      System.out.println("======HEAD INFO======");
      Enumeration enumeration = request.getHeaderNames();
      while (enumeration.hasMoreElements())
      {
         String name = (String) enumeration.nextElement();
         Enumeration headers = request.getHeaders(name);
         while (headers.hasMoreElements())
         {
            System.out.println(name + ":" + headers.nextElement());
         }
      }

      // 获得请求参数
      System.out.println("======REQUEST PARAM======");
      // 获得指定参数
      // request.getParameter("userId");
      // 获得所有请求参数名称
      // request.getParameterNames();
      // 获得请求参数集合
      // request.getParameterMap();

      Enumeration names = request.getParameterNames();
      while (names.hasMoreElements())
      {
         String name = (String) names.nextElement();
         System.out.println(name + ":" + request.getParameter(name));
      }
      PrintWriter writer = response.getWriter();
      writer.print("Hello Servlet");
      writer.flush();
      writer.close();
   }
}

启动服务器后访问:http://localhost/Servlet/

这里写图片描述

输入一些内容后提交,我们会看到服务端的后台会输出如下内容(内容可能会不一样):
======HEAD INFO======
accept:image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, a
pplication/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, /
referer:http://localhost/Servlet/
accept-language:zh-CN
user-agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 3.0.04506.30; .NET CLR 2.0
.50727; hwvcloud4; hwcloud4)
content-type:application/x-www-form-urlencoded
accept-encoding:gzip, deflate
host:localhost
content-length:77
connection:Keep-Alive
cache-control:no-cache
======REQUEST PARAM======
userId:jianggujin
userSex:1
interest2:on
userName:蒋固金

这样我么就可以根据客户端请求的内容做相应的业务处理。

目录
相关文章
|
1天前
|
API UED Python
使用Python进行异步HTTP请求的实践指南
使用Python进行异步HTTP请求的实践指南
12 4
|
8天前
|
缓存 负载均衡 网络协议
【亮剑】一次完整的 HTTP 请求过程,包括 DNS 解析、TCP 握手、HTTP 请求和响应等环节
【4月更文挑战第30天】本文介绍了HTTP请求的重要性和详细过程。首先,DNS解析将域名转换为IP地址,通过递归和迭代查询找到目标服务器。接着,TCP三次握手建立连接。然后,客户端发送HTTP请求,服务器处理请求并返回响应。最后,理解这个过程有助于优化网站性能,如使用DNS缓存、HTTP/2、Keep-Alive、CDN和负载均衡等实践建议。
|
9天前
|
JSON 编解码 Go
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第25天】Go语言`net/http`包提供HTTP客户端和服务器功能,简化高性能网络应用开发。本文探讨如何发起HTTP请求,常见问题及解决策略。示例展示GET和POST请求的实现。注意响应体关闭、错误处理、内容类型设置、超时管理和并发控制。最佳实践包括重用`http.Client`,使用`context.Context`,处理JSON以及记录错误日志。通过实践这些技巧,提升HTTP编程技能。
23 1
|
10天前
|
前端开发 API UED
AngularJS的$http服务:深入解析与进行HTTP请求的技术实践
【4月更文挑战第28天】AngularJS的$http服务是核心组件,用于发起HTTP请求与服务器通信。$http服务简化了通信过程,通过深入理解和实践,能构建高效、可靠的前端应用。
|
11天前
|
Go 开发者
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第24天】Go语言的`net/http`包在HTTP客户端编程中扮演重要角色,但使用时需注意几个常见问题:1) 检查HTTP状态码以确保请求成功;2) 记得关闭响应体以防止资源泄漏;3) 设置超时限制,避免长时间等待;4) 根据需求处理重定向。理解这些细节能提升HTTP客户端编程的效率和质量。
18 1
|
Web App开发 新零售 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
1.尽可能地了解需求,系统层面适用开闭原则 2.模块化,低耦合,能快速响应变化,也可以避免一个子系统的问题波及整个大系统 3.
711 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
最近在线上往hbase导数据,因为hbase写入能力比较强,没有太在意写的问题。让业务方进行历史数据的导入操作,中间发现一个问题,写入速度太快,并且业务数据集中到其中一个region,这个region无法split掉,处于不可用状态。
1304 0
|
Web App开发 Linux
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
内存是影响Linux性能的主要因素之一,内存资源的充足与否直接影响应用系统的使用性能。 free命令:监控Linux内存使用状况。
1122 0
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
负载均衡: LVS(Layer 4), HAProxy(Layer 4、 7),Nginx(Layer 7) 虚拟化: LXC、KVM、Xen HA:Keepalived、Heartbeat 分布式缓存...
735 0
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
hadoop服务器更换硬盘操作步骤(datanode hadoop目录${HADOOP_HOME}/bin    日志位置:/var/log/hadoop)1.登陆服务器,切换到mapred用户,执行jps命令,查看是否有TaskTracker进程。
975 0