IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> javaweb 基础 1 servlet 、http请求 -> 正文阅读

[网络协议]javaweb 基础 1 servlet 、http请求

Servlet继承关系

MyServlet -> HttpServlet -> GenericServlet -> Servlet

生命周期

init();service();destroy();

init方法只在初始化时调用一次,第一次请求的时候会初始化

service会在有请求时就会调用一次,service内部处理请求方式(GET,POST,PUT.....)

destroy在服务停止时调用

如果继承的servlet不实现相对应的请求方法会默认使用httpservlet中的service方法执行405错误信息

自定义servlet需要在web.xml中配置

<servlet>
????<servlet-name> MyServlet</servlet-name>
????<servlet-class>com.xxx.xxx.MyServlet</servlet-class>
</servlet>

<servlet-mapping>
    //与servlet标签中的servlet-name标签中的值一致
????<servlet-name> MyServlet</servlet-name>
????<url-pattern>请求的地址</url-pattern>
</servlet-mapping>

一个servlet可以对应多个servlet-mapping

servlet默认是在启动服务后进行初始化调用init方法,可以在servlet中配置启动的优先级

<servlet>
????<servlet-name> MyServlet</servlet-name>
????<servlet-class>com.xxx.xxx.MyServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    //与servlet标签中的servlet-name标签中的值一致
????<servlet-name> MyServlet</servlet-name>
????<url-pattern>请求的地址</url-pattern>
</servlet-mapping>

<load-on-startup>1</load-on-startup>标签中的值越小启动的优先级越高,最好不要写负数,可以为0,1,2,3......

servlet在容器中是单例的,是线程不安全的所以尽量不要再servlet中定义成员变量,若非要定义成员变量,那就不要用成员变量的值来处理逻辑代码

http协议

请求

http请求包含三个地方? ?请求行,请求头,请求体

请求行 最基本的请求信息??

请求地址,请求方式,http协议版本? 请求地址

请求头?通过具体的参数来对本次请求进行详细的说明?

以key value形式传递?

?请求体

作为请求的主体发送给服务器

get请求方式 没有请求体,但是有一个queryString来获取请求参数

post请求方式 有请求体 form data

json格式 有请求体

响应

http请包含三个地方? ?响应行,响应头,响应体

响应行包含三个部分? ?响应的协议 响应状态 响应码

响应头 包含服务器的信息?

响应体 响应的实际内容? json数据等

会话

http无状态 :?服务端无法区分是同一个客户端还是不同的客户端发送的请求

无状态出现的问题,比如第一次请求为添加商品到购物车 第二次请求为结算商品,如果不区分的话会出现添加商品到购物车添加到其他人的购物车里面,结算会结算其他人的购物车

会话跟踪技术

客户端请求服务端,服务端获取session 如果获取不到就重新生成一个session响应给客户端,客户端下一次或者某次继续发送请求时,携带session服务端再次获取就能分辨出是哪个客户端

常用的api

//获取当前会话,没有则新建
request.getSession();

//获取当前会话,与不带参数的作用相同,没有则新建
request.getSession(true); 

//获取当前会话,有会话则取出 没有则返回null,不会创建新的
request.getSession(false); 

//获取session
HttpSession session = request.getSession();

//获取sessionId
String id = session.getSessionId(); 

//当前session是否是新的 第一次发请求是新的,后面发请求就是假的false
boolean isNew = session.isNew();

//session的非激活间隔时长 默认1800秒 半个小时  session的过期时间 
//如果过期时间内不操作则会失效 重新获取session
int maxInactiveInterval = session.getMaxInactiveInterval();

//设置session的过期时间
session.setMaxInactiveInterval();

//会话强制失效 session强制过期
session.invalidate();

//向session的保存作用域中存数据 key-value形式存储
session.setAttribute();

//向session的保存作用域中取数据 key为保存的key
session.getAttribute(key);

//删除会话
session.removeAttribute(key);

//session的保存作用域是全局的 但是会区别出来,通过sessionid来区别保存的key-value数据
//session的保存作用域是和session保存在一起的

服务器内部转发与客户端重定向

服务器内部转发

比如在MyServlet中接收到了客户端发来的请求调用以下代码

try{
   request.getRequestDispatcher("NextServlet").forward(request,response);
} catch (ServletException e) {
    e.printStackTrace();
}

表示当前MyServlet中的请求转发给了NextServlet去处理也可能传递给下一级,再由最终的接收的servlet响应给客户端 不跳转页面? 再servlet内部做处理

客户端重定向

try{
   response.sendRedirect("demo03");
} catch (ServletException e) {
    e.printStackTrace();
}

客户端请求了当前的MyServlet 但是MyServlet执行了以上代码 表示立即给客户端响应一msg,msg内容为,请立即去向NextServlet发送请求,这个时候客户端收到这条消息之后,立马去请求NextServlet并由NextServlet返回给客户端响应结果? ?跳转页面

Servlet保存的作用域

保存的作用域默认有四个

page? ?request? session applocation

page? 页面级别 基本不用

ServletContext? servletContext? =? request.getServletContext();

request? 一次请求中有效? request 和一次 response

session? 一次会话中有效?

applocation? ?一次应用程序范围内有效(在Android中来理解就是app的启动到退出)

servletContext来保存数据和取数据

路径问题 : 绝对路径与相对路径

绝对路径 举例 C:\Windows\addins

相对路径? 模糊路径不固定

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:56:55  更:2022-03-24 00:59:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:39:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码