request获取请求信息

request获取请求信息

request获取请求数据

HTTP请求数据总共分为三部分内容,分别是:请求行、请求头、请求体。对应的获取方法如下:

获取请求行数据

获取请求方式: GET

String getMethod()

获取虚拟目录(项目访问路径): /request-demo

String getContextPath()

获取URL(统 一资源定位符): http://localhost:8080/request-demo/req1

StringBuffer getRequestURL()

获取URI(统一资源标识符): /request-demo/req1

String getRequestURI()

获取请求参数(GET方式): username=zhangsan&password=123

String getQueryString()

获取请求头数据

对于请求头的数据,格式为key: value(键值对)如下:

User-Agent:Mozilla/5.0 Chrome/91.0.4472.106

所以根据请求头名称获取对应值的方法为:

String getHeader(String name):

//获取请求头: user-agent: 浏览器的版本信息

String agent = req.getHeader("user-agent");

获取请求体数据

浏览器在发送GET请求的时候是没有请求体的,所以需要把请求方式变更为POST,请求体中的数据格式如下:

username=zhangsan&password=123

对于请求体中的数据,Request对象提供了如下两种方式来获取其中的数据,分别是:

获取字节输入流,如果前端发送的是字节数据,比如传递的是文件数据,则使用该方法

ServletInputStream getInputStream()

该方法可以获取字节

获取字符输入流,如果前端发送的是纯文本数据,则使用该方法

BufferedReader getReader()

获取请求参数的通用方式

对于请求方式GET,POST来说,代码的基本处理逻辑是相同的,所以我们可以简化一下代码,在doGET请求里面写好所有处理逻辑,在dopost里面可以调用doget方法来完成处理,如:

@WebServlet("/req1")

public class RequestDemo1 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//获取请求方式

String method = req.getMethod();

//获取请求参数

String params = "";

if("GET".equals(method)){

params = req.getQueryString();

}else if("POST".equals(method)){

BufferedReader reader = req.getReader();

params = reader.readLine();

}

//将请求参数进行打印控制台

System.out.println(params);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

this.doGet(req,resp);

}

}

这是第一种方法,但是这种方法相对来说比较麻烦,因为以后要每个servlet都需要这样写代码,实现起来比较麻烦,所以我们一般采用下面几种request提供的方法:

获取所有参数Map集合

Map getParameterMap();

/**

* request 通用方式获取请求参数

*/

@WebServlet("/req2")

public class RequestDemo2 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//GET请求逻辑

System.out.println("get....");

//1. 获取所有参数的Map集合

Map map = req.getParameterMap();

for (String key : map.keySet()) {//map.keyset():获取所有键

// username:zhangsan lisi

System.out.print(key+":");

//获取值

String[] values = map.get(key);//map.get():根据键获取值

for (String value : values) {

System.out.print(value + " ");

}

System.out.println();

}

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}

}

根据名称获取参数值(数组)

String[] getParameterValues(String name);

/**

* request 通用方式获取请求参数

*/

@WebServlet("/req2")

public class RequestDemo2 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//GET请求逻辑

//...

System.out.println("------------");

String[] hobbies = req.getParameterValues("hobby");

for (String hobby : hobbies) {

System.out.println(hobby);

}

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}

}

根据名称获取参数值(单个值)

String getParameter(String name);

/**

* request 通用方式获取请求参数

*/

@WebServlet("/req2")

public class RequestDemo2 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//GET请求逻辑

//...

String username = req.getParameter("username");

String password = req.getParameter("password");

System.out.println(username);

System.out.println(password);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}

}

request请求转发

请求转发(forward):一种在服务器内部的资源跳转方式。

(1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求

(2)资源A处理完请求后将请求发给资源B

(3)资源B处理完后将结果响应给浏览器

(4)请求从资源A到资源B的过程就叫请求转发

请求转发的实现方式:

req.getRequestDispatcher("资源B路径").forward(req,resp);

请求转发资源间共享数据:使用Request对象

此处主要解决的问题是把请求从/req5转发到/req6的时候,如何传递数据给/req6。

需要使用request对象提供的三个方法:

存储数据到request域[范围,数据是存储在request对象]中

void setAttribute(String name,Object o);

根据key获取值

Object getAttribute(String name);

根据key删除该键值对

void removeAttribute(String name);

相关推荐

青桔共享单车测评
365bet亚洲真人网

青桔共享单车测评

📅 12-06 👁️ 7494
流光余晖 - 崩坏:星穹铁道WIKI
365bet亚洲真人网

流光余晖 - 崩坏:星穹铁道WIKI

📅 08-30 👁️ 9148
【地质科普】你了解恐龙化石吗?
365信誉线上

【地质科普】你了解恐龙化石吗?

📅 11-20 👁️ 7848
髌骨骨折
365bet亚洲真人网

髌骨骨折

📅 08-20 👁️ 7663