再上一节我们写了HttpServelt类,我们发现我们写的实现类中的dopost方法和doget方法中有两个参数request,response,他们是Resquest的对象和Response的对象,都是由服务器创建

Request对象  获取请求消息,

Response对象   响应

在HttpServelt类中,我们发现方法中的参数是HttpServletResquest对象,这里写一下继承顺序,

  Request---->ServletRequset---->HttpServletRequest,根据多态的性质可以知道参数request也是Request对象,

  这个对象不需要我们创建,由tomcat创建

下面我们来写一下这个Request对象的方法:

首先建立一个html页面,放在web文件夹下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/zs/login" method="post">
<input type="text" name="username" placeholder="请输入用户名"><br/>
<input type="password" name="password" placeholder="请输入密码"><br/>
吃<input type="checkbox" name="hobby" value="chi">
喝<input type="checkbox" name="hobby" value="he">
玩<input type="checkbox" name="hobby" value="wan">
乐<input type="checkbox" name="hobby" value="le"><br/>
<input type="submit">
</form>
</body>
</html>


然后我们运行tomcat,用浏览器输入地址查看是否可以查看该文件,下面我们编写Servelt文件:

package com.zs.servelt;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

@WebServlet("/login")
/*这里需要注意的是,我们之前在html文件的action属性中写的是"/zs/login",里面前面是配置的服务器地址的url,后面代表虚拟路径,
在这里只需要输入虚拟路径*/
public class ServletDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*获取请求行的数据*/
// 1.获取请求的方式
String method = request.getMethod();
System.out.println(method);// POST
// 2.获取目录的路径
String conpath = request.getContextPath();
System.out.println(conpath);// /zs
// 3.获取servelt的路径
String servletPath = request.getServletPath();
System.out.println(servletPath);// /login
// 4.获取请求参数
String queryString = request.getQueryString();
System.out.println(queryString);// null
// 5.获取请求的url
String requestURI = request.getRequestURI();
System.out.println(requestURI);// /zs/login
StringBuffer requestURL = request.getRequestURL();
System.out.println(requestURL);// http://localhost/zs/login
// 6.获得协议版本
String protocol = request.getProtocol();
System.out.println(protocol);// HTTP/1.1
// 7.获得客户的id
String remoteAddr = request.getRemoteAddr();
System.out.println(remoteAddr);// 0:0:0:0:0:0:0:1
/*获取请求参数的通用方式(post,get都可以使用的方法),下面的方法必须记住,会常用*/
// 1.根据参数的名称获得参数,括号内参数为标签的name值
String username = request.getParameter("username");
System.out.println(username);// 结果: 165
// 2.根据参数的名成获得参数的数据,例如html标签中checkbox有多个值,就会把这些值放进一个数组中,
String[] hobbies = request.getParameterValues("hobby");
System.out.println(Arrays.toString(hobbies));
//结果: [chi, he, wan]
// 3.获得所有的请求参数的名称
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String s = parameterNames.nextElement();
System.out.println(s);
//结果:
//username
//password
//hobby
}
// 4.获得所有参数的集合
Map<String, String[]> parameterMap = request.getParameterMap();
// 遍历集合
Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
for (Map.Entry<String, String[]> entry : entries) {
// 这里可以看出参数的值为数组格式
String[] value = entry.getValue();
System.out.println(entry.getKey()+Arrays.toString(value));
//username[165]
//password[131]
//hobby[chi, he, wan]
}
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*get方式和post提交方式,只是一个显示提交,一个隐式提交示,内部方法是一样的,所以我们这里调用post方法就好了*/
this.doPost(request,response);
}
}