Servlet的基础

Servlet入门

Servlet : server applet(服务器小程序)

  • 概念 : 运行在服务器端的小程序
  • Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。自己定义一个类,来实现Servlet接口,复写方法。

步骤:

  1. 创建JavaEE项目

  2. 定义一个类,实现servlet接口

    public class ServletDemo1 implements Servlet
    
  3. 实现接口中的抽象方法

  4. 配置servlet

    在web.xml中

    <!--  配置Servlet  -->
        <servlet>
            <servlet-name>demo1</servlet-name>
            <servlet-class>com.web.servlet.ServletDemo1</servlet-class> 
        </servlet>
        <servlet-mapping>
            <servlet-name>demo1</servlet-name>
            <url-pattern>/demo1</url-pattern>   
        </servlet-mapping>
    

执行原理

执行原理:

  1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的servlet的资源路径

  2. 查找web.xml文件,足否有对应的<url-pattern>标签体内容。

  3. 如果有,则在找到对应的<servlet-class>全类名

  4. tomcat会将字节码文件加载进内存,并且创建其对象

  5. 调用其方法

Servlet中的生命周期

被创建:执行init()方法,执行一次
  • 默认情况下,第一次访问时,Servlet被创建

  • 可以配置执行Servlet的创建时机:

    ​ 在web.xml文件中配置:

    <servlet>
        <servlet-name>demo1</servlet-name>
        <servlet-class>com.web.servlet.ServletDemo1</servlet-class>
        <load-on-startup>5</load-on-startup>    <!-- 这里配置 -->
    </servlet>
    
    1. <load-on-startup>-1</load-on-startup>值为负数时,第一次被访问时创建
    2. <load-on-startup>5</load-on-startup>值为0或正整数时,在服务器启动时创建
  • Servlet的init方法,只执行一-次,说明一-个Servlet在内存中只存在一 个对象,Servlet是单例的

    • 多个用户同时访问时,可能存在线程安全问题。
    • 解决 : 尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值
提供服务:执行service()方法,可执行多次
  • 每次访问Servlet时,Service方法都会被调用一 次。
被销毁:执行destroy()方法,执行一次
  • Servlet被销毁时执行。服务器关闭时,Servlet被销毁
  • 只有服务器正常关闭时,才会执行destroy方法。
  • destroy方法在servlet被销毁之前执行,一般用于释放资源
import javax.servlet.*;
import java.io.IOException;

public class ServletDemo2 implements Servlet {

    /*
    * 初始化方法
    *   在Servlet被创建时执行。执行一次
    * */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init......");
    }

    /*
    * 获取ServletConfig对象
    *   ServletConfig:Servlet的配置对象
    * */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /*
    * 提供服务的方法
    *   每一次Servlet被访问时执行。执行多次
    * */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service......");
    }

    /*
    *获取Servlet的一些信息,版本,作者等等。。。
    * */
    @Override
    public String getServletInfo() {
        return null;
    }
    /*
    * 销毁方法
    *   在服务器正常关闭时执行。执行一次
    * */
    @Override
    public void destroy() {
        System.out.println("destroy......");
    }
}

Servlet3.0

  • 好处:

    • 支持注解配置。可以不需要web.xml
  • 步骤:

    1. 创建JavaEE项目, 选挥Servlet的版本3. 0以上,可以不创建web.xml

    2. 定义一个类,实现Servlet接口

    3. 复写方法

    4. 在类上使用@WebServlet注解,进行配置

      @WebServlet("资源路径")

      @WebServlet(urlPatterns = "/demo01")   // 或者 @WebServlet("/demo01")
      public class ServletDemo01 implements Servlet {
          ....
      }
      

IDEA与tomcat的相关配置

  1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件

    • 查看控制台的log : Using CATALINA_BASE: “C:\Users\maj.IntelliJIdea2019.3\system\tomcat\Tomcat_8_5_59_MyServlet”
  2. 工作空间项目tomcat部署的web项目

    • tomcat真正访问的是“tomcat部署的web项目”,”tomcat部署的web项目”对应着"工作空间项目”的web目录下的所有资源
    • WEB-INF目录下的资源不能被浏览器直接访问。
  3. 断点调试 : 使用"小虫子"启动dubug启动

Servlet的体系结构

				Servlet是一个接口
		
                        |

		GenericServlet 实现了Servlet接口,是一个抽象类

                        |

HttpServlet 继承了GenericServlet(实现了Servlet接口),也是一个抽象类
  • GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象

  • 将来定义Servlet时,可以继承GenericServlet,实现service()方法即可

  • HttpServlet:对HTTP协议的一种封装,简化操作

    1. 定义类继承HttpServlet
    2. 复写doGet/doPost方法
    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("/demo02")
    public class ServletDemo02 extends HttpServlet {
        @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...");
        }
    }
    

Servlet相关配置

urlpartten : Servlet访问路径

  1. 一个servlet可以定义多个访问路径 : @webservlet({" /d4" ,"/dd4" ," /ddd4"})
  2. 路径定义规则∶
    1. /xxx
    2. /xxx/xxx : 多层路径,目录结构
    3. *.do (切记这里不能写"/"):代表着以.do结尾
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值