HttpServlet

  • HttpServlet是GenericServlet的子类,又是在GenericServlet的基础上做了增强。
  • HTTP的请求方式包括DELETE,GET,OPTIONS,POST,PUT和TRACE,在HttpServlet类中分别提供了相应的服务方法, 它们是,doDelete(),doGet(),doOptions(),doPost(), doPut()和doTrace().
  • 如果继承了HttpServlet没有实现任何的doXxx方法则会抛出一个异常:405


    HttpServlet的执行过程

    图解HttpServlet的执行方式

Servlet细节

  • 不要再Servlet中创建成员,创建局部变量就好
    可以创建无状态成员
    可以创建有状态的成员,但状态必须是只读状态
  • 中配置 ,其中给出的是非负整数
    0小的先创建,再创建大的
  • :用来指令Servlet的访问路径,即url,路径必须是/开头
    /servlet/*:路径匹配
    .do:扩展名匹配
    /
    :啥都匹配

web.xml文件的继承

在${CATALINA_HOME}\conf\web.xml中的内容,相当于写到每个项目的web.xml中,他是所有web.xml的父文件
default:它的优先级最低,如果一个请求没有处理,那么它来处理,显示404


ServletContext

一个项目就只有一个ServletContext对象,可以在很多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据
与天地同寿:这个对象在tomcat启动是就创建,在tomcat关闭时才死去

  • 获取ServletContext

    • 在Servlet中获取ServletContext对象:
      1. 在void init(ServletConfig config)中:ServletContext context = config.getServletContext();
      2. GenericConfig类有getServletContext() 方法,所以可以直接使用this.getServletContext()来获得
      3. HttpSession#getServletContext()
      4. ServletConetextEvent#getServletContext()
  • 域对象的功能

ServletContext是javaWeb四大域之一:
pageContext
ServletRequset
HttpSession:
ServletContext
域对象就是用来在多个Servlet中传递数据:域对象必须有存取数据的功能


域对象的方法
import javax.servlet.ServletContext;
import java.io.IOException;

/**
 * 演示向ServletContext中保存数据
 */
public class AServlet extends javax.servlet.http.HttpServlet {

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        //获取ServletContext对象
        //调用其serAttribute()方法完成保存数据
        ServletContext application = this.getServletContext();
        application.setAttribute("name","zhangsan");
    }
}
import javax.servlet.ServletContext;
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;

/**
 * 从ServletContext中获取数据
 */
@WebServlet(name = "BServlet",urlPatterns ="/BServlet")
public class BServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取ServletContext对象
        //调用getAttribute()方法完成获取数据
        ServletContext applcation = this.getServletContext();
        String name = (String) applcation.getAttribute("name");
        System.out.println(name);
    }
}
  • 获取应用初始化参数

Servlet也可以获取初始化参数,一个Servlet只能获取自己的初始化参数
可以配置公共的初始化参数,为所有Servlet用需要使用ServletContext才能使用


  context-param
  context-value

  • 获取真实路径

    获取路径后再创建输入流对象

获得所有资源的路径

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;
import java.io.InputStream;
import java.util.Set;

/*
使用ServletContext获取资源路径
 */
@WebServlet(name = "CServlet",urlPatterns = "/CServlet")
public class CServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
        得到的是有盘符的路径
        /Users/hxl/study/学习文件(源码)/idea/JavaWeb/JavaWebDay09_2/out/artifacts/JavaWebDay09_2_war_exploded/index.jsp
         */
        String path = this.getServletContext().getRealPath("/index.jsp");
        System.out.println(path);
/*
    获取资源的路径后,在创建输入流对象
 */
        InputStream input = this.getServletContext().getResourceAsStream("/index.jsp");
        /*
        获得当前路径下的所有资源路径
         */
        Set paths = this.getServletContext().getResourcePaths("/WEB-INF");

    }
}

你可能感兴趣的:(HttpServlet)