Servlet05
14.HttpServletRequest
- HttpServletRequest对象代表客户端的请求
- 当 客户端/浏览器 通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中
- 通过这个对象的方法,可以获取客户端的信息
- HttpServletRequest类图
14.1HttpServletRequest常用方法
-
getRequestURI():获取请求的资源路径
http://localhost:8080
/servlet/loginServlet
-
getRequestURL():获取请求的统一资源定位符(绝对路径)
http://localhost:8080/servlet/loginServlet
-
getRemoteHost():获取客户端的主机
-
getRemoteAddr():获取客户端的ip
-
getHeader():获取请求头
-
getParameter():获取请求的参数
-
getParameterValues():获取请求的参数(多个值的时候使用)
-
getMethod():获取请求的方式get或post
-
setAttribute(key,value):设置域数据
-
getAttribute(key):获取域数据
-
getRequestDispatcher():获取请求转发对象(请求转发的核心对象)
14.2HttpServletRequest应用实例
需求:在一个表单提交数据给Servlet,在该Servlet中通过HttpServletRequest对象获取相关数据
package com.li.servlet.request;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "HttpServletRequestMethods", value = "/requestMethods")
public class HttpServletRequestMethods extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//这里我们使用request对象,获取表单提交的各种数据
//System.out.println("HttpServletRequestMethods doPost()被调用...");
//1.获取和http请求头相关的信息
System.out.println("请求的资源URI= " + request.getRequestURI());
System.out.println("请求的统一资源定位符(绝对路径)URL= " + request.getRequestURL());
System.out.println("请求的客户端ip地址= " + request.getRemoteAddr());
/*
getRemoteAddr()应用:发现某个ip在10s内访问的次数超过100次,就封ip
实现思路:1用一个集合concurrentHashMap[k=ip v=访问次数] 2启动线程定时扫描 3做出相应处理
*/
//如果我们希望得到请求的头的相关信息,可以直接使用request.getHeader("请求头字段名")
System.out.println("http请求头HOST= " + request.getHeader("Host"));
System.out.println("该请求发起的地址是= " + request.getHeader("Referer"));
//请获取访问网站的浏览器是什么?
String userAgent = request.getHeader("User-Agent");
//User-Agent= Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0
String[] s = userAgent.split(" ");//使用空格分割
//取最后一个字符,再用 /分割,取第一个字符
System.out.println("浏览器的种类= " + s[s.length - 1].split("\\/")[0]);
System.out.println("http请求方式= " + request.getMethod());
//2.获取和请求参数相关的信息,要去在返回数据前获取参数
//username=&pwd=&hobby=lb&hobby=cc
//2.1获取表单的数据[单个数据]
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
//2.2获取表单一组数据[多个数据]
String[] hobbies = request.getParameterValues("hobby");
System.out.println("username= " + username);
System.out.println("pwd= " + pwd);
//增强for循环的快捷键 iter->回车即可
for (String hobby : hobbies) {
System.out.println("hobby= " + hobby);
}
//推而广之,如果是单选,下拉框等,获取数据的方法大同小异
}
}
html页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title&g