Servlet入门详解

一:Servlet概述

servlet使用java语言编写的服务端程序,它能够接受客户端的请求并响应。servlet通常被部署到容器内,有容器连接到web服务器。当客户端请求时,web服务器会将请求传递给servlet容器,容器调用响应servlet。

二:servlet原理

Servlet入门详解_第1张图片

 

执行原理:

1.当服务器接收到客户端浏览器的请求后,会解析请求的url路径,获取访问的servlet的资源路径/demo1;
2.查找web.xml文件,是否有对应的标签体内容与资源内容一致;
3.如果有 标签体内容,则在找到对应的全类名;
4.tomcat会根据全类名,将字节码文件加载进内存,创建其对象调用其方法;

三:生命周期

一个servlet的生命周期由不部署servlet的容器来控制,包括如何加载,实例化,初始化,处理请求,以及销毁。

servlet在第一次被访问时创建实例,创建之后立马调用init()方法进行初始化操作,此后该servlet一直贮存在服务器的内存中为相应的请求提供服务,直到服务器关闭,servlet调用destroy()也被销毁。

servlet默认第一次访问时被创建,内存中servlet是单例、

四:HttpServlet

Httpservlet继承 GenericServlet类,对Http协议进行了封装。实现时只需重写doget(),dopost()方法即可。

五:实现servlet

1.用idea创建web工程。

2.创建类继承HttpServlet。

3.重写doGet(),doPost()方法。

public class MyServletTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);
        String date = new Date().toLocaleString();
        resp.getWriter().write("time:"+date);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doPost(req,resp);
        doGet(req,resp);

    }
}

4.在web.xml对servlet进行配置




    MyServletTest
    ServletTest.MyServletTest

    

    MyServletTest
    /FirstServlet
    

 servlet-class配置类在项目下的路径,

url-partern表示servlet的资源访问路径。

六:路径匹配方式

1.精准匹配

以“/”开头,以字母(非”*”)结束。比如:单层路径/xxx、多层路径/xxx/xxx

如上例,通过localhost:8080/FirstServlet即可访问到FirstServlet

2.扩展名匹配

以* 开头,以扩展名结束。比如:*.jsp


    MyServletTest
    /FirstServlet
    *.jsp
    *.do
    *.html

当访问localhost:8080/test.dolocalhost:8080/test.jsphttp://localhost:8080/test.html路径时,都可以访问该FirstServlet。

3.匹配最长路径

以 / 开头,并以 * 结尾,即/*

可以拦截所有请求


    MyServletTest
    /*

4.缺省匹配

/*”属于路径匹配,并且可以匹配所有request,但不会拦截*.JSP请求,因为在tomcat的web.xml默认配置中,


    default
    /




    jsp
    *.jsp
    *.jspx

而扩展名匹配的优先级大于缺省匹配,所以当自己的路径匹配仅有缺省匹配时,遇到*.jsp请求时,优先执行默认的*.jsp匹配。

 

5.优先级执行顺序

精确路径 > 最长路径 > 扩展名 > 缺省匹配 这样的优先级匹配到对应的servlet。

七:关于load-on-startup 参数

load-on-startup标记容器是否在启动的时候实例化并调用其init()方法的优先级。

它的值表示servlet应该被载入的顺序当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;如果值小于0或未指定时,则表示只有在第一次请求的容器才在该servlet调用初始化函数正值越小,servlet的优先级越高,应用启动时就越先加载。值相同时,容器就会自己选择顺序来加载。
 

你可能感兴趣的:(javaEE)