tomcat服务器会创建request和response对象,其中request对象封装了请求消息的数据
请求消息数据格式包括哟了 3个部分:请求行,请求头,请求体
//请求地址
Request URL: https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/mancard/img/qrcode_download-02b84e1f66.png
//请求方式
Request Method: GET
//请求状态码
Status Code: 200 (from memory cache)
//告诉服务器,从哪里进来(用于:放盗链,统计)
Referer: https://www.baidu.com/
//浏览器告诉服务器,访问你使用的浏览器版本信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36
就是一个空行用于分隔请求体
只有post有请求体 请求体是参数
tomcat服务器会把request和esponse对象传递给service方法 并且调用service方法
返回类型 | 方法名称 | 作用 |
---|---|---|
String | getMethod() | 获得请求方式 |
String | getContextPath() | 获得虚拟目录 |
String | getServletPath() | 获得servlet路径 |
String | getRequestURI() | 获得URI地址(虚拟路径servlet) |
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
{
//1.获取请求方式
String method = req.getMethod();
System.out.println(method);
//2.获取虚拟路径
String contextPath = req.getContextPath();
System.out.println(contextPath );
//3.获得servlet路径
String servletPath = req.getServletPath();
System.out.println(servletPath);
//4.获得URI地址(虚拟路径+servlet)
String requestURI = req.getRequestURI();
System.out.println(requestURI);
}
}
返回类型 | 方法名 | 作用 |
---|---|---|
String | getHeader(String name) | 通过请求头名称得到请求头的值 |
Enumeration | getHeaderNames() | 获得所有的请求头名称 |
//通过请求头名称得到请求头的值
String host = req.getHeader("host");
System.out.println(host);
//获得所有的请求头名称
Enumeration<String> headerNames = req.getHeaderNames();
while (headerNames.hasMoreElements()) System.out.println(headerNames.nextElement()+req.getHeader(headerNames.nextElement()));
获得请求体中数据流
只有post才有请求体
BufferedReader br=req.getReader();
while ((line=br.readLine())!=null)
System.out.println(line);
获取请求参数常用方式(get和post通用)
返回值 | 方法名 | 作用 |
---|---|---|
String | getParameter(String name) | 根据参数名称获取参数值 |
String [] | getParameterValues(String name) | 根据参数名称获取参数值的数组 |
Enumeration | getParameterNames() | 获取所有的请求参数名称 |
Map<String String[]> | getParameterMap() | 获取所有参数的map集合 |
//根据参数名称获取参数值
String password = req.getParameter("password");
System.out.println(password);
//根据参数名称获取参数值的数组
String[] hobbies = req.getParameterValues("hobby");
for (String hobby : hobbies) {
System.out.println(hobby);
}
//获取所有的请求参数名称
Enumeration<String> parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()) {
String s = parameterNames.nextElement();
System.out.println(s);
String parameter = req.getParameter(s);
System.out.println(parameter);
System.out.println("==========");
}
//获取所有参数的map集合
//获取所有参数的map集合
Map<String, String[]> parameterMap = req.getParameterMap();
//遍历
//得到键值对中的键
Set<String> strings = parameterMap.keySet();
for (String string : strings) {
System.out.println(string);
//得到键值对中的值
String[] strings1 = parameterMap.get(string);
for (String s : strings1) {
System.out.println(s);
}
req.setCharacterEncoding("utf-8");
- 浏览器地址栏路径不发生变化
- 只能转发到当前服务器内部资源中
- 转发是一次请求
RequestDispatcher | getRequestDispatcher(String s); |
---|---|
请求转发器 | |
void | forward(ServletRequest var1, ServletResponse var2) |
将请求转发到另一个servlet服务中 |
RequestDispatcher requestDemo1 = req.getRequestDispatcher("requestDemo1");
requestDemo1.forward(req,resp);
在同一个请求中可以共享数据源
返回值 | 方法名 | 作用 |
---|---|---|
void | setAttribute(String var1, Object var2); | 共享一个键值对 |
void | removeAttribute(String var1); | 通过键删除一个共享数据 |
Object | getAttribute(String var1); | 通过键得到共享资数据的值 |
req.setAttribute("name","张三");
req.getAttribute("name");
req.removeAttribute("name");