【JavaWeb】Servlet学习笔记

目录

Servlet

Servlet的生命周期

servlet的体系结构:

Servlet的路径匹配:

servlet的书写:

ServletContext

域对象:

管理项目的资源

获取文件的mime类型:(了解)

获取项目的初始化参数(了解):


Servlet

        Servlet是运行在服务端的Java小程序,是一套规范,用来处理客户端请求,响应给浏览器的动态资源,servlet的实质就是java代码,通过java代码的API动态的向客户端输出内容.

servlet普通Java程序的区别:

1)必须实现servlet接口

2)必须在servlet容器(服务器)中运行

3)servlet程序可以接收用户请求参数以及向浏览器输出数据

Servlet的执行原理:

原理:

        1)输入网址:http://localhost/8080/day08/count    通过访问的项目根目录day08,在tomcat服务器的webapps中找到day08文件夹,

        2)进入到web.xml配置文件中读取虚拟路径count(url-pattern),然后通过虚拟路径对应的servlet-name,找到<servlet-name>中的servlet-name,最后找到对应的servlet小程序调用执行

        3)创建servlet对象------>调用init()初始化对象------>执行servlet中的service方法-------->将数据返回给浏览器对象

        4)tomcat关闭的时候,servlet调用destory方法进行销毁.

Servlet的生命周期

        生命周期:一个对象从创建到销毁的过程,就是生命周期.在servlet整个周期中涉及到三个方法:

        1)init():使用init方法对servlet进行初始化

        2)service():处理来自客户端的对service的所有调用

        3)destory():从服务中心取出servlet,然后使用destory方法销毁它,最后进行垃圾回收并终止

servlet的一个周期:

servlet的体系结构:

servlet接口

       ↓

GenericServlet抽象类:通过的servlet,实现了除service方法之外的所有方法,并且实现了servletCOnfig中的所有方法

       ↓

HTTPServlet接口:httpservlet用来处理http请求,实现了servlet的所有方法并且细分了不同的请求处理方式.

底层原理:

        我们自己创建的类继承HTTPServlet,然后HTTPServlet继承了GenericServlet,最后GenericServlet实现了servlet接口,而这样的好处在于:我们创建的新的类不用再重写所有的方法,只需要重写自己想要的方法即可.

        Servlet接口:定义了方法(其中包含生命周期的三个方法:init(),service(),destory())

        GenericServlet:

        1)实现了destory方法(方便程序,以后不再书写销毁的方法,但是如果需要销毁数据,自己可以重写该方法)

        2)继续抽象了service方法

        3)对init方法进行了实现,(赋值了成员变量,调用了自己的无参init(0))

        HTTPServlet:

        1)强转reqeust,response对象(功能增强了)

        2)调用本类的service方法(获得请求方式,将请求方式一分为七,执行具体的请求方式的方法)

Servlet的路径匹配:

url-pattern:将一个请求网络地址和servlet类建立一个映射关系.

路径编写方式:

1)精确路径匹配:以"/"开头,后面跟上精确路径,

2)目录匹配:以"/"开头,以"*"结尾,

3)后缀名匹配:以"*"开头,以任意后缀名结尾即可.

4)缺省匹配:"/" ,此路径大家不要使用,已经有servlet在用,任何web服务器中都有两个serlvet(默认的servlet和jspservlet)

路径匹配的优先级:精确匹配>目录匹配>后缀名匹配>缺省匹配

servlet的书写:

1)创建类,继承HTTPServlet(直接创建一个servlet也可以)

2)配置web.xml

3)书写doget或者dopost方法即可 .

           

                                                       

使用注解:

web.xml配置:

            

根据需要可以在doget或者dopost中书写需求即可。

ServletContext

        Web服务器在启动时,会为每个web项目创建一个对应的ServletContext对象

        主要作用:

        1)域对象(servlet之间可以通过域对象进行通信,操作共享数据的过程)

        2)获取资源在服务器的真实地址,管理整个项目的资源

        3)获取全局的配置参数

        4)获取文件的MIME类型

域对象:

       在范围内共享数据.

      存储数据: void   setAttribute(String name ,object value)

      获取数据: Object  getAttribute(String name)

      删除数据: void  removeAttribute(strng name)

存数据:

public class MyServletContext extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获得ServletContext  对象.方法();
        ServletContext sc1 = this.getServletContext();
        ServletContext sc2 = this.getServletContext();
        System.out.println(sc1 );
        System.out.println(sc2 );
        //往servletContext对象中存数据
        //存api
        sc1.setAttribute("ds" , "吉吉国王");
        //直接获得数据
        Object ds = sc2.getAttribute("ds");
        System.out.println("oneServlet : " + ds);
    }
}

取数据

public class MyServletContext2 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获得ServletContext  对象.方法();
        ServletContext sc1 = this.getServletContext();
        ServletContext sc2 = this.getServletContext();
        System.out.println(sc1 );
        System.out.println(sc2 );
        //直接获得数据
        //当没有人进行存储的时候 值为null
        Object ds = sc2.getAttribute("ds");
        System.out.prntln("twoServlet : " + ds);
        //删除数据
        sc2.removeAttribute("ds");
    }
}

管理项目的资源

getRealPath() 获得项目在本地的真实路径(编译后路径)
getResourceAsStream() 获得项目下的资源文件 转换成流(编译后的)

public class GetResourceServlet extends HttpServlet {
    /**
     * 在java代码中 获得项目的资源  img/1.jpg
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获得ServletContext对象
        ServletContext sc = getServletContext();

        //2.获得这张图片的真实地址   .get 获得 Real 真实 Path路径  获得项目在本地磁盘的真实路径
        //获得的是编译路径  获得最后拼接的路径
        String realPath = sc.getRealPath("/img/1.jpg");
        System.out.println(realPath);
        //File file = new File

        //直接获得项目下的文件 并转换成流对象
        InputStream is = sc.getResourceAsStream("/img/1.jpg");
        System.out.println(is);
    }
}

获取文件的mime类型:(了解)

  • getMimeType("带后缀名的文件名")

获取项目的初始化参数(了解):

  • 参数在web.xml中通过<context-parm>配置项目的初始化参数

  • getInitParameter("参数name")

猜你喜欢

转载自blog.csdn.net/weixin_43267344/article/details/108611297