zoukankan      html  css  js  c++  java
  • 69期-Java SE-043_Servlet-1

    ### Servlet 生命周期
    
    1、当客户端请求 Servlet 时,Tomcat 会查询当前目标 Servlet 的实例化对象是否存在,如果不存在,则执行第 2 步,如果存在,则执行第 4 步。
    
    2、通过反射机制创建 Servlet 的实例化对象(Tomcat 完成)。
    
    3、调用 init 方法完成初始化的操作。
    
    4、调用 service 方法完成具体的业务逻辑。
    
    5、当关闭 Tomcat 应用的时候,Tomcat 会调用 destory 方法,释放当前 Servlet 对象占用的资源。
    
    
    
    ### Servlet 生命周期方法
    
    - 构造函数,只调用一次,创建对象。
    - init 方法,只调用一次,初始化对象。
    - service 方法,调用多次,执行多少请求,就调用多少次。
    - destory 方法,只调用一次,卸载对象。
    
    
    
    init 方法获取的 ServletConfig,可以用来获取 Servlet 相关配置。
    
    1、getServletName() 获取当前 Servlet 的name,由 web.xml 中配置的 servlet-name 来决定。
    
    2、getInitParamter() 获取当前 Servlet 的初始化参数,配置在 web.xml 中。
    
    3、getServletContext() 获取当前 Servlet 的上下文对象。
    
    4、getInitParameterNames() 获取当前 Servlet 的所有初始化参数名。
    
    ```java
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
      System.out.println(servletConfig.getServletName());
      System.out.println(servletConfig.getServletContext());
      System.out.println(servletConfig.getInitParameter("username"));
      Enumeration<String> names = servletConfig.getInitParameterNames();
      while(names.hasMoreElements()){
        System.out.println(names.nextElement());
      }
    }
    ```
    
    
    
    ### ServletConfig 和 ServletContext 的区别
    
    我们可以通过 ServletConfig 对象获取当前 Servlet 的配置信息。
    
    ServletContext 是当前 Servlet 的上下文,Servlet 的管理者,可以获取当前 Servlet 对象相关的各种资源。
    
    ServletConfig 作用于某个特定的 Servlet 对象,每个 Servlet 对象都有一个 ServletConfig。
    
    ServletContext 作用于整个 Web 应用,多个 Servlet 共用同一个 ServletContext,一个 Web 应用只能有一个 ServletContext,但是可以有多个 ServletConfig。
    
    ServletContext 是全局变量,ServletConfig 是局部变量。
    
    
    
    ### ServletContext 的常用方法
    
    - getInitParameter(String key) 获取全局参数。
    - getServerInfo() 获取当前 Tomcat 容器信息。
    - getContextPath() 获取当前 Web 应用的工程名。
    - getRealPath() 获取当前 Web 应用的绝对路径。

    HelloServlet.java

    package com.southwind.servlet;
    
    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;
    
    public class HelloServlet extends HttpServlet {
        @Override
        public void init(ServletConfig config) throws ServletException {
            System.out.println("ServletConfg:"+config.getInitParameter("username"));
            System.out.println("ServletContext:"+config.getServletContext().getInitParameter("username"));
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("doget");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("dopost");
        }
    }

    MyGenericServlet.java

    package com.southwind.servlet;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    public class MyGenericServlet implements Servlet {
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
    
        }
    
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            String idStr = servletRequest.getParameter("id");
            System.out.println(idStr);
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        @Override
        public void destroy() {
            System.out.println("destory...");
        }
    }

    MyHttpServlet.java

    package com.southwind.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class MyHttpServlet extends MyGenericServlet {
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            String method = request.getMethod();
            switch (method){
                case "GET":
                    doGet(request,response);
                    break;
                case "POST":
                    doPost(request,response);
                    break;
            }
        }
    
        public void doGet(HttpServletRequest request,HttpServletResponse response){
            System.out.println("doGet");
        }
    
        public void doPost(HttpServletRequest request,HttpServletResponse response){
            System.out.println("doPost");
        }
    }

    MyServlet.java

    package com.southwind.servlet;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Enumeration;
    
    public class MyServlet extends MyHttpServlet {
    
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("ServletConfg:"+servletConfig.getInitParameter("username"));
            System.out.println("ServletContext:"+servletConfig.getServletContext().getInitParameter("username"));
            System.out.println(servletConfig.getServletContext().getServerInfo());
            System.out.println(servletConfig.getServletContext().getContextPath());
            System.out.println(servletConfig.getServletContext().getRealPath(""));
        }
    
        @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response) {
    
        }
    
        @Override
        public void doPost(HttpServletRequest request, HttpServletResponse response) {
    
        }
    
        @Override
        public void destroy() {
            System.out.println("destory...");
        }
    }

    index.jsp

    <%--
      Created by IntelliJ IDEA.
      User: southwind
      Date: 2019-07-02
      Time: 20:15
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
      $END$
      </body>
    </html>

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
    
        <context-param>
            <param-name>username</param-name>
            <param-value>admin</param-value>
        </context-param>
    
        <servlet>
            <servlet-name>hello</servlet-name>
            <servlet-class>com.southwind.servlet.HelloServlet</servlet-class>
            <init-param>
                <param-name>username</param-name>
                <param-value>hello</param-value>
            </init-param>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/hello.do</url-pattern>
        </servlet-mapping>
        
        <servlet>
            <servlet-name>test</servlet-name>
            <servlet-class>com.southwind.servlet.MyServlet</servlet-class>
            <init-param>
                <param-name>username</param-name>
                <param-value>root</param-value>
            </init-param>
            <init-param>
                <param-name>password</param-name>
                <param-value>123123</param-value>
            </init-param>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>test</servlet-name>
            <url-pattern>/test.do</url-pattern>
        </servlet-mapping>
        
    </web-app>
  • 相关阅读:
    微软Blazor组件发布,DevExpress v19.1.8中可用:Charts新功能
    数据管理必看!Kendo UI for jQuery过滤器概述
    项目管理工具!DevExpress Winforms Gantt控件 v19.2强势来袭
    WPF界面开发:DevExpress WPF在GridControl中固定行时处理时刻
    bash文件操作之批量修改文件格式与重命名——二合一完美版
    ubuntu 查看文件编码并进行批量编码修改
    文件批量重命名
    Scanf--数据第一个字符是西文字符的scanf函数
    markdown格式速查
    markdown样式速查
  • 原文地址:https://www.cnblogs.com/HiJackykun/p/11182663.html
Copyright © 2011-2022 走看看