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:蒋固金

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

目录
相关文章
|
3月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
488 130
|
4月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
548 2
|
4月前
|
JSON JavaScript API
Python模拟HTTP请求实现APP自动签到
Python模拟HTTP请求实现APP自动签到
|
4月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
5月前
|
缓存 JavaScript 前端开发
Vue 3 HTTP请求封装导致响应结果无法在浏览器中获取,尽管实际请求已成功。
通过逐项检查和调试,最终可以定位问题所在,修复后便能正常在浏览器中获取响应结果。
242 0
|
5月前
|
Go
如何在Go语言的HTTP请求中设置使用代理服务器
当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
400 0
|
Java Apache
<!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从集群中有8台regionserver服务器,已稳定运行了5个多月,8月15号,发现集群中4个datanode进程死了,经查原因是内存 outofMemory了(因为这几台机器上部署了spark,给spark开的...
928 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
zookeeper watch的定义如下:watch事件是一次性触发器,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher。
1110 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
已发现2个内存错误,应用名称(kernel:),日志内容(hangzhou-jishuan-DDS0248 kernel: sbridge: HANDLING MCE MEMORY ERROR hangzhou-jis...
1004 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
http_load用以测试web服务器的吞吐量与负载。但是它不同于大多数压力测试工具, 它可以以一个单一的进程运行,一般不会把客户机搞死。
874 0