1____Servlet初步
IJ Servlet 初始化博客推荐
1.1____虚拟网页映射设置
一般初始地址我们设置为 localhost:8081/
在/
之后的就是我们设置的虚拟地址,或者是直接地址
http://localhost:63342/test1/web/index.html?_ijt=o9vphrvo4tpl3tkh21plfhotpp
我初始化的界面用IJ 打开就是这个地址估计就是直接地址吧
对于java的虚拟网页映射要在web.xml
中设置,一个网页的虚拟映射由两个部分组成
一个是
-
-
另一个是
-
-
<servlet>
<servlet-name>he</servlet-name>
<servlet-class>src.hellow</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>he</servlet-name>
<url-pattern>/he</url-pattern>
</servlet-mapping>
///---------------------------------------------
<servlet>
<servlet-name>别名</servlet-name>
<servlet-class>全类名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>别名</servlet-name>
<url-pattern>需要servlet处理的请求地址</url-pattern>
</servlet-mapping>
servlet 的三个名字
-
Servlet的别名,程序员通过别名对Servlet进行配置
-
Servlet的全类名,服务器通过全类名来创建Servlet的实例
Servlet ***映射的请求地址***,用户通过该地址***访问Servlet***
1.2____关于Servlet与HttpServlet
HttpServlet 继承了Servlet类,这样便于处理HTTP协议的请求与相应,(Servlet还有个实现的抽象类 GenericServlet ,这里就不详细介绍了)
补充一点HTTP协议的知识,便于理解后序的Cookie等方法的意义
工作原理:
HTTP协议工作于客户端 -服务端(Client-server,C/S)架构上。浏览器作为HTTP客户端通过URL (在WWW上,每一信息资源都有统一的且在网上唯一的地址,它是WWW的统一资源定位标志,就是指网络地址。) 向HTTP服务端即WEB服务器发送所有请求。
HTTP协调的特点
- HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
- HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
2____Servlet生命周期
Tomcat里 servlet-api.jar - javax,serlet - resources - servlet
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package javax.servlet;
import java.io.IOException;
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。
- 构造器:
-
Servlet第一次处理请求时,会调用构造器,来创建Servlet实例。
-
只会调用一次,Servlet是单例模式,他是以多线程的方式调用service()方法.
-
Servlet不是线程安全,所以尽量不要再service()方法中操作全局变量。
-
init()方法:
- 构造器调用之后马上被调用,用来初始化Servlet,只会调用一次。
-
service()方法:
- Servlet每次处理请求时都会调用service()方法,用来处理请求,会调用多次。
-
destroy()方法:
- Servlet对象销毁前(WEB项目卸载时)调用,用来做一些收尾工作,释放资源。
![](https://www.runoob.com/wp-content/uploads/2014/07/Servlet-LifeCycle.jpg)
注意指向 init()
的初始化方法,只执行一次
1____init() 方法
init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用,因此它是用于一次性初始化。
当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。