Servlet 的实现
Servlet 是 Server 与 Applet 的缩写,是服务端小程序的意思。应用 Java 语言编写的服务器端程序,能够像生成动静的 WEB 页,Servlet 次要运行在服务器端,并由服务器调用执行,是一种依照 Servlet 规范来开发的类。是 SUN 公司提供的一门用于开发动静 Web 资源的技术。(话中有话:要实现 web 开发,须要实现 Servlet 规范)
Servlet 实质上也是 Java 类,但要遵循 Servlet 标准进行编写,没有 main()办法,它的创立、应用、销毁都由 Servlet 容器进行治理(如 Tomcat)。(话中有话:写本人的类,不必写 main 办法,他人主动调用)
Servlet 是和 HTTP 协定是紧密联系的,其能够解决 HTTP 协定相干的所有内容。这也是 Servlet 利用宽泛的起因之一。
提供了 Servlet 性能的服务器,叫做 Servlet 容器,其常见容器有很多,如 Tomcat, Jetty, WebLogic Server, WebSphere, JBoss 等等。
创立 Web 我的项目
- 抉择 “File” —> “New” —> “Project”
-
- 设置我的项目的相干信息,抉择 “Next”
-
- 设置项目名称及工作空间
-
- web 我的项目目录构造如下
-
Servlet 的实现
新建类
- 点击 “src” —> “new” —> “package”,创立一个文件包
-
- 在包上面创立 Java 类文件,点击包名 —> “New” —> “Java Class”
-
- 创立一个一般的 Java 类
-
-
如下
package com.xxxx.servlet;
public class Servlet01 {
}
-
实现 Servlet 标准
实现 Servlet 标准,即继承 HttpServlet 类,并到如响应的包,该类中曾经实现了通信的规定,咱们只须要进行业务的实现即可。
package com.xxxx.servlet;
import javax.servlet.http.HttpServlet;
public class Servlet01 extends HttpServlet {
}
重写 service 办法
满足 Servlet 标准只是让咱们的类可能满足接管申请的要求,接管到申请后须要对申请进行剖析,以及进行业务逻辑解决,计算出后果,则须要增加代码,在标准中有一个叫做 service 的办法,专门用来做申请解决的操作,业务代码则能够写在该办法中。
package com.xxxx.servlet;
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 Servlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Hello Servlet!");
resp.getWriter().write("Hello World");
}
}
设置注解
在实现好了所有代码的编写后,还须要向服务器阐明,特定申请对应特定资源。
开发 servlet 我的项目,应用 @WebServlet 将一个继承于 javax.servlet.http.HttpServlet 的类定义为 Servlet 组件。在 Servlet3.0 中,能够应用 @WebServlet 注解将一个继承于 javax.servlet.http.HttpServlet 的类标注为能够解决用户申请的 Servlet。
package com.xxxx.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("ser01")
public class Servlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Hello Servlet!");
resp.getWriter().write("Hello World");
}
}
用注解配置 Servlet
@WebServlet(name="Servlet01",value="ser01")
@WebServlet(name="Servlet01",urlPatterns = "ser01")
也能够配置多个拜访门路
@WebServlet(name="Servlet01",value={"ser01",'ser001'})
@WebServlet(name="Servlet01",urlPatterns={"ser01",'ser001'})
公布我的项目并启动服务
到此,须要编写和配置的中央曾经实现,我的项目曾经残缺了,然而如果须要外界可能拜访,还须要将我的项目公布到服务器上并运行服务器。
- 设置我的项目的站点名(我的项目对外拜访门路)
-
- 设置我的项目的 Tomcat 配置
-
- 启动服务器
-
拜访并查看后果
在我的项目正确公布到服务器上之后,用户即可通过浏览器拜访该我的项目中的资源。留神 url 的 格局正确,tomcat 的端口为 8080。
浏览器拜访地址:http:localhost:8080s01ser01
页面成果
后盾后果
到这里咱们的第一个 Servlet 就实现了!
Servlet 的工作流程
- 通过申请头获知浏览器拜访的是哪个主机
-
- 再通过申请行获取拜访的是哪个一个 web 利用
-
- 再通过申请行中的申请门路获知拜访的是哪个资源
-
- 通过获取的资源门路在配置中匹配到实在的门路,
-
- 服务器会创立 servlet 对象,(如果是第一次拜访时,创立 servlet 实例,并调用 init 办法进行初始化操作)
-
- 调用 service(request,response)办法来解决申请和响应的操作
-
- 调用 service 结束后返回服务器 由服务器讲 response 缓冲区的数据取出,以 http 响应的格局发送给浏览器
-
Servlet 的生命周期
Servlet 没有 main()办法,不能独立运行,它的运行齐全由 Servlet 引擎来管制和调度。所谓生命周期,指的是 servlet 容器何时创立 servlet 实例、何时调用其办法进行申请的解决、何时并销毁其实例的整个过程。
- 实例和初始化机会
当申请达到容器时,容器查找该 servlet 对象是否存在,如果不存在,则会创立实例并进行初始化。
-
- 就绪调用服务阶段
有申请达到容器,容器调用 servlet 对象的 service()办法, 解决申请的办法在整个生命周期中能够被屡次调用;HttpServlet 的 service()办法,会根据申请形式来调用 doGet()或者 doPost()办法。然而,这两个 do 办法默认状况下,会抛出异样,须要子类去 override。
-
- 销毁机会
当容器敞开时(应用程序进行时),会将程序中的 Servlet 实例进行销毁。
上述的生命周期能够通过 Servlet 中的生命周期办法来察看。在 Servlet 中有三个生命周 期办法,不禁用户手动调用,而是在特定的机会有容器主动调用,察看这三个生命周期办法 即可察看到 Servlet 的生命周期。
-
init 办法,在 Servlet 实例创立之后执行(证实该 Servlet 有实例创立了)
public void init(ServletConfig config) throws ServletException {
System.out.println("实例创立了...");
}
service 办法,每次有申请达到某个 Servlet 办法时执行,用来解决申请(证实该 Servlet 进行服务了)
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("服务调用了...");
}
destroy 办法,Servlet 实例销毁时执行(证实该 Servlet 的实例被销毁了)
public void destroy() {
System.out.println("实例销毁了...");
}
Servlet 的生命周期,简略的概括这就分为四步:servlet 类加载 --> 实例化 --> 服务 --> 销毁。
上面咱们形容一下 Tomcat 与 Servlet 是如何工作的, 看看上面的时序图:
1. Web Client 向 Servlet 容器(Tomcat)收回 Http 申请
2. Servlet 容器接管 Web Client 的申请
3. Servlet 容器创立一个 HttpServletRequest 对象,将 Web Client 申请的信息封装到这个对象 中
4. Servlet 容器创立一个 HttpServletResponse 对象
5. Servlet 容器调 HttpServlet 对象 service 办法,把 Request 与 Response 作为参数,传给 HttpServlet
6. HttpServlet 调用 HttpServletRequest 对象的无关办法,获取 Http 申请信息
7. HttpServlet 调用 HttpServletResponse 对象的无关办法,生成响应数据
8. Servlet 容器把 HttpServlet 的响应后果传给 Web Client
加 VX 理解点我扫码支付
学习更多常识,请退出 QQ 群:1080355292,入群暗号(33)
- 抉择 “File” —> “New” —> “Project”
-
- 设置我的项目的相干信息,抉择 “Next”
-
- 设置项目名称及工作空间
-
- web 我的项目目录构造如下
-
- 点击 “src” —> “new” —> “package”,创立一个文件包
- 在包上面创立 Java 类文件,点击包名 —> “New” —> “Java Class”
- 创立一个一般的 Java 类
-
如下
package com.xxxx.servlet;
public class Servlet01 {
}
- 设置我的项目的站点名(我的项目对外拜访门路)
- 设置我的项目的 Tomcat 配置
- 启动服务器
-
- 通过申请头获知浏览器拜访的是哪个主机
- 再通过申请行获取拜访的是哪个一个 web 利用
- 再通过申请行中的申请门路获知拜访的是哪个资源
- 通过获取的资源门路在配置中匹配到实在的门路,
- 服务器会创立 servlet 对象,(如果是第一次拜访时,创立 servlet 实例,并调用 init 办法进行初始化操作)
- 调用 service(request,response)办法来解决申请和响应的操作
- 调用 service 结束后返回服务器 由服务器讲 response 缓冲区的数据取出,以 http 响应的格局发送给浏览器
-
Servlet 的生命周期
Servlet 没有 main()办法,不能独立运行,它的运行齐全由 Servlet 引擎来管制和调度。所谓生命周期,指的是 servlet 容器何时创立 servlet 实例、何时调用其办法进行申请的解决、何时并销毁其实例的整个过程。
- 实例和初始化机会
当申请达到容器时,容器查找该 servlet 对象是否存在,如果不存在,则会创立实例并进行初始化。
- 就绪调用服务阶段
有申请达到容器,容器调用 servlet 对象的 service()办法, 解决申请的办法在整个生命周期中能够被屡次调用;HttpServlet 的 service()办法,会根据申请形式来调用 doGet()或者 doPost()办法。然而,这两个 do 办法默认状况下,会抛出异样,须要子类去 override。
- 销毁机会
当容器敞开时(应用程序进行时),会将程序中的 Servlet 实例进行销毁。
上述的生命周期能够通过 Servlet 中的生命周期办法来察看。在 Servlet 中有三个生命周 期办法,不禁用户手动调用,而是在特定的机会有容器主动调用,察看这三个生命周期办法 即可察看到 Servlet 的生命周期。
-
init 办法,在 Servlet 实例创立之后执行(证实该 Servlet 有实例创立了)
public void init(ServletConfig config) throws ServletException {
System.out.println("实例创立了...");
}service 办法,每次有申请达到某个 Servlet 办法时执行,用来解决申请(证实该 Servlet 进行服务了)
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("服务调用了...");
}destroy 办法,Servlet 实例销毁时执行(证实该 Servlet 的实例被销毁了)
public void destroy() {
System.out.println("实例销毁了...");
} Servlet 的生命周期,简略的概括这就分为四步:servlet 类加载 --> 实例化 --> 服务 --> 销毁。
上面咱们形容一下 Tomcat 与 Servlet 是如何工作的, 看看上面的时序图:
1. Web Client 向 Servlet 容器(Tomcat)收回 Http 申请
2. Servlet 容器接管 Web Client 的申请
3. Servlet 容器创立一个 HttpServletRequest 对象,将 Web Client 申请的信息封装到这个对象 中
4. Servlet 容器创立一个 HttpServletResponse 对象
5. Servlet 容器调 HttpServlet 对象 service 办法,把 Request 与 Response 作为参数,传给 HttpServlet
6. HttpServlet 调用 HttpServletRequest 对象的无关办法,获取 Http 申请信息
7. HttpServlet 调用 HttpServletResponse 对象的无关办法,生成响应数据
8. Servlet 容器把 HttpServlet 的响应后果传给 Web Client
加 VX 理解点我扫码支付
学习更多常识,请退出 QQ 群:1080355292,入群暗号(33)
- 实例和初始化机会
拜访并查看后果
在我的项目正确公布到服务器上之后,用户即可通过浏览器拜访该我的项目中的资源。留神 url 的 格局正确,tomcat 的端口为 8080。
浏览器拜访地址:http:localhost:8080s01ser01
页面成果
后盾后果
到这里咱们的第一个 Servlet 就实现了!
Servlet 的工作流程
实现 Servlet 标准
实现 Servlet 标准,即继承 HttpServlet 类,并到如响应的包,该类中曾经实现了通信的规定,咱们只须要进行业务的实现即可。
package com.xxxx.servlet;
import javax.servlet.http.HttpServlet;
public class Servlet01 extends HttpServlet {
}
重写 service 办法
满足 Servlet 标准只是让咱们的类可能满足接管申请的要求,接管到申请后须要对申请进行剖析,以及进行业务逻辑解决,计算出后果,则须要增加代码,在标准中有一个叫做 service 的办法,专门用来做申请解决的操作,业务代码则能够写在该办法中。
package com.xxxx.servlet;
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 Servlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Hello Servlet!");
resp.getWriter().write("Hello World");
}
}设置注解
在实现好了所有代码的编写后,还须要向服务器阐明,特定申请对应特定资源。
开发 servlet 我的项目,应用 @WebServlet 将一个继承于 javax.servlet.http.HttpServlet 的类定义为 Servlet 组件。在 Servlet3.0 中,能够应用 @WebServlet 注解将一个继承于 javax.servlet.http.HttpServlet 的类标注为能够解决用户申请的 Servlet。
package com.xxxx.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("ser01")
public class Servlet01 extends HttpServlet {@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Hello Servlet!");
resp.getWriter().write("Hello World");
}
}用注解配置 Servlet
@WebServlet(name="Servlet01",value="ser01")
@WebServlet(name="Servlet01",urlPatterns = "ser01")
也能够配置多个拜访门路
@WebServlet(name="Servlet01",value={"ser01",'ser001'})
@WebServlet(name="Servlet01",urlPatterns={"ser01",'ser001'})
公布我的项目并启动服务
到此,须要编写和配置的中央曾经实现,我的项目曾经残缺了,然而如果须要外界可能拜访,还须要将我的项目公布到服务器上并运行服务器。
Servlet 的实现
新建类
- 点击 “src” —> “new” —> “package”,创立一个文件包
- web 我的项目目录构造如下
- 设置项目名称及工作空间
- 设置我的项目的相干信息,抉择 “Next”