如何使用ij编写Servlet的生命周期?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用ij编写Servlet的生命周期?相关的知识,希望对你有一定的参考价值。

参考技术A

在IntelliJ IDEA(以下简称IJ)中编写Servlet生命周期,需要完成以下步骤:

    创建一个新的Web项目。

    在菜单栏中选择“File” -> “New” -> “Project”。

    在左侧的模板列表中选择“Java Enterprise”。

    在右侧的内容面板中选择“Web Application”模板,并指定项目名称和存储位置,然后点击“Next”按钮。

    按照向导指示进行下一步操作,直到创建新项目成功。

    创建一个新的Servlet类。

    在项目资源管理器中,展开“src/main/java”目录,并找到默认的Servlet类“HelloServlet.java”。

    右键单击该类,选择“Refactor” -> “Rename”,将其重命名为“LifecycleServlet.java”。

    右键单击“src/main/java”目录,选择“New” -> “Servlet”。

    在“Create Servlet”对话框中,指定Servlet名称、URL映射和包名等信息,并选择“LifecycleServlet.java”作为父类。

    点击“OK”按钮以创建新的Servlet类。

    重写Servlet的生命周期方法。 在LifecycleServlet类中,可以重写Servlet接口定义的以下五个生命周期方法:

    public class LifecycleServlet extends HttpServlet    @Override
    public void init() throws ServletException        // Servlet初始化时执行的代码
       @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException        // Servlet处理请求时执行的代码
       @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException        // 处理HTTP GET请求时执行的代码
       @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException        // 处理HTTP POST请求时执行的代码
       @Override
    public void destroy()        // Servlet销毁时执行的代码


    其中,init()方法在Servlet被创建时执行,service()方法在每次请求到达Servlet时执行,doGet()和doPost()方法分别在处理HTTP GET和POST请求时执行,destroy()方法在Servlet被销毁时执行。您可以在相应的方法中编写自定义的代码,以实现特定的业务逻辑。

    配置Servlet映射及Web服务器。 在LifecycleServlet类中重写完生命周期方法后,还需要在web.xml文件中配置Servlet映射及其他相关参数,以便Web服务器正确加载和调用Servlet。具体方式如下:

    在项目资源管理器中,打开“WEB-INF”目录,在其中找到“web.xml”文件。

    在“web.xml”文件中添加以下内容:

    <servlet>
    <servlet-name>LifecycleServlet</servlet-name>
    <servlet-class>com.example.LifecycleServlet</servlet-class>
    <load-on-startup>1</load-on-startup></servlet><servlet-mapping>
    <servlet-name>LifecycleServlet</servlet-name>
    <url-pattern>/lifecycle</url-pattern></servlet-mapping>

    其中,servlet-name指定Servlet的名称,servlet-class指定Servlet的完整类名,load-on-startup指定Servlet在Web服务器启动时是否立即加载(这里设置为1表示是),url-pattern指定Servlet的URL映射路径。

    部署并运行Web应用程序。 完成上述所有步骤后,就可以将Web应用程序部署到Web服务器上,并通过浏览器访问相应的URL,从而测试Servlet的生命周期方法是否按预期执行了。

    以上是使用IJ编写Servlet生命周期的主要步骤。值得注意的是,在实际开发中,Servlet还有很多其他的用法和细节,需要进一步学习和掌握。

Servlet --- [Servlet,servlet的创建及使用,servlet的生命周期]



什么是Servlet?


Servlet(Server Applet) 是Java Servlet的简称,意为用Java编写的服务器端的程序,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用Servlet方法,Servlet和客户通信采用“请求/响应”的模式

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:

  • 客户端发送请求至服务器端;
  • 服务器将请求信息发送至 Servlet;
  • Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
  • 服务器将响应返回给客户端。

servlet的创建及使用


首先在WEB-INF文件夹中创建名为libDirectory ;将需要的jar包文件导入.

将jar包添加到项目中.

按住Ctrl,将两个jar包同时选中,右键,选择Add as Library

(1)创建一个类继承javax.servlet.http包下的HttpServlet

/**
 * 登录功能的servlet
 */
public class LoginServlet extends HttpServlet {
    //构造方法:只被调用一次,仅创建一个servlet对象;
    //只有第一次访问Servelt时或服务器启动时创建Servlet实例。
    public LoginServlet() {
        System.out.println("无参构造方法");
    }
    //Init方法:只被调用一次,在Servlet实例创建好实例后立即执行,用于执行一些初始化Servlet的操作。
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init方法");
    }
    //service方法:多次调用,每次请求都调用service方法,根据请求方式调用doGet()或doPost()方法。
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("service方法");
    }
    //destroy:只被调用一次,在服务器关闭时调用,执行一些操作。
    @Override
    public void destroy() {
        System.out.println("destory方法");
    }
}

(2)在web.xml文件中配置Servlet

xml: 可扩展性标记语言; 主要用于存储数据.
web.xml:存储web项目的配置信息,在服务器启动时,由服务器读取.

<servlet>元素用于注册Servlet,它包含有两个主要的子元素:
<servlet-name><servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名(取到类的字节码文件地址)。

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

url-pattern配置模式”/”代表当前web应用的根目录
精确匹配 例如/test 访问http://10.43.11.143/myapp/test
匹配任意的url 例如/* 访问http://10.43.11.143/myapp/abc
同一个Servlet可以被映射到多个URL上

例如:
<servlet-mapping>
  <servlet-name>MyServlet</servlet-name>
  <url-pattern>/demo.html</url-pattern> 
  <url-pattern>/table</url-pattern>
</servlet-mapping>

关于在web.xml文件中配置Servlet以及映射文件配置

 <!--配置用于注册的Servlet-->
    <servlet>
        <servlet-name>login</servlet-name>
        <!--通过反射机制:可根据类的地址动态创建对象-->
        <servlet-class>com.lzq.startweb01.servlet.LoginServlet</servlet-class>
    </servlet>
    
<!--<servlet-mapping> 用于映射已注册的Servlet的对外访问路径-->
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

(3)编写前端jsp文件

例如,写个 form 表单,发送的数据将会对应到<servlet-mapping>映射文件处,再映射<servlet>配置文件处;然后通过< servlet-class> 创建 LoginServlet 类对象.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>初识JavaWeb</title>
  </head>
  <body>
  <form action="login">
    账号:<input type="text" name="account"/><br/>
    密码:<input type="password" name="password"/><br/>
    <input type="submit" value="登录"/>
  </form>
  </body>
</html>

(4)启动服务器

第一次点击登录提交时;控制台打印:

无参构造方法
init方法
service方法

第二次登录提交时;控制台打印:

service方法

关闭服务器时,销毁方法destroy 执行.



其他配置文件

web.xml文件配置<servlet>时,还可使用标签元素 < load-on-startup>
当值小于0或者没有指定时,在该servlet被选择时才会去加载。
当值为0或者大于0,就会在服务器启动时加载servlet;
值越小,加载顺序优先级越高.

案例:

<servlet>
        <servlet-name>login</servlet-name>
        <!--反射机制:可根据类的地址动态创建对象-->
        <servlet-class>com.lzq.startweb01.servlet.LoginServlet</servlet-class>
        <!--默认为负数,当改为非负数时,服务器一启动,就会创建该servlet对象,加载该servlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>

启动服务器;此时还未提交表单;无参构造方法与init方法就已经调用了;也是由于<load-on-startup>设置了非负数的缘故,服务器已启动,登录的servlet就加载


web.xml文件配置<servlet>时,还可使用标签元素<init-param>;
用于配置初始化参数

案例:

<servlet>
        <servlet-name>login</servlet-name>
        <!--拿到这个类的字节码文件地址-->
        <!--反射机制:可根据类的地址动态创建对象-->
        <servlet-class>com.lzq.startweb01.servlet.LoginServlet</servlet-class>
        
        <!--配置初始化参数-->
        <init-param>
            <param-name>names</param-name>
            <param-value>9</param-value>
        </init-param>
    </servlet>

LoginServlet的init初始化方法中可以获取这个参数值;

//Init方法:只被调用一次,在Servlet实例创建好实例后立即执行,用于执行一些初始化Servlet的操作。
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init方法");
        //可获取到配置参数名为names的值;
        System.out.println(config.getInitParameter("names"));
    }

启动服务器;提交表单之后;获取到了在<init-param>param-value中设置的数值.



servlet的生命周期


实例化:

调用构造方法:只被调用一次,仅创建一个servlet对象;只有第一次访问Servelt时或服务器启动时创建Servlet实例。
无参构造方法默认隐式存在

初始化:

调用Init方法:只被调用一次,在Servlet实例创建好实例后立即执行,用于执行一些初始化Servlet的操作。
若没有初始化,则默认调用父类的方法.

相关服务

service方法:可以多次调用,提供服务;每次请求都会调用service方法,根据请求方式调用doGet()或doPost()方法。

销毁(死亡)

destroy:只被调用一次,在服务器关闭时调用,例如执行数据日志保存,数据备份
若最终没有需要执行的;可以不去重写方法,但是默认调用父类的destory方法

无参构造的实例化方式,默认存在;
初始化方法 init ,默认调用父类的;
service方法,可调用父类中的; 在父类中会判断请求方式 ; get对应doGet方法; post对应doPost 方法.
销毁方法 destory 默认调用父类的;


更改默认的前端文件;
在web.xml添加配置

<!--设置默认加载页面-->
    <welcome-file-list>
        <welcome-file>指定的页面</welcome-file>
    </welcome-file-list>

以上是关于如何使用ij编写Servlet的生命周期?的主要内容,如果未能解决你的问题,请参考以下文章

Servlet的生命周期

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器过滤器等Web组件以及MVC架构

Servlet编程:如何使用Servlet

JavaWeb学习笔记-07servlet生命周期

Servlet的生命周期

Servlet的生命周期