JavaWeb学习笔记 | Servlet

2019-07-31  本文已影响0人  一颗白菜_

1.Servlet的简介

(1).Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用"请求/响应"的模式

(2).Servlet容器响应客户请求的过程

image image.gif

2.Servlet的生命周期方法

(1).构造器:只被调用一次,只有第一次请求Servlet时,创建Servlet的实例,调用构造器,这说明Servlet是单实例的。

(2).init方法:只被调用一次,在创建好实例后立即被调用。用于初始化当前Servlet。

(3).service:被多次调用,每次请求都会调用service方法。实际用于响应请求的。

(4).destroy:只被调用一次,在当前Servlet所在的WEB应用被卸载前调用。用于释放当前Servlet所占用的资源。

3.Servlet容器响应客户服务器的过程

(1).Servlet引擎检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第四步,否则,执行第二步。

(2).装载并创建该Servlet的一个实例对象:调用该Servlet的构造器。

(3).调用Servlet实例对象的init()方法。

(4).创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递过去。

(5).WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法

4.运行第一个Servlet程序

(1).新建一个Java类HelloServlet,用于实现Servlet,如下:

public class HelloServlet implements Servlet{

    @Override
    public void destroy() {
        System.out.println("destroy....");

    }

    @Override
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        System.out.println("getServletConfig");

        return null;
    }

    @Override
    public String getServletInfo() {
        // TODO Auto-generated method stub
        System.out.println("getServletInfo");
        return null;
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        // TODO Auto-generated method stub

    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {

    }
    public HelloServlet() {
        // TODO Auto-generated constructor stub
        System.out.println("HelloServlet constructor");
    }

}

(2).Servlet的注册和映射(配置在web.xml文件)

(a).Servlet程序必须在WEB应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问

(b).一个<servlet>元素用于注册一个Servlet,它包含有两个主要的子元素<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名

(c).一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径

    <servlet>
        <!-- Servlet注册的名字 -->
        <servlet-name>helloServlet</servlet-name>
        <!-- Servlet的全类名,指向某一个java类 -->
        <servlet-class>com.one.HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <!-- 需要和某一个Servlet节点的Servlet-name子节点的文本节点一致-->
        <servlet-name>helloServlet</servlet-name>
        <!-- 映射具体的访问路径:/代表当前WEB应用的根目录 -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
image.gif

通过这样的配置后即可通过http://localhost:8080/Day_1/hello****来访问

5.关于web.xml配置中的load-on-startup参数

可以指定Servlet被创建的时机。

若为负数,则在第一次请求时被创建。

若为0或正数,则在当前WEB应用被Servlet容器加载时创建实例,如果有多个Servlet,则该数值越小,越早被创建。

    <servlet>
        <!-- Servlet注册的名字 -->
        <servlet-name>helloServlet</servlet-name>
        <!-- Servlet的全类名,指向某一个java类 -->
        <servlet-class>com.one.HelloServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>secondServlet</servlet-name>
        <servlet-class>com.one.SecondServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <!-- 结果为com.one.HelloServlet先被加载 -->
image.gif
上一篇下一篇

猜你喜欢

热点阅读