Servlet基础

Servlet是一个Java程序,是在服务器上运行 以处理客户端请求并做出响应 的程序

Servlet的生命周期

  1. HTTP请求

  2. 解析请求

  3. 创建Servlet实例

  4. 调用init()方法,初始化servlet

  5. 调用service()方法,执行内容

  6. 输出响应信息

  7. 响应

  8. 调用destroy()方法,销毁实例,服务终止。

 Servlet基础

什么是Servlet

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

Servlet生命周期

package com.cn.xszx.servlet;
import javax.servlet.*;
import java.io.IOException;
public class ServletTest implements Servlet{
    @Override
    //初始化方法,在servlet被创建时执行,执行一次
    public void init(ServletConfig servletConfig) throws ServletException {                     System.out.println("初始化servlet");
    }
    @Override
    //获取ServletConfig对象:servlet的配置对象
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    //提供服务方法,每一次Servlet被访问时执行,多次执行
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("servlet被调用");
    }
    @Override
    //获取Servlet的一些信息,如版本、作者
    public String getServletInfo() {
        return null;
    }
    @Override
    //销毁方法,在服务器正常关闭时执行,执行一次
    public void destroy() {
        System.out.println("servlet被销毁");
    }
}

打印出:

Servlet基础

 

servlet的执行原理

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

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

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

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

  5. 调用方法

在xml配置映射关系

<servlet>
    <servlet-name>servletTest</servlet-name>
    <servlet-class>com.cn.xszx.servlet.ServletTest</servlet-class>
</servlet>
<--映射地址-->
<servlet-mapping>
        <servlet-name>servletTest</servlet-name>
        <url-pattern>/servletTest</url-pattern>
</servlet-mapping>

Servlet相关接口

ServletConfig接口

  • 在Servlet初始化过程中获取配置信息

  • 一个Servlet只有一个ServletConfig对象

    常用方法:

    • String getInitParameter(String name):获取web.xml中设置的name命名的初始化参数值

    • ServletConfig getServletContext():返回Servlet的上下文对象引用

配置初始化信息

<servlet>
<!--配置初始化参数   当前servlet使用-->
<init-param>
    <param-name>namespace</param-name>
    <param-value>hello servletTest</param-value>
</init-param>
</servlet>
@Override
public void init(ServletConfig servletConfig) throws ServletException {
    String namespace = servletConfig.getInitParameter("namespace");                         System.out.println("初始化servlet");
    System.out.println("初始化信息"+namespace);
}

ServletContext接口

  • 获取Servlet上下文

  • 常用方法:

    • ServletContext getContext(String path):返回服务器上与指定URL相对应的ServletContext对象

    • void setAttribute(String name,Object obj):设置Servlet中的共享属性

    • Object getAttribute(String name):获取Servlet中设置的共享

<context-param>
<!--配置全局参数,所有servlet都可访问-->
    <param-name>姓名</param-name>
    <param-value>张三</param-value>
</context-param>
@Override
public void init(ServletConfig servletConfig) throws ServletException {
    ServletContext servletContext=servletConfig.getServletContext();
    String name= servletContext.getInitParameter("姓名");
    System.out.println(name);
}

Servlet基础 

 

注解配置

servlet3.0

  • 支持注解配置,可以不需要web.xml

  • 步骤:

    • 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml

    • 定义一个类,实现Servlet接口

    • 复写方法

    • 在类上使用@webservlet注解,进行配置

      @webServlet("资源路径")
      ​
      public class ServletTest implements Servlet{}

绝对路径

${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> 。也就是取出部署的应用程序名或者是当前的项目名称

HttpServlet

HttpServlet是一个类,它继承了GenericServlet,GenericServlet实现了Servlet.–>因此HttpServlet也能实现Servlet的功能. ​ HttpServlet的作用比Servlet更加强大,它能够更快速的处理Http请求,能够更快的根据请求方式(Get,Post)来处理Http请求.继承HttpServlet后不用重写Service方法,也不用去实现init等方法。这些都在HttpServlet和GenericServlet有了默认实现.HttpServlet是针对处理Http请求而设计的一个类

  • HttpServlet继承于GenericServlet

    • 处理HTTP协议的请求和响应

  • HttpServlet的方法

    • void doGet(HttpServletRequest request,HttpServletResponse response) 以Get请求服务时调用

    • void doPost(HttpServletRequest request,HttpServletResponse response) 以Post请求服务时调用

上一篇:2021-03-24


下一篇:图书管理系统设计与实现(毕业设计)