您现在的位置是:主页 > news > 免费给人做网站的/黑龙江暴雪预警

免费给人做网站的/黑龙江暴雪预警

admin2025/6/15 17:28:31news

简介免费给人做网站的,黑龙江暴雪预警,长沙网站建设王道下拉惠,装饰网站建设流程文章目录Request和Response概述Request对象Request继承体系Request获取请求数据通用方式获取请求数据附:使用IDEA快速创建ServletRequest和Response概述 Request是请求对象,Response是响应对象。 request:获取请求数据 浏览器会发送HTTP请求到后台服务…

免费给人做网站的,黑龙江暴雪预警,长沙网站建设王道下拉惠,装饰网站建设流程文章目录Request和Response概述Request对象Request继承体系Request获取请求数据通用方式获取请求数据附:使用IDEA快速创建ServletRequest和Response概述 Request是请求对象,Response是响应对象。 request:获取请求数据 浏览器会发送HTTP请求到后台服务…

文章目录

  • Request和Response概述
  • Request对象
    • Request继承体系
    • Request获取请求数据
    • 通用方式获取请求数据
  • 附:使用IDEA快速创建Servlet

Request和Response概述

Request是请求对象,Response是响应对象。
在这里插入图片描述

  • request:获取请求数据
    • 浏览器会发送HTTP请求到后台服务器[Tomcat]
    • HTTP的请求中会包含很多请求数据[请求行+请求头+请求体]
    • 后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中
    • 所存入的对象即为request对象,所以我们可以从request对象中获取请求的相关参数
    • 获取到数据后就可以继续后续的业务,比如获取用户名和密码就可以实现登录操作的相关业务
  • response:设置响应数据
    • 业务处理完后,后台就需要给前端返回业务处理的结果即响应数据
    • 把响应数据封装到response对象中
    • 后台服务器[Tomcat]会解析response对象,按照[响应行+响应头+响应体]格式拼接结果
    • 浏览器最终解析结果,把内容展示在浏览器给用户浏览

Request对象

Request继承体系

在这里插入图片描述

从上图中可以看出,ServletRequest和HttpServletRequest都是Java提供的,所以我们可以打开JavaEE提供的API文档[参考: 资料/JavaEE7-api.chm],打开后可以看到:
在这里插入图片描述所以ServletRequest和HttpServletRequest是继承关系,并且两个都是接口,接口是无法创建对象,这个时候就引发了下面这个问题:
在这里插入图片描述
这个时候,我们就需要用到Request继承体系中的RequestFacade:

  • 该类实现了HttpServletRequest接口,也间接实现了ServletRequest接口。
  • Servlet类中的service方法、doGet方法或者是doPost方法最终都是由Web服务器[Tomcat]来调用的,所以Tomcat提供了方法参数接口的具体实现类,并完成了对象的创建
  • 要想了解RequestFacade中都提供了哪些方法,我们可以直接查看JavaEE的API文档中关于ServletRequest和HttpServletRequest的接口文档,因为RequestFacade实现了其接口就需要重写接口中的方法

Request获取请求数据

在这里插入图片描述
注意:

  • BufferedReader流是通过request对象来获取的,当请求完成后request对象就会被销毁,request对象被销毁后,BufferedReader流就会自动关闭,所以此处就不需要手动关闭流了。
  • GET请求没有请求体,POST请求有。而且POST请求设置请求参数的话他是在body中的。
  • 请求行中的参数使用getQueryString方法拿到的,而请求体中的body参数一般是使用流拿到的。
  • 一般来说对于POST其请求参数在请求体里,对于GET其请求参数在请求行中,两者都可以叫做请求参数,只是放的位置不同。

代码实验:

获取请求行数据:

/*** request 获取请求数据*/
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// String getMethod():获取请求方式: GETString method = req.getMethod();System.out.println(method);//GET// String getContextPath():获取虚拟目录(项目访问路径):/request-demoString contextPath = req.getContextPath();System.out.println(contextPath);// StringBuffer getRequestURL(): 获取URL(统一资源定位符):http://localhost:8080/request-demo/req1StringBuffer url = req.getRequestURL();System.out.println(url.toString());// String getRequestURI():获取URI(统一资源标识符): /request-demo/req1String uri = req.getRequestURI();System.out.println(uri);// String getQueryString():获取请求参数(GET方式): username=zhangsanString queryString = req.getQueryString();System.out.println(queryString);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
}

启动服务器,访问http://localhost:8080/request-demo/req1?username=zhangsan&passwrod=123,获取的结果如下:

在这里插入图片描述

获取请求头数据:

/*** request 获取请求数据*/
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求头: user-agent: 浏览器的版本信息String agent = req.getHeader("user-agent");System.out.println(agent);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
}

重新启动服务器后,http://localhost:8080/request-demo/req1?username=zhangsan&passwrod=123,获取的结果如下:
在这里插入图片描述

获取请求体数据:
网页端:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!-- action:form表单提交的请求地址method:请求方式,指定为post
-->
<form action="/request-demo/req1" method="post"><input type="text" name="username"><input type="password" name="password"><input type="submit">
</form>
</body>
</html>

服务器端:

/*** request 获取请求数据*/
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取post 请求体:请求参数//1. 获取字符输入流BufferedReader br = req.getReader();//2. 读取数据String line = br.readLine();System.out.println(line);}
}

通用方式获取请求数据

也就是说不管你是GET请求还是POST请求你都可以使用同样的方式来获取到请求数据。

原理如下:
①根据不同的请求方式获取请求参数,就像:

if("GET".equals(method)){params = req.getQueryString();
}else if("POST".equals(method)){BufferedReader reader = req.getReader();params = reader.readLine();
}

②把获取到的内容进行分割。
在这里插入图片描述

③把分割后端数据,存入到一个Map集合中:
在这里插入图片描述

注意:因为参数的值可能是一个,也可能有多个,所以Map的值的类型为String数组。

基于上述理论,request对象为我们提供了如下方法:

  • 获取所有参数Map集合
Map<String,String[]> getParameterMap()
  • 根据名称获取参数值(数组)
String[] getParameterValues(String name)
  • 根据名称获取参数值(单个值)
String getParameter(String name)

使用通用方法获取请求数据的话,我们可以简化自己的代码:

public class RequestDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//采用request提供的获取请求参数的通用方式来获取请求参数//编写其他的业务代码...}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req,resp);}
}

附:使用IDEA快速创建Servlet

使用通用方式获取请求参数后,屏蔽了GET和POST的请求方式代码的不同,则代码可以定义如下格式:
在这里插入图片描述
由于格式固定,所以我们可以使用IDEA提供的模板来制作一个Servlet的模板,这样我们后期在创建Servlet的时候就会更高效

在这里插入图片描述