Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类
创始人
2024-11-19 14:03:58
0

目录

HTTP协议

什么是HTTP协议

HTTP协议的特点

请求的HTTP协议格式

GET请求

POST请求

常用的请求头说明

哪些是GET请求,哪些是POST请求

响应的HTTP协议格式

常见的响应码说明

MIME类型说明

HttpServletRequest类

作用

常用方法

如何获取请求参数

post请求中文乱码问题

请求转发

base标签的作用

Web中的相对路径和绝对路径

Web中斜杠/的不同意义

HttpServletResponse类

作用

两个输出流的说明

如何向客户端回传字符串数据

请求重定向


HTTP协议

什么是HTTP协议

协议:指双方或多方相互约定好,大家都需要遵守的规则

HTTP(HyperText Transfer Protocol),超文本传输协议,规定了浏览器和服务器之间数据传输的规则

HTTP协议中的数据又叫报文

HTTP协议的特点

  • 基于TCP协议:面向连接,安全
  • 基于请求-响应模型的:一次请求对应一次响应
  • HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。 缺点:多次请求间不能共享数据。 优点:速度快

请求的HTTP协议格式

客户端给服务器发送数据叫请求,服务器给客户端回传数据叫响应

请求分为GET请求和POST请求两种

GET请求和POST请求的区别:

  1. GET请求请求参数在请求行中,没有请求体。POST请求请求参数在请求体中
  2. GET请求请求参数大小有限制,POST没有

GET请求

1.请求行

    (1)请求的方式:GET

    (2)请求的资源路径:[+?+请求参数]

    (3)请求的协议的版本号:HTTP/1.1

2.请求头

    由key:value组成,不同的键值对表示不同的含义

POST请求

1.请求行

    (1)请求的方式:POST

    (2)请求的资源路径:[+?+请求参数]

    (3)请求的协议的版本号:HTTP/1.1

2.请求头

    由key:value组成,不同的键值对表示不同的含义

请求头和请求体之间有空行

3.请求体:发送给服务器的数据

常用的请求头说明

Accept:客户端可以接收的数据类型

Accept-Language:客户端可以接收的语言类型

User-Agent:客户端浏览器的信息

Host:请求时的服务器ip和端口号

哪些是GET请求,哪些是POST请求

GET请求有哪些:

  • form标签 method=get
  • a标签
  • link标签引入css
  • script标签引入js文件
  • img标签引入图片
  • iframe引入html页面
  • 在浏览器地址栏中输入地址后敲回车

POST请求有哪些:

  • form标签 method=post

响应的HTTP协议格式

1.响应行

    (1)响应的协议和版本号:HTTP/1.1

    (2)响应状态码:200

    (3)响应状态描述符:OK

2.响应头

    由key:value组成,不同的键值对表示不同的含义

响应头和响应体之间有空行

3.响应体:回传给客户端的数据

常见的响应码说明

200:请求成功

302:请求重定向

404:请求服务器已经收到了,但数据不存在(请求地址错误)

500:服务器已经收到请求,但是服务器内部错误(代码错误)

MIME类型说明

MIME是HTTP协议中的数据类型

MIME类型的格式是“大类型/小类型”,并与某一种文件的扩展名相对应

常见的MIME类型:

HttpServletRequest类

作用

每次只要有请求进入tomcat服务器,tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中,然后传递到service方法(doGet和doPost)中给我们使用,我们可以通过HttpServletRequest对象获取到所有请求的信息

常用方法

  • getRequestURI():获取请求的资源路径
  • getRequestURL():获取请求的统一资源定位符(绝对路径)
  • getRemoteHost():获取客户端的ip地址
  • getHeader():获取请求头
  • getParameter():获取请求的参数
  • getParamterValues():获取请求的参数(多个值)
  • getMethod():获取请求的方式GET/POST
  • setAttribute(key,value):设置域数据
  • getAttribute(key):获取域数据
  • getRequestDispatcher():获取请求转发对象

启动输出为:

如何获取请求参数

post请求中文乱码问题

要在获取请求参数之前设置才有效

请求转发

请求转发是指服务器收到请求后,从一个资源跳转到另一个资源

请求转发的特点:

  • 浏览器地址栏没有变化
  • 它们是一次请求
  • 它们共享Request域中的数据
  • 可以转发到WEB-INF目录下
  • 不可以访问工程以外的资源

Servlet1类:

package com.qcby.servlet0724;  import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException;  public class Servlet1 extends HttpServlet {     @Override     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {         //获取请求参数         String username = request.getParameter("username");         System.out.println("在Servlet1中查看参数:"+username);          //盖章,并传递到Servlet2         request.setAttribute("key1","柜台1的章");          //问路:Servlet2怎么走         /**          * 请求转发必须要以斜杠开头          */         RequestDispatcher requestDispatcher = request.getRequestDispatcher("/servlet2");          //走向Servlet2         requestDispatcher.forward(request,response);     }   } 

Servlet2类:

package com.qcby.servlet0724;  import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException;  public class Servlet2 extends HttpServlet {     @Override     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {         //获取请求参数         String username = request.getParameter("username");         System.out.println("在Servlet2中查看参数:"+username);          //查看柜台1是否盖章         Object key1 = request.getAttribute("key1");         System.out.println("柜台1是否有章:"+key1);          //处理自己的业务         System.out.println("Servlet2处理自己的业务");     }  } 

启动:

base标签的作用

base标签可以设置当前页面中所有相对路径工作时,参照哪个路径来进行跳转

Web中的相对路径和绝对路径

相对路径:

.表示当前目录

..表示上一级目录

资源名:表示当前目录/资源名

绝对路径:

http://ip:port/工程路径/资源路径

Web中斜杠/的不同意义

在web中/斜杠是一种绝对路径

  • /斜杠如果被浏览器解析,得到的地址是:http://ip:port/
  • /斜杠如果被服务器解析,得到的地址是:http://ip:port/工程路径

特殊情况:

response.sendRedirect("/"):把斜杠发送给浏览器解析,得到http://ip:port/

HttpServletResponse类

作用

每次请求进来,tomcat服务器都会创建一个Response对象传递给Servlet程序去使用,HttpServletResponse表示所有响应的信息,如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置

两个输出流的说明

  • 字节流:getOutputStream(),常用于下载(传递二进制数据)
  • 字符流:getWriter(),常用于回传字符串(常用)

两个流同时只能使用一个,使用了字节流,就不能再使用字符流,反之亦然,否则报错

如何向客户端回传字符串数据

PrintWriter writer = response.getWriter(); writer.write("response's content");

解决中文乱码问题:

方案一:

方案二:同时设置服务器和客户端都使用UTF-8,还设置了响应头,只有在获取流对象之前设置才有效

response.setContextType("text/html;charset=UTF-8");

请求重定向

请求重定向是指客户端给服务器发请求,然后服务器告诉客户端说我给你一些地址,你去新地址访问(因为之前的地址可能已废弃)

请求重定向的特点:

  • 浏览器地址栏会发生变化
  • 两次请求
  • 不共享Request域中的数据
  • 不能访问WEB-INF下的资源
  • 可以访问工程外的资源

方案一:

Response1:

package com.qcby.servlet0724;  import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;  public class Response1 extends HttpServlet {     @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         System.out.println("Response1");          //设置响应状态码302,表示重定向         resp.setStatus(302);         //设置响应头,说明新的地址         resp.setHeader("Location","http://localhost:8080/servlet0724/response2");     } } 

Response2:

package com.qcby.servlet0724;  import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;  public class Response2 extends HttpServlet {     @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         resp.getWriter().write("response2的结果");     } } 

启动:访问http://localhost:8080/servlet0724/response1

方案二(推荐):

相关内容

热门资讯

总算了解!广西老友有破解吗,开... 总算了解!广西老友有破解吗,开心泉州免费辅助器,攻略教程(有挂分享)1、开心泉州免费辅助器有没有辅助...
无独有偶!微信小程序免费黑科技... 无独有偶!微信小程序免费黑科技透视,微乐小程序多功能修改器法子教程(有挂分享)1、这是跨平台的微乐小...
避坑细节!宝宝游戏辅助,决战卡... 避坑细节!宝宝游戏辅助,决战卡五星游戏辅助器,积累教程(有挂规律)亲,关键说明,决战卡五星游戏辅助器...
据权威媒体报道!微信小程序免费... 据权威媒体报道!微信小程序免费黑科技透视,钱塘十三水其实真的有挂手段教程(有挂详细)1、钱塘十三水其...
实测揭晓!同乡游辅助工具制作,... 实测揭晓!同乡游辅助工具制作,永胜联盟会封号吗,模块教程(有挂教学)1、同乡游辅助工具制作模拟器是什...
实测必看!微信小程序免费黑科技... 实测必看!微信小程序免费黑科技开挂,皮皮胡子辅助举措教程(有挂详细)1、起透看视 微信小程序免费黑科...
一分钟揭秘!微乐小程序免费黑科... 一分钟揭秘!微乐小程序免费黑科技安卓,新超凡软件辅助练习教程(有挂存在)1、微乐小程序免费黑科技脚本...
必备辅助推荐!蜜瓜大厅可以装挂... 必备辅助推荐!蜜瓜大厅可以装挂吗,友友联盟辅助脚本,指南书教程(有挂技术)1、进入游戏-大厅左侧-新...
今日焦点!微信小程序免费黑科技... 今日焦点!微信小程序免费黑科技透视,川南久久辅助模块教程(存在有挂)运微信小程序免费黑科技辅助工具,...
技术分享!山西扣点点辅助工具,... 技术分享!山西扣点点辅助工具,福州十八扑外卦视频,诀窍教程(有挂方法)1、山西扣点点辅助工具公共底牌...