Servlet(server applet)概念:

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。

如果一个Java类想要通过服务器接收从web客户端(浏览器)发送过来的请求,并对这些请求做出响应。那么这个类必须实现Servlet的接口。

Servlet本质就是一个接口,定义了一套规则。

快速入门,执行步骤:

创建JavaEE项目

定义一个类,实现Servlet接口

public class ServletDemo1 implements Servlet

实现接口中的抽象方法

提供服务:

执行service方法,执行多次,每次访问Servlet时,Service方法都会被调用一次。

被销毁:

执行destroy方法,只执行一次

Servlet被销毁时执行。服务器关闭时,Servlet被销毁

只有服务器正常关闭时,才会执行destroy方法。

destroy方法在Servlet被销毁之前执行,一般用于释放资源

配置Servlet

在web.xml中配置:

生命周期:

一个对象从创建到销毁,中间需要经历一些阶段,会执行一些方法,整个过程叫做该对象的生命周期。

什么样的对象我们会关注它的生命周期?

如果一个对象由其他组件管理,我们始终不去创建其对象,也无法控制其方法的执行。一般这种对象我们会关注它的生命周期。

关注生命周期之后,我们才能知道它的什么方法在什么条件下会被执行,方便我们编写逻辑。

Servlet的完整生命周期

1. 创建

Servlet是单例的,一个Servlet只会被创建一次,创建完成之后会调用init()初始化函数



在init方法中适合加载资源。

默认情况下,Servlet会在第一次被访问时创建。

如果Servlet加载比较缓慢,或者有某些比较耗时的操作在init中,我们可以通过配置设置Servlet为服务器启动时创建。



这里设置的是第一次访问时启动。

2. 提供服务

每次web客户端发出请求,访问Servlet时,该Servlet的service方法都会执行。每个请求到来时,servlet都会开启一个新的线程执行service方法。



所以,Servlet有线程安全问题,不要在Servlet的成员位置定义可修改变量,service方法会执行很多次。

3. 销毁

当服务器正常关闭时,Servlet会被销毁。销毁之前会调用其destroy()方法。

在此方法中,适合编写释放资源的代码。

执行原理:

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

浏览器发出请求,到localhost 虚拟目录(tom配置ide访问时路径),

tomcat:

这里已经算找到项目了,但是我们要找具体资源servlet

找/shinnippori,父节点找到了,子节点myNameIsVan就找到了,找到myNameIsVan节点了就搜索myNameIsVan节点的标签,找到了servletDemo1中的全类名,通过全类名反射,反射获取service方法

Servlet3.0:支持注解配置。可以不需要web.xml了。



甚至可以继续省略



使用注解就不要用xml(不重名的话可以,但是没必要)

步骤:

  1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml

  2. 定义一个类,实现Servlet接口

  3. 复写方法

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

    @WebServlet("资源路径")

    @Target({ElementType.TYPE})

    @Retention(RetentionPolicy.RUNTIME)

    @Documented

    public @interface WebServlet {

    String name() default "";//相当于

     		    String[] value() default {};//代表urlPatterns()属性配置
    
     		    String[] urlPatterns() default {};//相当于<url-pattern>
    
     		    int loadOnStartup() default -1;//相当于<load-on-startup>
    
     		    WebInitParam[] initParams() default {};
    
     		    boolean asyncSupported() default false;
    
     		    String smallIcon() default "";
    
     		    String largeIcon() default "";
    
     		    String description() default "";
    
     		    String displayName() default "";
    }

IDEA与tomcat的相关配置

IDEA会为每一个tomcat部署的项目单独建立一份配置文件

查看控制台的log:

工作空间项目和tomcat部署的web项目

tomcat真正访问的是“tomcat部署的web项目”,"tomcat部署的web项目"对应着"工作空间项目" 的web目录下的所有资源

WEB-INF目录下的资源不能被浏览器直接访问。

断点调试:使用 debug 启动

Servlet体系结构:

继承体系结构:

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

后续Servlet的编写都继承HttpServlet即可。

注意:Tomcat接收到请求时,只认Servlet接口中的service方法。

GenericServlet:



将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象

将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

HttpServlet:



从源码上看,如果什么都不做返回的是405之类的错误。



HTTP的7种请求方式:



对http协议的一种封装,简化操作

  1. 定义类继承HttpServlet
  2. 复写doGet/doPost方法

  3. 通过表单来完成打印,建立表单HttpServletLogin.html(GET方式,与下文中谷歌浏览器中截图对应)

  4. 点击start按钮

  5. 打印成功

Servlet配置

url-pattern配置方式

  1. 完全路径匹配(以/开头, 后面是一个明确的字符串。要求访问路径和指定的路径必须完全一致)

    /xxx /aaa/bbb
  2. 目录匹配(以/开头,结尾,中间有多层目录结构的。要求路径跟指定的目录一致即可)

    /
    /xxx/*
  3. 扩展名匹配(以*开头,以.xxx结尾。要求路径要以某个扩展名结尾)

    *.xxx
  4. 缺省路径匹配(如果没有任何其他的规则可以匹配资源访问路径,则分配给缺省路径)

    / 一个项目中,只能有一个Servlet配置为缺省路径

    优先级:完全路径匹配 > 目录匹配 > 扩展名匹配 > 缺省路径匹配

HTTP协议:Hyper Text Transfer Protocol 超文本传输协议

概念:

传输协议:定义了,客户端和服务器端通信时,发送数据的格式

历史版本:

1.0:每一次请求响应都会建立新的连接

1.1:复用连接

特点:

  1. 基于TCP/IP的高级协议
  2. 默认端口号:80
  3. 基于请求/响应模型的:一次请求对应一次响应
  4. 无状态的:每次请求之间相互独立,不能交互数据

基于请求/响应模型的:一次请求对应一次响应

无状态协议:每一次请求和响应都是独立的。无法在请求间交互数据。

Web核心之Servlet接口的更多相关文章

  1. Servlet接口和web.xml配置文件初识

    一.Java Web核心Servlet 1.什么是Servlet? Servlet是运行在服务器端的Java小程序,是sun公司提供的一套规范,用来处理客户端请求.响应给浏览器的动态资源.但Servl ...

  2. Servlet接口的实现类,路径配置映射,ServletConfig对象,ServletContext对象及web工程中文件的读取

    一,Servlet接口实现类:sun公司为Servlet接口定义了两个默认的实现类,分别为:GenericServlet和HttpServlet. HttpServlet:指能够处理HTTP请求的se ...

  3. javaWeb基础核心之一Servlet

    既然是做JAVA开发的,先从一些基本的整理起来,算是知识回顾,加深记忆. 第一篇想到那理到哪,可能有点乱,不是太会排版,见谅,估计可能也就我自己看的懂. servlet在百度百科上的定义是这样的: S ...

  4. 解决Ajax请求后台Servlet接口拿不到JSON数据问题

    前端Ajax请求代码如下: window.onload=function() { var url='http://127.0.0.1:8080/testpj/ErrorlogServlet'; $.a ...

  5. web开发之Servlet 二

    在上一篇文章中,我们演示也证明了Servlet 是一种动态web资源开发的技术,即我可以在浏览器中输入URL,然后就可以在浏览器中看到我们编写的Servlet资源. 那当我们在浏览器上一起一个HTTP ...

  6. Web容器与Servlet

    转自:http://www.360doc.com/content/10/0713/20/495229_38798294.shtml Web服务器与Web应用层属于不容两个范畴,为了让他们两写作,首先应 ...

  7. Java开发工程师(Web方向) - 02.Servlet技术 - 第1章.Servlet

    第1章--Servlet Servlet简介 Servlet应用于? 浏览器发出HTTP请求,服务器接收请求后返回响应给浏览器. 接收请求后到返回响应之间: 服务器将请求对象转交给Servlet容器 ...

  8. Servlet 2.4 规范之第二篇:Servlet接口

    Servlet接口是Servlet API的最核心抽象类.所有的servlets都直接实现了这个接口,或者以更通用的方式继承了这个接口的实现类.Servlet API自带了两个实现了Servlet接口 ...

  9. Java Web 学习(1) —— Servlet

    Java Web 学习(1) —— Servlet 一. 什么是 Servlet Java Servlet 技术是Java体系中用于开发 Web 应用的底层技术. Servlet 是运行在 Servl ...

随机推荐

  1. Number theory

    题目链接 思路:针对一个数组的操作,即对一个区间.可以用线段树去进行维护.初始化建树,叶子节点的值为1,维护每段区间上各个元素的乘积sum.M yi,将第i个元素的值改为yi.N di,将第di个元素 ...

  2. 重写LayoutParams,读取子View自定义属性

    在EasyConstraintLayout内部定义一个静态类LayoutParams继承ConstraintLayout.LayoutParams,然后在构造方法中读取上面自定义的属性.我们通过裁剪的 ...

  3. IntelliJ IDEA最新版配置Tomcat(完整版教程)

    查找该问题的童鞋我相信IntelliJ IDEA,Tomcat的下载,JDK等其他的配置都应该完成了,那我直接进入正题了. 1.新建一个项目 2.由于这里我们仅仅为了展示如何成功部署Tomcat,以及 ...

  4. js里面常用的正则表达式

    在工作中经常碰到关于表单的验证,一般采取正则表达是比较简洁,代码量少,但是却经常忘记一些正则的用法.下面记录工作中经常用到的正则表达式. * 代表0次或者多次   +代表1次或者多次  ?代表0次或者 ...

  5. 第 1 章 前端之html

    一.html初始 1.web服务本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM ...

  6. 如何根据字典值的大小,对字典中的项排序---Python数据结构与算法相关问题与解决技巧

    实际案例: 某班英语成绩以字典形式存储为: { 'LiLei' : 90, 'Jim' : 88, 'Lucy': 92 } 如何根据成绩高低,计算学生排名 -- 根据分数,进行排名,并且把排名信息添 ...

  7. MyBatis中的$和#,用不好,准备走人!

    作者:程序猿的内心独白 https://m.toutiaocdn.com/i6685496024770806280 这是一次代码优化过程中发现的问题,在功能优化后发现部分数据查不到出来了,问题就在于一 ...

  8. 使用Docker部署爬虫管理平台Crawlab

    当前目录创建 docker-compose.yml 文件 version: '3.3' services: master: image: tikazyq/crawlab:latest containe ...

  9. 【题解】Intervals

    题目大意   有\(n\)个区间(\(1 \leq n \leq 200\)),第\(i\)个区间覆盖\((a_{i}, b_{i})\)且有权值\(w_{i}\)(\(1 \leq a_{i} &l ...

  10. [洛谷P1552] [APIO2012]派遣(左偏树)

    这道题是我做的左偏树的入门题,奈何还是看了zsy大佬的题解才能过,唉,我太弱了. 左偏树总结 Part 1 理解题目 很显然,通过管理关系的不断连边,最后连出来的肯定是一棵树,那么不难得出,当一个忍者 ...