首页 > 其他分享 >day11-Servlet01

day11-Servlet01

时间:2022-11-06 20:22:05浏览次数:83  
标签:web 调用 Tomcat servlet day11 Servlet01 Servlet HelloServlet

Servlet01

官方api文档:https://tomcat.apache.org/tomcat-8.0-doc/servletapi/index.html

image-20221106172747310

Servlet和Tomcat的关系:一句话,Tomcat支持Servlet

Servlet是跟Tomcat关联在一起的,换而言之,Tomcat是哪个版本,就对应哪个版本的Servlet

1.为什么需要Servlet?

需求:请用你现有的html,css,javascript,开发网站,比如可以让用户留言/购物/支付,你能搞定吗?

这就需要引入我们的动态网页(能和用户交互)技术===>Servlet

我们对之前的JavaWeb技术体系图进一步地细化:

image-20221106180943642

Tomcat的web服务拿到一个请求后:

  1. 如果web服务发现是该请求是和java相关的,或者说是一个Servlet(动态请求,比如说可能会去操作数据库),那么Tomcat会去寻找Servlet,Servlet又去调用java程序,进行数据库操作

  2. 如果Tomcat的web服务发现请求的是一个静态资源,比如html,图片等,就直接拿到该资源,然后返回,不会和java程序或者数据库发生关系

  3. 因此我们说Tomcat其实是有两个功能的:一是充当Servlet的容器;二是充当普通的web服务

  4. 只支撑静态资源返回的还有apache,如果是一个静态资源的网站,不需要和数据库进行交互,其实完全可以使用Apache来作为web服务,或者只使用一个Nginx就可以了

2.什么是Servlet?

  • 什么是Servlet

    Servlet在开发动态WEB工程中得到了广泛地应用,掌握好Servlet非常重要,Servlet是SpringMVC的基础

  • Servlet(java服务器小程序),它的特点有:

    • 它是由服务器调用和执行的

      即由tomcat解析和执行的

    • 它是用java语言编写的,本质就是Java类

    • 它是按照Servlet规范开发的(接口),Servlet本质就是一套接口规范

      除了Tomcat可以去解析Servlet,weblogic也可以支持 Servlet,即只要按照规范去开发接口,就可以支持Servlet,类似于jdbc的接口规范

    • 功能强大,几乎完成所有的网站功能

3.Servlet基本使用

3.1Servlet开发方式说明

  1. Servlet3.0前使用web.xml,Servlet3.0版本以后(包括3.0)支持注解,同时支持web.xml配置
  2. 如何查看Servlet版本
  3. Servlet的讲解只是为了知道Servlet的使用原理(原生的Servlet在项目中使用很少)
  4. 不管使用哪种方式,本质都一样

3.2快速入门-手动开发Servlet

例子

需求说明:

  1. 开发一个HelloServlet
  2. 当浏览器访问http://localhost:8080/web应用名/helloServlet时,后台输出“hi HelloServlet”

思路:

  • 编写类HelloServlet去实现Servlet接口

  • 实现service方法,处理请求,并响应数据

  • 在web.xml中去配置Servlet程序的访问地址


  1. 首先创建web工程,配置好Tomcat

    image-20221106190623954

  2. 添加servlet-api.jar(在你安装的tomcat/lib下)到工程,因为servlet.jar不是jdk自带的,要引入才可以使用

    image-20221106190903796

    在idea项目的web/WEB-INF下创建一个lib目录,将servlet-api.jar拷贝进去,然后右击jar包,点击add as library,在弹出的窗口中点击ok即可

    image-20221106191137595
  3. 在src包下面创建HelloServlet.java,并实现Servlet接口

    image-20221106193705262
    package com.li.servlet;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    /**
     * 1.开发一个servlet,需要实现Servlet接口
     * 2.实现Servlet接口的方法:一共有5个
     */
    public class HelloServlet implements Servlet {
    
        /**
         * 1.初始化 Servlet
         * 2.当创建HelloServlet实例时,会调用init方法
         * 3.该方法只会被调用一次
         *
         * @param servletConfig
         * @throws ServletException
         */
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("init() 被调用");
        }
    
        /**
         * 返回ServletConfig对象 也就是返回Servlet的配置
         *
         * @return
         */
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    
        /**
         * 1.service方法处理浏览器的请求(包括get/post)
         * 2.当浏览器每次请求Servlet时,就会调用一次server方法
         * 3.当Tomcat调用该方法时,会把http请求的数据封装成 实现了ServletRequest接口 的request对象
         * 4.通过servletRequest对象,就可以得到用户提交的数据
         * 5.servletResponse对象可以用于返回数据给Tomcat-->浏览器
         *
         * @param servletRequest
         * @param servletResponse
         * @throws ServletException
         * @throws IOException
         */
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("hi HelloServlet~");
        }
    
        /**
         * 返回servlet的信息,使用较少
         *
         * @return
         */
        @Override
        public String getServletInfo() {
            return null;
        }
    
        /**
         * 1.该方法是在servlet被销毁时,被tomcat调用
         * 2.只会调用一次
         */
        @Override
        public void destroy() {
    
        }
    }
    
  4. 实现了接口之后,在web.xml配置HelloServlet,即给HelloServlet提供对外的访问地址

    目的是为了告诉Tomcat服务器,HelloServlet在哪里

    image-20221106193830386
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <!--web.xml文件主要用来配置该web应用使用到的Servlet-->
        <!--配置HelloServlet-->
        <!--解读:
                1.servlet-name:给Servlet取名(任意),该名字唯一
                2.servlet-class:Servlet的类的全路径,Tomcat在反射生成该Servlet类实例时需要使用
                3.servlet-mapping里的servlet-name要和上面的servlet-name保持一致
                4.url-pattern:这个就是该Servlet访问的url的配置(路径)
                5.这时我们应该这样访问Servlet:http://localhost:8080/web应用名/helloServlet
                5.url-pattern的取名也是随意的(注意加上斜杠)
        -->
        <servlet>
            <servlet-name>HelloServlet</servlet-name>
            <servlet-class>com.li.servlet.HelloServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/helloServlet</url-pattern>
        </servlet-mapping>
    </web-app>
    

    设置 快捷键ctrl+/ 可以在当前位置注释,而不是在行

    image-20221106194525686
  5. 访问HelloServlet(记得要reploy或者restart)

    可以自己配置快捷键启动

    image-20221106200232181

    浏览器访问:

    image-20221106200859929

    后台输出:可以看到init方法只调用了一次,而每次访问都会调用server方法

    image-20221106200941586

4.浏览器调用Servlet流程分析

标签:web,调用,Tomcat,servlet,day11,Servlet01,Servlet,HelloServlet
From: https://www.cnblogs.com/liyuelian/p/16863696.html

相关文章

  • day11.0
    finalfinal是一个关键字。final修饰的变量,只能赋值一次。final修饰的方法无法被覆盖。final修饰的类无法被继承。final修饰的实例变量必须手动赋值,不能赋默认值。f......
  • day11-(cookie&&session)
    回顾:response:响应往浏览器写东西响应行操作状态码常用方法:setStatus(intcode):123响应头格式:key:v......
  • 代码随想录Day11
    LeetCode20有效的括号给定一个只包括'(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺......
  • day11DOM和BOM回顾以及事件讲解 ( 上 )
    内容回顾BOM(bowserobjectmodel)浏览器对象模型window:窗口对象(全局的变量及函数都属于window也就是global全局对象)location:地址栏对象(获取地......
  • Day11 练习题
    Day111、执行Python脚本的两种方式方法一:python31.py方法二:1.文件首行添加#!/usr/bin/envpython32.赋予执行权限chmodu+x1.py3.执行./......
  • 【算法训练营day11】LeetCode20. 有效的括号 LeetCode1047. 删除字符串中的所有相邻重
    【算法训练营day11】LeetCode20.有效的括号LeetCode1047.删除字符串中的所有相邻重复项LeetCode150.逆波兰表达式求值LeetCode20.有效的括号题目链接:20.有效的括......
  • 《剑指offer》day11
    删除链表的节点题目描述思路基本操作代码实现/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*......
  • day11事件上
    事件事件名(内置的)执行对象(元素对象)处理函数(自定义函数)观察者(js的事件引擎)事件名的分类鼠标事件(鼠标触发)click单击事件dblclick双击事件mousedown按下mouseup......
  • Python学习路程——Day11
    Python学习路程——Day11函数参数在使用函数参数时,一般情况下所需要遵循的规范: 越短的、越简单的、越靠前 越长的、越复杂的、越靠后同一个形参在调用的时候不能多......
  • day11 -数组
    数组特点长度确定。一旦被创建大小不可以改变其元素必须是相同类型,不允许出现混合类型元素可以是任何数据类型,包括基本类型和引用类型数组变量属于引用类型,数......