目录
一、servlet
1、什么是Servlet
2、什么是servlet容器
二、Servlet核心技术
1、Servlet的生命周期
2、实现一个Servlet
一、servlet
servlet规范文档:
Jakarta Servlet Specificationhttps://jakarta.ee/specifications/servlet/5.0/jakarta-servlet-spec-5.0.html#what-is-a-servlet
1、什么是Servletservlet 是基于 Jakarta 技术的 Web 组件,由容器管理,可生成动态内容。与其他基于 Jakarta 技术的组件一样,servlet 是独立于平台的 Java 类,它们被编译为平台中立的字节码,可以动态加载到支持 Jakarta 技术的 Web 服务器中并由其运行。容器,有时称为 servlet 引擎,是提供 servlet 功能的 Web 服务器扩展。Servlet 通过 Servlet 容器实现的请求/响应范例与 Web 客户端交互。
2、什么是servlet容器servlet 容器是 Web 服务器或应用程序服务器的一部分,它提供用于发送请求和响应的网络服务、解码基于 MIME 的请求以及格式化基于 MIME 的响应。servlet 容器还包含并管理 servlet 的整个生命周期。
servlet 容器可以内置到主机 Web 服务器中,或者作为附加组件通过该服务器的本机扩展 API 安装到 Web 服务器。Servlet 容器也可以内置或可能安装到支持 Web 的应用程序服务器中。
所有 servlet 容器都必须支持 HTTP 作为请求和响应协议,但可能支持其他基于请求/响应的协议,例如 HTTPS(基于 SSL 的 HTTP)。容器必须实现的 HTTP 规范的必需版本是 HTTP/1.1 和 HTTP/2。当支持 HTTP/2 时,servlet 容器必须支持“h2”和“h2c”协议标识符(如 HTTP/2 RFC 的 3.1 节中所指定)。这意味着所有 servlet 容器都必须支持 ALPN。因为容器可能具有 RFC 7234(HTTP/1.1 缓存)中描述的缓存机制,它可以在将来自客户端的请求传递给 servlet 之前修改它们,可以在将它们发送给客户端之前修改 servlet 产生的响应,或者可以响应在符合 RFC 7234 的情况下请求而不将它们传递给 servlet。
servlet 容器可以对 servlet 执行的环境设置安全限制。可以使用 Java 平台定义的权限体系结构来设置这些限制。例如,一些应用服务器可能会限制Thread
对象的创建,以确保容器的其他组件不会受到负面影响。
Java SE 8 是构建 servlet 容器时必须使用的底层 Java 平台的最低版本。
二、Servlet核心技术 1、Servlet的生命周期 servlet 通过定义良好的生命周期进行管理,该生命周期定义了如何加载和实例化、初始化、处理来自客户端的请求以及停止服务。这个生命周期在 API 中由所有 servlet 必须通过 或抽象类直接或间接实现的接口的init
、service
和 destroy
方法表示。jakarta.servlet.Servlet``GenericServlet``HttpServlet
package com.tang;
import jakarta.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init()...只会被执行一次!");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
PrintWriter writer = servletResponse.getWriter();
writer.print("hello Servlet");
writer.flush();
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("destroy()..只有一次");
}
}
2、实现一个Servlet
当服务器接收到一个请求,就要有一个Servlet去处理这个请求,所以完成一个Servlet通常需要两步走。一方面要写一个java程序定义一个Servlet,另一方面需要配置Servlet确定Servlet要处理哪一个请求。
1)创建Servlet的三种方式
-
实现javax.servlet.Servlet接口
public class HelloServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init()...只会被执行一次!"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { PrintWriter writer = servletResponse.getWriter(); writer.print("helloServlet"); writer.flush(); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("destroy()..只有一次"); } }
-
继承javax.servlet.GenericServlet类
public class HelloServlet2 extends GenericServlet { public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { PrintWriter writer = servletResponse.getWriter(); writer.print("helloServlet"); writer.flush(); } }
-
继承javax.servlet.http.HttpServlet类
public class HelloServlet3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); writer.print("helloServlet"); writer.flush(); } }
一般用第三种会比较方便
注意:创建Servlet文件后,需要在web.xml文件中完成Servlet的配置才能使用
配置Servlet: 使用web.xml文件配置
hello
com.tang.HelloServlet
hello
/hello1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)