Servlet

生命周期

Servlet在服务器上被创建、初始化、响应请求和销毁的整个过程称为Servlet的生命周期。

Servlet生命周期包括以下阶段:

  1. 加载:当服务器启动时,Servlet容器负责加载Servlet类,并创建Servlet实例。
  2. 初始化:Servlet容器调用init()方法初始化Servlet。在此阶段,Servlet可以执行一些初始化操作,如读取配置文件等。
  3. 服务:Servlet容器调用service()方法来处理请求,处理完请求后返回响应。
  4. 销毁:当服务器关闭或者从Servlet容器中移除Servlet时,容器会调用destroy()方法销毁Servlet实例。
public class SimpleServlet implements Servlet {
    private ServletConfig config;
    private String message;
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        message = "Hello World";
    }

    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>SimpleServlet</title></head>");
        out.println("<body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body>");
        out.println("</html>");
    }

    public void destroy() {
    }

    public ServletConfig getServletConfig() {
        return config;
    }

    public String getServletInfo() {
        return "SimpleServlet";
    }
}

 API

Java Servlet API是Servlet的接口规范,提供了处理HTTP请求和响应的类和接口。

下面是一些常用的Servlet API:

  1. javax.servlet.Servlet:Servlet接口,所有Servlet都必须实现该接口。
  2. javax.servlet.ServletConfig:Servlet配置接口,用于获取Servlet的配置信息。
  3. javax.servlet.ServletContext:Servlet上下文接口,用于获取Servlet上下文信息。
  4. javax.servlet.ServletException:Servlet异常类,用于处理Servlet运行时异常。
public class HelloServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>Hello Servlet</title></head>");
        out.println("<body>");
        out.println("<h1>Hello Servlet</h1>");
        out.println("<p>Welcome to the world of Servlets!</p>");
        out.println("</body>");
        out.println("</html>");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        doGet(request, response);
    }
}

容器

Servlet容器是一个Web服务器或应用服务器,用于管理Servlet的生命周期、提供网络服务、处理请求和响应等。

常见的Servlet容器包括Tomcat、Jetty、GlassFish、JBoss等。这些容器都实现了Servlet API中定义的各种接口和类,通过这些接口和类来实现Servlet的生命周期管理、请求和响应处理、会话管理等功能。Servlet容器在运行时会创建多个Servlet实例,每个Servlet实例都有自己的生命周期。当一个Servlet实例被创建时,Servlet容器会调用其init()方法初始化。

public class HelloServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>Hello Servlet</title></head>");
        out.println("<body>");
        out.println("<h1>Hello Servlet</h1>");
        out.println("<p>Welcome to the world of Servlets!</p>");
        out.println("</body>");
        out.println("</html>");
    }
}

HttpServletRequest和HttpServletResponse

HttpServletRequest对象表示客户端请求,HttpServletResponse对象表示Servlet的响应。

常用方法如下:

getParameter(String name):获取指定参数名的请求参数值。

getHeader(String name):获取指定请求头名称的请求头值。

getCookies():获取客户端的Cookie数组。

getMethod():获取HTTP请求方法(如GET、POST等)。

public class ExampleServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  {
        String name = request.getParameter("name");
        String age = request.getParameter("age");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>Example Servlet</title></head>");
        out.println("<body>");
        out.println("<h1>Hello " + name + "!</h1>");
        out.println("<p>You are " + age + " years old.</p>");
        out.println("</body></html>");
    }
}

映射:Servlet映射是指将一个URL请求映射到一个Servlet的过程。

过滤器:Servlet过滤器可以在Servlet请求被处理之前或之后执行预处理或后处理任务,比如日志记录、身份验证等。

会话管理:Servlet会话管理是一种机制,用于在客户端和服务器之间维护一个持久化的会话,以跨多个HTTP请求传递信息。

监听器:Servlet监听器用于监视Web应用程序中的事件,例如Servlet上下文初始化和销毁、会话创建和销毁等。

JSP:JavaServer Pages(JSP)是一种在HTML页面中嵌入Java代码的技术,类似于PHP和ASP。

mvc

mvc是是一种软件设计模式,用于将应用程序分为三个主要部分:模型、视图和控制器。

模型:负责处理业务逻辑、数据访问和数据持久化。它封装了应用程序的核心功能和数据,并提供了可重用的接口供其他组件使用。

public class Student {
    private int id;
    private String name;
    private int age;

    public Student() {
    }

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

视图:负责呈现模型数据以及与用户交互的用户界面。它可以是一个网页、一张图片或任何可以呈现给用户的视觉元素。

控制器:负责协调模型和视图之间的通信。它接收来自用户的请求,处理它们,并将响应返回给用户。

jar包

Jar包是Java中的一种文件格式,用于将一组Java类文件和相关资源打包成一个单独的可执行的JAR文件,以便于分发、部署和使用。JAR文件是Java平台上广泛使用的一种文件格式,可以包含Java类文件、资源文件、配置文件和其他任何类型的文件。通常情况下,JAR文件是通过将所有相关的类和资源文件打包成一个压缩文件来创建的,这个压缩文件的扩展名为.jar。

导入JAR文件的方法有多种,下面是其中两种常用的方法:

将JAR文件添加到Java项目的类路径中。我们可以通过以下步骤来实现:

 将JAR文件复制到项目文件夹中的lib文件夹中。

在Eclipse或其他Java IDE中,右键单击项目并选择Build Path > Configure Build Path。

在弹出的对话框中,选择Libraries选项卡,然后单击Add JARs或Add External JARs按钮,选择刚刚添加到lib文件夹中的JAR文件,单击OK按钮。

import com.example.mylibrary.MyClass;

public class MyApplication {
    public static void main(String[] args) {
        MyClass myClass = new MyClass();
    }
}

以上是本周学习内容,谢谢!

补充:

GenericServlet

直接编写Servlet,比较复杂

有时候init,destroy方法不一定需要,但是却必须重写,导致大量无用代码生成。

构建一个GenericServlet(通用Servlet)抽象类,其中重写所有Servlet接口的方法,并将service方法设置为abstract

我们需要使用Servlet的时候可以继承GenericServlet,减少重写的代码量

同时必须继承service方法实现用户逻

ServletConfig

Servlet的配置信息对象

存储了web.xml中的配置信息;一个Servlet对应一个ServletConfig对象;在Servlet的init函数调用时会传入一个ServletConfig对象。

ServletContext

Servlet的环境(上下文)对象,在一个webapp中只有一个,也就是说不管几个Servlet对象,它们的ServletContext是共用的。

ServletContext在服务器启动时创建,服务器关闭时终止。

HTTP协议

一.HTTP:超文本传输协议,是一个请求响应的协议,是无状态的协议。指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。规定了请求和响应过程中的约定。
请求:
请求报文的内容包括三部分:请求行,请求头,请求体,(里面放的是信息)
响应:
响应报文的内容包括三部分:响应行,响应头,响应体,(里面放的是信息)
2.1 常见状态码:
200 ok 响应成功
400:客户端请求有语法错误
401:请求未经授权
报头域一起使用**
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请 求,一段时间后可能恢复正常
3.url地址:
http://host:port/abs path?
host 主机名 ;port 端口号; abs_path主机上的资源 路径
?后面是get请求方式的参数

二.cookie
cookie的概念:是浏览器的一种机制,它是将document对象的cookie属性提供给js;可以由js封装使用;
cookie是存于用户硬盘的一个文件,这个文件对应一个域名,cookie可以跨越一个域名下的多个网页,但不能跨越多个域名使用。
cookie是存储于访问者的计算机的变量。每当计算机通过浏览器请求某个页面,就会发送cookie。可以使用 js 创建cookie和获取它的值;
3. cookie作用
1、服务器用来识别客户端,客户端使用cookie,服务器端使用session
具体过程:当浏览器首次发送请求时,服务端会产生一个唯一的编号(sessionId)。响应时,把编号(sessionId)发给浏览器端,浏览器端把接收到sessionId保存在cookie里。下次请求时,把sessionId携带上。服务器根据携带的sessionId,就能区分不同的客户端。
保存数据
cookie 可以在客户端保存数据
cookie 会把数据保存浏览器端的硬盘上

Session(会话机制)