request功能
request功能
1.获取请求消息数据
- 获取请求行数据
- 方法
- 获取请求方式:GET
- String getMethod()
- 获取虚拟目录:/day14
- String getContextPath()
- 获取Serclet路径:/demo1
- String getServletPath()
- 获取get方式请求参数:name=zhangsan
- String getQueryString()
- 获取请求URI:/day14/demo1
- String getRequestURI()
- StringBuffer getRequestURL()
- 获取协议以及版本:HTTP/1.1
- String getProtocoll()
- 获取客户机的IP地址:
- String getRemoteAddr()
- 获取请求方式:GET
- 方法
java代码
@WebServlet("/request")
public class RequestDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求方式
String method = req.getMethod();
System.out.println(method);
//获取虚拟目录
String contextpath = req.getContextPath();
System.out.println(contextpath);
//获取Serclet路径
String servletPath = req.getServletPath();
System.out.println(servletPath);
//获取get方式请求参数
String queryString = req.getQueryString();
System.out.println(queryString);
//获取请求URI
String requestURI = req.getRequestURI();
System.out.println(requestURI);
StringBuffer requestURL = req.getRequestURL();
System.out.println(requestURL);
//获取协议以及版本
String protocol = req.getProtocol();
System.out.println(protocol);
//获取客户机的IP地址
String remoteAddr = req.getRemoteAddr();
System.out.println(remoteAddr);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
运行结果

- 获取请求头数据
- 方法
- String getHeader(String name):通过请求头的名称或请求头的值
- Enumeration<String> getHeaderNames():获取所有的请求头名称
- 方法
java代码
@WebServlet("/request02")
public class RequestDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Enumeration<String> hn = req.getHeaderNames();
while (hn.hasMoreElements()){
String name = hn.nextElement();
String value = req.getHeader(name);
System.out.println(name+"---"+value);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
运行结果

- 获取请求体数据
- 请求体:只有post请求方式 才有请求体 在请求体重封装了POST请求的请求参数
- 步骤
- 获取流对象
- BufferedReader getReader():获取字符输入流 只能操作字符数据
- ServletInputStream getInputStream():获取字节输入流 可以操作所有类型数据
- 在从流对象中拿数据
- 获取流对象
- 步骤
- 请求体:只有post请求方式 才有请求体 在请求体重封装了POST请求的请求参数
java代码
@WebServlet("/request05")
public class RequestDemo05 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
BufferedReader br = req.getReader();
String line=null;
while ((line = br.readLine())!=null){
System.out.println(line);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
运行结果

2.其他功能
- 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数
- String getParameter(String name):根据参数名获取参数值
- String[] getParameterValues(String name):根据参数名获取参数值的数组
- Enumeration<String> getParameterNames():获取所有请求的参数名称
- Map<String,String[]> getParameterMap():获取所有参数的map集合
java代码
@WebServlet("/request06")
public class RequestDemo06 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Get");
//根据参数名获取参数值
System.out.println("参数名获取参数值");
String username = req.getParameter("username");
System.out.println(username);
//根据参数名称获取参数值的数组
System.out.println("参数名称获取参数值的数组");
String[] hobbies = req.getParameterValues("hobby");
for (String hobby : hobbies) {
System.out.println(hobby);
}
//获取所有请求的参数名称
System.out.println("所有请求的参数名称");
Enumeration<String> parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()){
String name = parameterNames.nextElement();
System.out.println(name);
String value = req.getParameter(name);
System.out.println(value);
System.out.println("-----------------------");
}
//获取所有参数的map集合
System.out.println("所有参数的map集合");
Map<String, String[]> parameterMap = req.getParameterMap();
//遍历
Set<String> keySet = parameterMap.keySet();
for (String name : keySet) {
//获取键获取值
String[] values = parameterMap.get(name);
System.out.println(name);
for (String value : values) {
System.out.println(value);
}
System.out.println("-------------------");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Post");
doGet(req,resp);
}
HTML代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>明文提交</h3> <form action="/request06" method="get"> <input type="text" placeholder="请输入用户名" name="username"><br> <input type="text" placeholder="请输入密码" name="password"><br> <input type="checkbox" name="hobby" value="game">游戏 <input type="checkbox" name="hobby" value="study">学习 <br> <input type="submit" name="提交"> </form> <hr> <h3>密文提交</h3> <form action="/request06" method="post"> <input type="text" placeholder="请输入用户名" name="username"><br> <input type="text" placeholder="请输入密码" name="password"><br> <input type="checkbox" name="hobby" value="game">游戏 <input type="checkbox" name="hobby" value="study">学习 <br> <input type="submit" name="提交"> </form> </body> </html>
运行结果

- 请求转发:一种在服务器内部的资源跳转方式
- 步骤
- 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
- 使用RequestDisPatcher对象来进行转发:forward(ServletRequest request,ServletResponse response)
- 特点:
- 浏览器地址栏路径不发生变化
- 只能转发到当前服务器内部资源中
- 转发是一次请求
- 步骤
java代码
RequestDemo07类
@WebServlet("/request07")
public class RequestDemo07 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("request07被访问了....");
req.getRequestDispatcher("/request08").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Post");
doGet(req,resp);
}
RequestDemo08类
@WebServlet("/request08")
public class RequestDemo08 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("request08被访问了....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Post");
doGet(req,resp);
}
运行结果

- 共享数据
- 域对象:一个作用范围的对象 可以在范围内共享数据
- request域:代表一次请求的范围 一般用于请求转发的多个资源中共享数据
- 方法
- void serAttribute(String name,Object obj):存储数据
- Object getAttitude(String name):通过键获取值
- void removeAttribute(String name):通过键移除值对
java代码
RequestDemo07类
@WebServlet("/request07")
public class RequestDemo07 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//存储数据到request域中
req.setAttribute("msg","hello");
System.out.println("已传入");
req.getRequestDispatcher("/request08").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Post");
doGet(req,resp);
}
}
RequestDemo08类
@WebServlet("/request08")
public class RequestDemo08 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("request08被访问了....");
Object msg = req.getAttribute("msg");
System.out.println(msg);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Post");
doGet(req,resp);
}
}
运行结果

- 获取ServletContext
java代码
@WebServlet("/request09")
public class RequestDemo09 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = req.getServletContext();
System.out.println(servletContext);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
运行结果


浙公网安备 33010602011771号