Servlet的生命周期

Servlet的生命周期:
Servlet的生命周期由Tomcat(web server)服务器全权负责;
Tomcat服务器通常又被称为web容器(web Container);
在默认的情况下,启动服务器时,Servlet默认是不会被new对象,实列化的;
但如果想服务器启动时,就实列化Servlet,那么可以在web.xml配置文件中的serlvet加上以下代码即可:正整数
例如:
在这里插入图片描述

注:其中load-on-startup中的正整数起到了servlet对象被实列化的先后顺序,当有多个servlet被加上load-on-startup时,将根据该正整数大小被实列化对象,数字越小,其优先级越高;
Servlet实列化对象是单实例的,但是servlet并不符合单例模式,所以Servlet的单例又被称为“假单例”;而真单例模式是构造方法私有化;
关于Servlet类中方法的调用次数:
·构造方法只执行一次;
·into方法只执行一次;
·service方法:用户每发送一次请求则执行一次,发送N次请求则执行N次执行;
·destroy方法只执行一次;
Transient关键字用于修饰是不可序列化的;
ServletConfig:
servletConfig是servlet规范中的一员;
servletConfig实际上是servlet的一个配置信息;
一个servlet对应了一个servletConfig,n个servlet对应了n个servletConfig;
servletConfig中包装的信息其实是web.xml中的servlet标签中的信息;
ServletConfig的常用方法:
Public string getInitParameter(String name); 通过初始化的参数name获取value;
Public Enumeration getInitParameterNames();获取所有的初始化参数name;
Public ServletContext getServletContext(); 获取ServletContext对象;
Public String getServletName(); 获取servlet的name;
以上方法亦可以通过this方法进行调用;
ServletContext(应用域):
servletContext是一个接口,servlet规范中的一员;
servletContext由web服务器实现了接口,由web服务器创建;且由web服务器关闭时销毁;
对于一个webapp(应用)来说,只有一个servletContext;
一个ServletContext是多个servlet对象共享的;
ServletContext的常用方法:
Public string getInitParameter(String name); 通过初始化的参数name获取value;
Public Enumeration getInitParameterNames();获取所有的初始化参数name;
ServletContext application=this.getServletContext();
获取项目的根路径:
String path=application.getContextPath();
获取文件的绝对路径:(“/代表的是从根(web)目录开始找”)
String realPath=application.getRealPath(“/文件名”);
ServletContext对象用于记录日志文件的方法:
Public void log(String message);
Public void log(String message,Throwable T);
记录的日志文件会存放在web服务器的logs目录的文件下;
而Tomcat服务器(web服务器)的logs目录下的日志文件有哪些?
catalina.2022-03-16.log 服务器端的java程序运行在控制台的信息
localhost.2022-03-16.log ServletContext对象中的log日志方法的存放文件;
localhost_access_log.2022-03-16.txt 访问日志
Http协议:
协议其实一种一套规范、一套标准;协议是由某些人或者某些组织制定的;
而Http协议是W3C(万维网联盟组织)制定的一套超文本传输协议;
Http协议包括:
请求协议;(request)
·浏览器 向 web服务器 发送数据为请求;
响应协议;(response)
·web服务器 向 浏览器 发送数据为响应;
请求协议的4部分:
·请求行;
三部分:
第一部分:请求方式;
第二部分:URI
第三部分:HTTP协议版本号;
·请求头;
请求的主机;
主机的端口;
浏览器信息;
平台信息;
Cookie等信息;
……
·空白行;
用于分隔“请求头”和“请求体”的;
·请求体;
请求体是浏览器向服务器发送的具体信息;
响应协议的4部分:
·状态行;
三部分:
第一部分:协议版本号(HTTP/1.1)
第二部分:状态码:200、404、405、500等;
·200 表示请求响应成功,正常结束;
·404 表示访问的资源不存在,发生404错误,一般错误在于前端的错误;
·405 表示前后端请求的处理方式不一致,例如前端使用的是get请求,后端使 用的是post请求,会导致405的错误发生;
·500 表示服务器端的程序出现了异常,一般会认为是后端导致的;
第三部分:状态的描述信息,ok、not found;
·ok 表示正常成功结束;
·not found 表示资源找不到;
·响应头;
响应内容的类型;
响应内容的长度;
响应内容的时间;
……
·空白行;
用于分隔“响应头”和“响应体”的;
·响应体;
响应体就是响应的正文,这些内容是一个长的字符串,被浏览器渲染、解析并执行,最终展示的效果,异步都是一串很长的源码;
请求方式:
请求方式一共有7种,分别是:
Get; (常用)该请求方式只能发送普通文本数据,并且有长度的限制,而每个浏览器的长度限制也有所不同,但没有明确规范,get不能发送大量数据;get请求是绝对安全的;
Get请求支持缓存;
Post; (常用)该请求可以发送任何类型的数据,可以发送大数据量数据,理论上长度没有限制,post请求是危险的,post请求不支持缓存;
Put;
Head;
Delete;
Options;
Trace;
如何让get请求不缓存?
只有get每次请求的路径不一样即可;
在url末尾加上一个系统毫秒数(时间戳)即可达到效果;
URI与URL:
URI是统一资源标识符,代表网络中某个资源的名字,但是无法定位资源;
URL是统一资源定位符,代表网络中的某个资源,通过URL可以定位该资源;
ULI与URL的区别:
URL包括URI,
URI只是URL中的一部分;
HttpServlet:
HttpServlet是专门为HTTP协议准备的,比GenericServlet更适合在HTTP协议的开发;
HttpServlet在jakarta.servlet.http.HttpServlet的包下;(新版本)
HttpServlet在javax.servlet.http.HttpServlet的包下;(旧版本)
Request和Response的生命周期:
·request是请求对象,response是响应对象,它们只在当前请求中有效;
·一次请求一个requset,n次请求代表n个requset;
前端提交的数据永远是字符串,后端提交的也永远是字符串(String);
Requset(请求域):
·“请求域”对象要比“应用域”对象的范围小很多,生命周期短很多;
·请求域只在一次请求内有效;
·request.getRemoteAddr(); 获取客户端的IP地址;
乱码问题:
·post请求乱码解决问题:
Request.setCharacterEncoding(“UTF-8”);
该方法是解决请求域中的请求体中的字符集的乱码问题的;
在Tomcat10服务器的默认请求字符集就是UTF-8,但在Tomcat9及以下版本,默认的请求字符集是GBK,如果使用setCharacterEncoding()设置编码格式的话,那么就会存在乱码问题;
在Tomcat9(包括Tomcat9)响应response同样存在乱码问题;
Response.setContentType(“text/html;charset=utf-8”);
以上代码即可解决响应response中的乱码问题;
但在Tomcat10之后的版本,就不会出现乱码问题;
·get请求乱码解决问题:
Tomcat9以及之后的版本,默认的get请求的编码格式就是UTF-8;
但在Tomcat9之前的版本,它默认的编码格式是不支持中文的;
如何解决Tomcat9之前的版本乱码问题?
在D:\apache-tomcat-9.0.44-windows-x64\apache-tomcat-9.0.44\conf的server.xml文件;
在Connector标签内加上URIEncoding并且设置为UTF-8即可;
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值