package request;/**
* @Author ZRX
* @Date 2023/6/25 15:18
* @Description
* @Version
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Map;
@WebServlet(urlPatterns = "/RS01")
public class RequestServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//测试request对象get获取请求相关信息
//一、获取请求行数据
//(1)获取请求方式
String method = request.getMethod();
System.out.println(method);
//(2)获取项目路径(虚拟目录 项目运行的上下文)
String contextPath = request.getContextPath();// /web07_maven
System.out.println("contextPath = " + contextPath);
//(3) 获取项目的URL(绝对路径),统一资源定位符
StringBuffer requestURL = request.getRequestURL();
System.out.println("requestURL.toString() = " + requestURL.toString());
//(4)获取项目的URI(相对路径),统一资源标识符
String requestURI = request.getRequestURI();
System.out.println("requestURI.toString() = " + requestURI.toString());
//(5)获取参数,也可以用post请求获取参数的通用方法,所以一般在doget方法下调用dopost方法即可
String queryString = request.getQueryString();
System.out.println("queryString = " + queryString);
/*request.getMethod();//请求方式
request.getContextPath();//项目路径
request.getRequestURL();//绝对路径
request.getRequestURI();//相对路径
request.getQueryString();//获取参数*/
//二、获取请求头(除非有需要否则毫无意义)
/*request.getHeader("请求头的key:如User-Agent");//靠键值对获取值*/
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//测试request对象获取post请求相关信息
//post请求和get请求只是获取请求参数不同,获取路径及请求头的方法一样
//post请求可以是传入的普通数据,也可以是文件里的内容
//一般方法
//1、字符缓冲流获取数据,读取后用字符的截取方法获得数据
BufferedReader bre=request.getReader();
String s = bre.readLine();
System.out.println("s = " + s);
//2、如果是字节流
/*ServletInputStream inputStream=request.getInputStream();
int re=inputStream.read();*/
//get请求和post请求获取参数的通用方法
//1、获取请求参数作为一个Map集合,可以容纳一个键多个值的请求参数
Map<String, String[]> map = request.getParameterMap();
//循环去除map中的所有key,map.keySet中的set是所有的key的集合,
for (String key:map.keySet()) {
System.out.println("key = " + key);
String[] strings = map.get(key);
for (String st:strings) {
System.out.println("st = " + st);
}
}
//2、根据参数名取值,得到的是数组,针对多个值的属性
String[] hobbies = request.getParameterValues("hobbies");
for (String ss:hobbies) {
System.out.println("ss = " + ss);
}
//3、根据参数名称获取值,但不能用于多个值的属性,只能取单个值
String username = request.getParameter("username");
String password=request.getParameter("password");
//设置请求参数的编码
request.setCharacterEncoding("UTF-8");
}
}
注意:doPost方法里获取参数的通用方法也可以用于doget方法,故可以在doget方法里调用doPost方法即可