• Servlet环境搭建,生命周期


    Servlet

    是运行在服务器(tomcat)的java组件

    Servlet组件主要完成两个部分工作

    ​ 1.接受客户端请求

    ​ 2.返回服务器响应

    环境搭建

    UserServlet.java

    package com.javakc.web1.user;
    
    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 UserServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("UserServlet doGet method!");
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("UserServlet doPost method!");
    
            //响应类型
            response.setContentType("text/html;charset=utf-8");
            java.io.Writer writer = response.getWriter();
            writer.write("");
            writer.write("");
            writer.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    web.xml

    
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
    
        
        <servlet>
            <servlet-name>UserServletservlet-name>
            <servlet-class>com.javakc.web1.user.UserServletservlet-class>
        servlet>
    
        
        <servlet-mapping>
            <servlet-name>UserServletservlet-name>
            <url-pattern>/user.dourl-pattern>
        servlet-mapping>
    web-app>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    index.html

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
    <a href="/web1/user.do">Helloa>  
    
    <form action="/web1/user.do" method="post">  
        <table>
            <tr>
                <td>姓名:<input type="text" name="username" value="">td>
            tr>
            <tr>
                <td>年龄:<input type="number" name="userage" value="">td>
            tr>
            <tr>
                <td>日期:<input type="date" name="birthday" value="">td>
            tr>
            <tr>
                <td>爱好:
                    <input type="checkbox" name="hobby" value="1">爱好1
                    <input type="checkbox" name="hobby" value="2">爱好2
                    <input type="checkbox" name="hobby" value="3">爱好3
                    <input type="checkbox" name="hobby" value="4">爱好4
                td>
            tr>
            <tr>
                <td><input type="submit" value="提交">td>
            tr>
        table>
    form>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    Servlet生命周期

    Servlet是由服务器来负责实例化, 服务器默认管理的方式(单例模式)懒汉模式, 在客户端第一次访问服务器资源时, 由服务器负责对象的实例化过程.

    ​只有在第一次实例化时调用, 且只会调用一次!

    实例化

    package com.javakc.web1.user;
    
    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 UserServlet1 extends HttpServlet {
        public UserServlet1() {
            System.out.println("实例化");
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("UserServlet doGet method!");
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("UserServlet doPost method!");
    
            //响应类型
            response.setContentType("text/html;charset=utf-8");
            java.io.Writer writer = response.getWriter();
            writer.write("");
            writer.write("");
            writer.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
     
        <servlet>
            <servlet-name>UserServlet1servlet-name>
            <servlet-class>com.javakc.web1.user.UserServlet1servlet-class>
            
            <load-on-startup>0load-on-startup>
        servlet>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    初始化方法

    package com.javakc.web1.user;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.Enumeration;
    
    //初始化方法
    public class UserServlet2 extends HttpServlet {
        @Override
        public void init(ServletConfig config) throws ServletException {
            //ServletName
            System.out.println(config.getServletName());
    
            //应用作用域
            System.out.println(config.getServletContext());
    
            //获取初始化参数
            String username = config.getInitParameter("username");
            System.out.println("username:" + username);
    
            //获得初始化参数名称
            Enumeration<String> enumerations = config.getInitParameterNames();
            while (enumerations.hasMoreElements()) {
                String name = enumerations.nextElement();
                System.out.println(name + ":" + config.getInitParameter(name));
            }
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("UserServlet doGet method!");
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("UserServlet doPost method!");
    
            //响应类型
            response.setContentType("text/html;charset=utf-8");
            java.io.Writer writer = response.getWriter();
            writer.write("");
            writer.write("");
            writer.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
     
        <servlet>
            <servlet-name>UserServletservlet-name>
            <servlet-class>com.javakc.web1.user.UserServlet2servlet-class>
            
            <init-param>
                <param-name>usernameparam-name>
                <param-value>adminparam-value>
            init-param>
            <init-param>
                <param-name>passwordparam-name>
                <param-value>123456param-value>
            init-param>
    
            
            <load-on-startup>0load-on-startup>
        servlet>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行

    ​ Servlet组件中运行方法是用来接收客户端请求, 返回服务器响应的方法!

    ​ 客户端发送一次请求, 运行方法便会调用一次!

    1.重写service

    public class UserServlet extends HttpServlet {
    	
        void service(HttpServletRequest request, HttpServletResponse response)
        {
            
        }    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.重写doGet + doPost

    public class UserServlet extends HttpServlet {
    	
        void doGet(HttpServletRequest request, HttpServletResponse response)
        {
            
        }
        
        void doPost(HttpServletRequest request, HttpServletResponse response)
        {
            
        }    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    销毁

    在服务器关闭阶段时完成方法调用, 释放资源

    package com.javakc.web1.user;
    
    import javax.servlet.http.HttpServlet;
    
    //销毁
    public class UserServlet4 extends HttpServlet {
        @Override
        public void destroy() {
            System.out.println("destroy");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    Servlet生命周期用法

    package com.javakc.web1.user;
    
    import com.javakc.web1.db.Utils;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebInitParam;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.sql.*;
    
    //生命周期用法
    public class UserServlet5 extends HttpServlet {
        int sum = 0;
    
        //初始化方法
        @Override
        public void init() throws ServletException {
            Connection connection = null;
            Statement statement = null;
            ResultSet resultSet = null;
            try {
                connection = Utils.getConnection();
                statement = connection.createStatement();
                String sql = "select total from sumTotal";
                resultSet = statement.executeQuery(sql);
                while (resultSet.next()) {
                    sum = resultSet.getInt(1);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    resultSet.close();
                    statement.close();
                    connection.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    
        //运行方法
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("当前访问量:" + (++sum));
        }
    
        //销毁方法
        @Override
        public void destroy() {
            Connection connection = null;
            PreparedStatement preparedStatement = null;
            try {
                connection = Utils.getConnection();
                String sql = "update sumTotal set total =? where id =? ";
                preparedStatement = connection.prepareStatement(sql);
                preparedStatement.setInt(1, sum);
                preparedStatement.setInt(2, 1);
                preparedStatement.executeUpdate();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    preparedStatement.close();
                    connection.close();
                } catch (Exception throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    
        <servlet>
            <servlet-name>UserServlet5servlet-name>
            <servlet-class>com.javakc.web1.user.UserServlet5servlet-class>
            
            <load-on-startup>0load-on-startup>
        servlet>
    
        
        <servlet-mapping>
            <servlet-name>UserServlet5servlet-name>
            <url-pattern>/user5.dourl-pattern>
        servlet-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    访问路径:http://localhost:8080/web1/user5.do
    
    • 1
  • 相关阅读:
    运维监控系统PIGOSS BSM 对“实时数据复制”系统的监控管理
    Springboot----项目整合微信支付(利用RabbitMQ延迟队列处理用户退款)
    stack 相关题目 day 1
    “查找”学习提纲(三)——总结
    java rsa 加解密 验证
    python机器人编程——基于单目视觉、固定场景下的自动泊车(上)
    pytorch lighting: Trying to resize storage that is not resizable
    中文写代码?开始不信后来用中文写了剧情小游戏!嗯,真香~
    [西湖论剑 2022]web部分题解(更新中ing)
    【Linux实验】软中断通信
  • 原文地址:https://blog.csdn.net/qq_45939736/article/details/126795918