JavaWeb笔记(7)-Servlet

  1. Servlet:Server Applet
1. Servlet本质是一个接口,定义了Java类被浏览器访问(Tomcat识别)到的规则
2. 任务就是自定义类,实现Servlet接口,重写方法
  1. 使用步骤:
1. 创建JavaEE项目
2. 定义一个类,实现Servlet接口
    public class ServletDemo01 implements Servlet{}
3. 实现接口中的抽象方法
    * public void init(ServletConfig servletConfig)
    * public ServletConfig getServletConfig()
    * public void service(ServletRequest servletRequest, ServletResponse servletResponse)
        -- 该方法用于提供服务,当浏览器访问一次配置后的该类对象,便调用一次该方法
    * public String getServletInfo()
    * public void destroy()
4. 配置Servlet -- 在web.xml文件根标签中配置
    <!--配置Servlet名称和其实际对应的类名(要写全类名)-->
    <servlet>
        <servlet-name>demo1</servlet-name>
        <servlet-class>cn.mysilentcat.web.servlet.ServletDemo01</servlet-class>
    </servlet>
    <!--servlet-mapping配置的是servlet名称与访问的虚拟目录-->
    <servlet-mapping>
        <servlet-name>demo1</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>
5. 实现细节:
    1. 浏览器地址栏中输入URL:
        http://localhost:8080/Project_Tomcat/demo1
    2. 本地Tomcat接收到请求,查找部署的Project_Tomcat项目
    3. 到该项目的下的web.xml文件中查找url-pattern标签是否有/demo1
    3. 找到/demo1中后,在获取该<servlet-mapping>标签中映射的servlet-name值
    4. 然后依据定义的servlet-name值查找对应的类名(全类名)
    5. 获取到全类名后,利用反射机制,Tomcat将全类名对应的字节码文件加载进内存 -- Class.forName()
    6. Tomcat会创建一个类对象,用该类对象调用service方法 --> 由于该类实现了Servlet接口,因此一定有该方法
  1. Servlet成员方法与生命周期
1. 成员方法:
    1. 初始化方法:
        * public void init(ServletConfig servletConfig)
            -- 仅在Servlet被创建时执行,仅执行一次
            -- Servlet默认在第一次被访问时创建的,即第一次被访问会先后执行init和service方法
    2. 获取Servlet配置对象
        * public ServletConfig getServletConfig()
            -- 
    3. 提供服务的方法:
        * public void service(ServletRequest servletRequest, ServletResponse servletResponse)
            -- 该方法用于提供服务,当浏览器访问一次配置后的该类对象,便调用一次该方法
    4. 获取Servlet的一些信息:版本,作者等
        * public String getServletInfo()
    5. 销毁方法:
        * public void destroy()
            -- 在服务器正常关闭时执行,仅执行一次
2. 生命周期:
    1. 被创建:
        -- Servlet默认在第一次被访问时创建,但可以修改配置使得在服务器启动时创建
        -- 可以同修改web.xml文件属性使得init方法在服务器启动时执行
            * 在Servlet标签内创建标签<load-on-startup></load-on-startup>
            * 如果该标签的值配置为负数,则表示服务器启动时创建Servlet对象
                <servlet>
                    <load-on-startup>-1</load-on-startup>
                </servlet>
            * 如果值配置为非负数,则表示第一次被访问时创建Servlet对象
                <servlet>
                    <load-on-startup>1</load-on-startup>
                </servlet>
        -- Servlet的init方法只执行一次,说明内存中只存在一个Servlet对象,即Servlet是单例的
        -- 此时多个用于访问共享资源的用户会产生安全问题
            * 尽量不要在Servlet中定义类的成员变量。即使定义楼成员变量,也不要创建修改成员变量的方法
    2. 提供服务:
        -- 每次访问Servlet时,service方法就会被调用一次
    3. 被销毁:
        -- 只有服务器正常关闭时,才会执行destroy方法
        -- destroy方法通常用于释放资源,它在Servlet销毁前执行,执行完后Servlet被销毁
  1. Servlet3.0+的注解配置
1. 在Servlet3.0+的版本中支持注解配置,即不再需要配置web.xml文件
2. 注解配置方式:
    1. 定义一个类实现Servlet接口
    2. 实现接口的抽象方法
    3. 在类定义上加上注解(@WebServlet)
    4. 在web.xml文件的配置中,我们关心的是全类名到urlpattern的映射
        -- 即如何从地址栏中的资源文件信息找到对应的类
        -- 现在直接将注解加在类定义上,就不再关心类的查找,仅关心该定义的类的urlpattern为什么
    5. 为该类上的注解添加属性urlPatterns和属性值(即虚拟目录名称)
        @WebServlet(urlPatterns="/demo")
        可以省略属性名,使用默认的value属性,即
        @WebServlet("/demo")
3. 注解的属性和属性值:
    a. urlPatterns:Servlet的访问路径
        1. 可以为一个Servlet定义多个访问路径
            * urlPatterns的属性值为String[]类型
            * 即可以为一个Servlet定义多个访问路径
            * 例如:@WebServlet({"/demo","/demo2","/demo3"})
        2. 访问路径的定义规则:
            1. /xxx:单层路径
                -- @WebServlet("/demo")
            2. /xxx/xxx:多层路径,目录结构 
                -- /*表示任意路径都可以访问到该servlet
                -- @WebServlet("/user/*")表示/user/a可以访问;/user/b也可以访问;/user/接任意字符都可以访问
            3. xx.do:单层路径
                -- @WebServlet("demo.do")
  1. IDEA与Tomcat的相关配置
1. IDEA会为每一个Tomcat部署的项目单独建立一份配置文件
    * Using CATALINA_BASE:   "C:\Users\Xxx\.IntelliJIdeaxxx.x\system\tomcat\Tomcat_8_5_31_Xxx"
    * 控制台输出的第一行表示该项目的配置文件所在
2. 工作空间项目与tomcat部署的web项目的区别
    * 在IDEA中编辑的项目称为工作空间项目
    * tomcat真正访问的才是tomcat部署的web项目,该项目在当前项目文件夹下的out文件夹artifacts目录下
3. WEB-INF目录下的资源文件是不能被正常访问到的
4. 断点调试:debug启动
  1. Servlet体系结构
1. Servlet实现类:
    a. GenericServlet类 
        -- 抽象类
        1. 该抽象类实现Servlet接口时,对除了service方法外的其余4个抽象方法进行了空实现
        2. 使得自定义类继承GenericServlet类后,仅需要重写service方法即可
        3. 于是,如果没有特殊需求,可以简单继承GenericServlet类,至于其他4个方法需要哪个重写哪个即可
    b. HttpServlet类 
        -- 抽象类 
        -- HttpServlet继承自GenericServlet
        1. 初始情况下在service方法中我们要区分提交数据的方式是GET还是POST
        2. 依据不同的提交方式来调用不同的方法来提取数据
        3. HttpServlet类中已经书写好了if/else的逻辑判定,并提供了doGet和doPost方法用于获取两种数据
        4. 因此,自定义类继承HttpServlet类后,不再需要复写service方法,而是重写不同方式的获取数据方法doXxx()
            例如:doGet()/doPost()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值