zoukankan      html  css  js  c++  java
  • Servlet详解

    1.什么是Servlet?

    Servlet(Servlet Applet),官方解释是运行在服务器端的小程序。

    严格来说,Servlet就是一个接口,里面定义了JAVA类被浏览器访问到(被TOMCAT识别)的规则。

    Servlet接口里面有5个抽象方法,类实现这个接口的方法就可以被访问,从而提供动态数据。

    类似这样:

    public class ServletDemo implements Servlet {
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
    
        }
    
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            return null;
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        @Override
        public void destroy() {
    
        }
    }

    2.Servlet接口的几个方法有什么用

    (1)void init()    初始化方法,在Servlet被创建时执行,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的。

    (2)ServletConfig getServletConfig()    获取Servlet的配置对象。

    (3)void service()    提供服务方法,每一次Servlet被访问时都会执行,可以执行多次。

    (4)String getServletInfo()    获取Servlet的一些信息,版本,作者等。

    (5)void destroy()   销毁方法,在服务器正常关闭时执行,执行一次,只有服务器正常关闭时,才会执行destroy方法,而且destroy方法在Servlet被销毁之前执行的。

    可以看出,基本上用的比较多的就是void service()。其他的基本没太大用处。

    3.Servlet3.0以前的Servlet配置

    一个类实现了Servlet接口,但是我们应该访问什么URL才能到达这个类呢?这时候需要对Servlet进行配置。而且Servlet3.0(JAVAEE 6)以前的配置十分麻烦。

    首先要说下一般JAVAEE的项目目录:

                        -- 项目的根目录

                            --静态资源(html等)
                            -- WEB-INF目录:
                                -- web.xml:web项目的核心配置文件
                                -- classes目录:放置字节码文件的目录
                                -- lib目录:放置依赖的jar包

    Servlet3.0的配置就是在web.xml里面修改的。

            <!--配置Servlet -->
            <servlet>
                <servlet-name>demo</servlet-name>
                <servlet-class>com.pr.web.servlet.ServletDemo</servlet-class>
            </servlet>
        
            <servlet-mapping>
                <servlet-name>demo</servlet-name>
                <url-pattern>/demo</url-pattern>
            </servlet-mapping>

    当我们访问localhost:8080/demo时就可以到达ServletDemo类了。

    执行原理如下:

        1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
        2. 查找web.xml文件,是否有对应的<url-pattern>标签体内容。
        3. 如果有,则在找到对应的<servlet-class>全类名
        4. tomcat会将字节码文件加载进内存(Class.forName("com.pr.web.servlet.ServletDemo")),并且创建其对象(clazz.newInstance())
        5. 调用其方法

    关于配置文件,还有一个比较常用的配置项:

                * 可以配置执行Servlet的创建时机。
                    * 在<servlet>标签下配置
                        1. 第一次被访问时,创建
                            * <load-on-startup>的值为负数
                        2. 在服务器启动时,创建
                            * <load-on-startup>的值为0或正整数

    4.Servlet3.0以后的Servlet配置(Servlet注解配置)

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

    @WebServlet("资源路径")

    类......

    原理:

    @WebServlet 里面的全部配置都有默认值,urlPatterns是一个数组,默认值为空。

    故可以写成:@WebServlet(urlPatterns = "/demo")

    当然也可以写多个。

    看源码发现有个value。代表的是最重要的属性,故可以写成:

    @WebServlet(value = "/demo")

    value又可以省略,故可以写成:

    @WebServlet("/demo")

     

    5.GenericServlet与HttpServlet

    Servlet -- 接口
            |
        GenericServlet -- 抽象类
            |
        HttpServlet  -- 抽象类

        * GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
            * 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

        * HttpServlet:对http协议的一种封装,简化操作
            1. 定义类继承HttpServlet
            2. 复写doGet/doPost方法

    所以一般项目开发直接重写HttpServlet抽象类的doGet()或者doPost()方法即可。如果用GenericServlet抽象类,虽然只需要实现service方法,但是还要对请求进行判断,判断是get请求还是post请求。

  • 相关阅读:
    MiniOS系统
    《硅谷传奇》
    《构建之法》1—3章
    学术诚信与职业道德
    Sprint2
    Scrum 项目 7.0 Sprint回顾
    Scrum 项目 6.0 sprint演示
    Scrum 项目 5.0
    Scrum 项目4.0
    操作系统 实验三 进程调度模拟程序
  • 原文地址:https://www.cnblogs.com/chichung/p/10312456.html
Copyright © 2011-2022 走看看