IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Servlet. -> 正文阅读

[Java知识库]Servlet.

一、servlet快速入门

1、新建的web项目工程,并导入Servlet依赖:(这里也要导入Tomcat服务器依赖,因为Servlet需要依赖于Tomcat才能运行,也就是说Servlet是在Maven环境下的Web项目中创建的)

因为这是在Maven环境下做的web项目,玩的就是Servlet 肯定要把Servlet依赖导入该项目了,就和Mybatis一样, 用Mybatis玩项目 就肯定把Mybatis依赖导入进来了~

创建步骤:看tomcat笔记中如何创建Maven环境的web项目

注意:?

因为这里我们是以Maven新建的web-demo工程,之所以这个工程能导入很多包就是Maven管理项目的功劳, 当我们本地仓库没有该包的时候 就会去阿里云仓库帮我们下载该包供项目使用, 因此我们每次以Maven创建的项目都调一下本地仓库地址

?

2 & 3、创建:定义一个类,实现servlet接口? &? 配置 加注解 配置Servlet的访问路径?:

注意: 加@Overide注解 报红的话:记得快速导入 在pom.xml文件当中导入注解依赖

?4、访问:启动tomcat服务器,浏览器输入地址,访问该Servlet

注意:这里我们也不用再重新配置tomcat到idea当中了,因为我们已经下载过插件,Tomcat服务器已经集成到idea当中了(如果tomcat服务器没有集成到idea当中 就需要先把tomcat服务器集成到idea当中 【方便作用】)

我们创建一个新工程或模块的时候:要注意有没有配置Maven (尽量该项目用自己的本地仓库或阿里云仓库 设置一下 ) 和 Tomcat服务器集成到idea当中(没有的话就看前面的笔记 配置到该工程当中)

启动tomcat服务器:?

?

?

客户端访问服务器当中部署的web-demo项目中的 /demo1 路径下的资源:

?

?二、Servlet 执行流程

改正:Servlet不是ServletDemo1,ServletDemo1只不过是实现的Servlet的一个类,本质上我们操作的是Servlet中的方法(只不过Servlet接口不能new对象 但被一个类重写全部的方法后就可以了 注意下面标注的Servlet:这里的Servlet就代表代码中的:ServletDemo1 是错误的 )

?三、Servlet 生命周期

?改正:Servlet就是实现Servlet的类 是错误的,就是Servlet,因为我们操作的就是Servlet中的方法,只不过Servlet是接口

我们下面对Servlet当中的方法进行演示详解:

1、init()方法:

*? 作用:初始化对象的方法,完成一些如加载配置文件、创建连接等初始化工作,该方法只调用一次
* ?1、调用时机:默认情况下,Servlet被第一次访问(请求)时,Tomcat服务器帮我们new ServletDemo2 对象

?* ?调用Servlet中的init方法 ( 这里ServletDemo2 只不过是Servlet的一个过渡载体,因为Servlet是接口不能new对象)
?* ?2、调用次数:只调用1次,再访问该Servlet时就不会再调用该init方法

?测试演示:

?

演示当我们服务器启动时就创建Servlet对象初始化init()方法:(也就是服务器启动后就把对象创建号并且调用了init方法 不再通过浏览器(客户端)访问一次后再调用了,增加了效率)

?

?2、service()方法:

* ?作用: 提供服务的作用,当浏览器访问Servlet的时候,都会调用Servlet中的service()方法对请求进行处理

?* ?调用次数:多次 ( 访问一次服务器当中的Servlet,就会调用一次Servlet当中的service方法 )

?服务器开启状态的时候假设我们访问6次 演示如下:

?3、destroy()方法:

* ?销毁方法
? ? ?* ?1、调用时机:内存释放的时候或者服务器关闭的时候 Servlet对象会被销毁,就会调用该方法释放资源
? ? ?* ?2、调用次数: 一次 ?(因为对象只创建一次 new一次)

?如果想演示destroy()销毁方法:需要是正常关闭tomcat服务器,正常关闭演示如下:(优化后的idea强制关闭也能显示destroy方法中的内容)

四、Servlet方法介绍 & 体系结构

后两个方法介绍:?

?

package com.it.heima.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

/**
 * Servlet后两个方法介绍
 */

@WebServlet(urlPatterns = "/demo3",loadOnStartup = 1)
public class ServletDemo3 implements Servlet {
    /**
     *  定义一个全局变量 把ServletConfig对象赋给这个全局变量当中 然后供getServletConfig方法使用返回
     */
    private ServletConfig servletConfig;

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig =servletConfig;      // 把对象引用赋给全局变量引用
        System.out.println("init .....");
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println(" hello world~ ");
    }

    @Override
    public void destroy() {
        System.out.println("destroy .....");
    }

    /**
     * 这个方法一般我们返回 null 或者 空字符串 即可
     * @return null or ""
     */
    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * 这个方法是来获取ServletConfig对象的   ServletConfig这个对象是init()方法中的参数
     * init()方法是被Tomcat服务器对象调用的,并且把ServletConfig 对象参数传入 init()方法当中
     * 因此我们这个方法当中如果想返回 init()方法当中的对象(参数) 就需要写一个全局变量 把init()方法当中的对象赋上去
     * 然后在这个 getServletConfig 方法当中返回即可 [ 如果不设定一个全局变量 肯定访问不到了 不设定的话那个对象只能在init()参数当中 ]
     *
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }
}

?会发现以上的方法当中我们最常用的也就是Servlet()方法 但是我们自定义的类实现Servlet接口的时候必须要重写接口当中的全部方法(5个) 显然有点麻烦, 所以我们下面学习Servlet 体系结构:就是专门对service方法的封装

Servlet 体系结构:?

演示如下:?

把注释搞懂,就知道了为什么用HttpServlet这个类 封装 Servlet接口中的service方法:?

package com.it.heima.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *  这里就相当于单独对Servlet当中的service()方法的一个封装
 *  等会会介绍HttpServlet的原理, 为什么要这样写service()方法
 *      就是因为当用户端(浏览器)访问我们的服务器当中的Servlet资源的时候,其实service()方法当中也做了很多
 *      对用户端数据的解析,解析是get请求还是post请求, get请求做什么逻辑,post请求做什么逻辑 要写很多
 *      所以这里HttpServlet这个类就是对Servlet当中的service()方法的一个封装
 *      当用户是以get请求方式请求服务器当中部署的资源的时候 就走HttpServlet类当中的doGet()方 
 *      法
 *      当用户是以post请求方式请求服务器当中部署的资源的时候 就走HttpServlet类当中的doPost
 *        ()方法 这样就方便了很多
 *      如果是在Servlet接口当中service()方法当中做处理客户端是以get还是post方式请求浏览器当中 
 *      的数据的话,还要做判断是否是get请求,是的话怎么怎么样.... 是否是post请求....  太麻烦
 *      HttpServlet这个类直接搞成了两个分支 一个get请求分支  一个post请求分支 方便了很多
 */

@WebServlet("/demo4")   // 访问路径
public class ServletDemo4 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get .....");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(" post .....");
    }
}

假设我们把这个web-demo项目部署到服务器当中,然后对"/demo4"路径进行访问?:

注意:直接在浏览器当中访问相对应的路径,这种默认是get请求方式 (就是说用户是以get请求方式请求)

?

?接下来我们演示post请求方式请求项目当中的"/demo4"的资源:

我们需要写个表单 请求方式为post请求:

这里的a.html表单页面也相当于一个普通的浏览器(用户端)只不过这个页面是写出来的

提交后以post请求方式请求(这里的请求方式也可以写成get请求,写成get请求后就输出的是get.....了 ,因为调用的是doGet()方法了, 上面已经验证过了 ):

?开启服务器进行访问a.html页面:下面的操作和get请求时一样的

?

?

原生的在Servlet接口中的service()方法当中的处理客户端的get和post请求:

因此我们用到了HttpServlet类进行封装该Servlet接口中的service()方法,进行处理客户端的get或者post请求?

五、Servlet urlPattern配置

1、一个Servlet,可以配置多个urlPattern(访问路径)?

?演示如下:

?

客户端访问服务器当中部署的web-demo项目中的demo5路径下的资源演示如下(浏览器默认get请求方式 所以调用doGet()方法下的资源 ):?

?

?

?

2、urlPattern配置规则

通常就是用精确匹配规则

精确匹配:

?客户端访问该路径下资源(默认get请求):

?目录匹配:也就是说客户端在输入URL的时候:/user/?后面写什么都可以 都能访问到该路径下的资源

?注意:如果我们有两个资源 一个是精确路径 为:/demo5/select? 另一个资源是目录匹配路径为 :

/demo5/*? 那么客户端如果想访问项目中的 /demo5/select 资源的话 会访问这两个中的哪个资源呢: 答案就是 /demo5/select 路径下的资源 (遵守最小范围规则,范围越小越访问)

六、WEB.XML配置Servlet?

注:xml: 是web.xml

?演示如下:

?web.xml中配置Servlet中的访问路径:

这里面配的 /demo13? ?就相当于我们在资源上面?@WebServlet("/demo13") 访问路径 意义是一样的

?服务器开启后把该项目部署到服务器当中 然后浏览器(客户端)访问该路径下的资源演示:

服务器开启并把项目部署到服务器:(用的是tomcat服务器插件 忘记的话看tomcat笔记)

?客户端访问项目中上面写的 /demo13 路径下的资源:

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 11:43:27  更:2022-05-10 11:43:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:15:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码