• 一遍博客带你上手Servlet


    概念

    Servlet其实就是Java提供的一门动态web资源开发技术。本质就是一个接口。

    快速入门

    1. 创建web项目,导入servlet依赖坐标(注意依赖范围scope,是provided,只在编译和测试时使用)
      pom文件:
    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
    
        <groupId>org.examplegroupId>
        <artifactId>tomcat-demo2artifactId>
        <version>1.0-SNAPSHOTversion>
    
        <dependencies>
            <dependency>
                <groupId>javax.servletgroupId>
                <artifactId>javax.servlet-apiartifactId>
                <version>3.1.0version>
                <scope>providedscope>
            dependency>
        dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.tomcat.mavengroupId>
                    <artifactId>tomcat7-maven-pluginartifactId>
                    <version>2.2version>
    
    
    
    
                plugin>plugins>
        build>
    
        <packaging>warpackaging>
        
    
    project>
    
    1. 创建:定义一个类,实现servlet接口,重写接口中的方法
      在Java目录下创建类,类名后加入implements Servlet实现接口,再CTRL+o重写父类方法。

    2. 配置:在类上使用@WebServlet注解,配置该servlet的访问路径
      再在类名写写明路径的注解。2、3步代码如下:

    package com.itheijma.web;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import java.io.IOException;
    
    
    @WebServlet("/demo1")
    public class ServletDemo1 implements Servlet {
    
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("servlet hello world");
    
        }
    
        public String getServletInfo() {
            return null;
        }
    
        public void destroy() {
    
        }
    
        public void init(ServletConfig servletConfig) throws ServletException {
    
        }
    
        public ServletConfig getServletConfig() {
            return null;
        }
    }
    
    
    1. 访问,启动tomcat,在浏览器中访问
      随后在网页中访问demo1,控制台出现要输出的信息,说明servlet编写成功。

    Servlet执行流程

    浏览器根据路径向服务器发出请求,服务器再根据我们自定义的Servlet接口创建Servlet对象,再调用service方法,执行我们的代码。

    Servlet生命周期

    对象的生命周期指一个对象从被创建到销毁的整个过程。
    servlet运行在servlet容器中,其生命周期由容器来管理,分为四个阶段:

    1. 加载和实例化:默认情况下,当servlet第一次被访问时,由容器创建servlet对象。
    2. 初始化:在servlet实例化之后,容器调用servlet的init()方法初始化这个对象。完成一些如加载配置文件、创建连接等初始化的工作。注:该方法只被调用一次,因为一个servlet对象只被创建一次。
    3. 请求处理:每次请求servlet时,servlet容器都会调用servlet的service()方法对请求进行处理。
    4. 服务终止:当需要释放内存或容器关闭时,容器就会调用servlet实例的destory()方法完成资源的释放。
    package com.itheijma.web;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import java.io.IOException;
    
    
    @WebServlet(urlPatterns = "/demo2",loadOnStartup = 1)
    public class ServletDemo2 implements Servlet {
    
    
        /**
         * 初始化方法
         * 1. 调用时机:默认情况下,servlet被第一次访问时调用
         *  * loadOnStartup
         * 2. 调用次数:1次
         * @param servletConfig
         * @throws ServletException
         */
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("init....");
    
        }
    
    
        /**
         * 提供服务方法
         * 1. 调用时机:每一次servlet被访问时调用
         * 2. 调用次数:多次
         *
         * @param servletRequest
         * @param servletResponse
         * @throws ServletException
         * @throws IOException
         */
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("servlet hello world");
    
        }
    
    
        /**
         * 销毁方法
         * 1. 调用时机:内存释放或服务器关闭的时候,servlet对象会被销毁,调用
         * 2. 调用次数:一次
         */
        public void destroy() {
            System.out.println("destory.....");
    
        }
    
    
        public String getServletInfo() {
            return null;
        }
    
    
        public ServletConfig getServletConfig() {
            return null;
        }
    }
    
    

    Servlet体系结构

    Servlet——Servlet体系根接口
    GenericServlet——Servlet抽象实现类
    HttpServlet——对HTTP协议封装的Servlet实现类
    因为我们开发的是B/S架构的web项目,都是针对HTTP协议的,所以我们自定义的Servlet,会继承HttpServlet

    package com.itheijma.web;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/demo3")
    public class ServletDemo3 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("get...");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("post...");
        }
    }
    
    

    urlPattern配置

    Servlet想要被访问,必须配置其访问路径(urlPattern)

    package com.itheijma.web;
    
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * urlPattern: 一个Servlet可以配置多个访问路径
     */
    @WebServlet(urlPatterns = {"/demo4","/demo5"})
    public class ServletDemo4 extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("demo4 get.....");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        }
    }
    
    
    package com.itheijma.web;
    
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * urlPattern
     *  *目录匹配 /user/*
     */
    @WebServlet(urlPatterns = "/user/*")
    public class ServletDemo6 extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("demo6 get.....");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        }
    }
    
    
    package com.itheijma.web;
    
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * urlPattern
     *  *扩展名匹配: *.do
     */
    @WebServlet(urlPatterns = "*.do")
    public class ServletDemo7 extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("demo7 get.....");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        }
    }
    
    
    package com.itheijma.web;
    
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * urlPattern
     *  *任意匹配 /*  /
     */
    @WebServlet(urlPatterns = "/")
    public class ServletDemo8 extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("demo8 get.....");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        }
    }
    
    

    idea模板创建Servlet


  • 相关阅读:
    Java后端开发——房贷计算器(Ajax版、Json版、等额本息+等额本金)
    js构造函数中this一个箭头函数大坑
    报错:Gradle build failed.See the Console for details.(已解决)
    『现学现忘』Git基础 — 37、标签tag(二)
    编译和链接
    Unity热更新
    基于JavaWeb的食品团购网的设计与实现
    Linux——进程控制之替换
    Day48——前端知识CSS
    计算机网络-网络层:IP协议
  • 原文地址:https://www.cnblogs.com/he-cheng/p/17269573.html