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. P1582倒水

    推了一个多小时的式子,ac后一看题解,7行代码搞定 emmmm我还是太菜了 传送 蒟蒻解法: 不管怎么倒水,最终所有瓶子里面的水的数量一定可以用2k表示出来. n最终可以合并成几个瓶子呢? 我们可以把 ...

  2. unittest测试框架生成可视化测试报告-BeautifulReport

    生成报告的样式: 在说unittest之前,先说几个概念: TestCase 也就是测试用例 TestSuite 多个测试用例集合在一起,就是TestSuite TestLoader是用来加载Test ...

  3. python简单的函数定义和用法实例

    python简单的函数定义和用法实例 这篇文章主要介绍了python简单的函数定义和用法,实例分析了Python自定义函数及其使用方法,具有一定参考借鉴价值,需要的朋友可以参考下 具体分析如下: 这里 ...

  4. pandas melt 与pivot 函数

    (掌握这个,基本就完美无缺的任意按照自己的想法,更改列了.) 背景: 最近有个excel 数据需要转化的过程. 数据量还挺大的,大概有30多万. 需要把某些行变成列,有些列又变成行. 这个操作本身就比 ...

  5. workflow-core 简介

    最近想做一个OA相关的网站开发,一直都听说有workflow的东西,之前也断断续续学习过 Workflow Foundation 4.0,还是没有搞明白到底能够用它做什么 但还是觉得workflow在 ...

  6. 报错:Uncaught SyntaxError: Unexpected token)

    用JSON格式传值时,js一直 报这个错误:Uncaught SyntaxError: Unexpected token) 错误位置是:result=eval('('+result+')'): 原因: ...

  7. webStom常用快捷键备忘

    Ctrl+W 选中代码,连续按会有其他效果 Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/…/ ) Ctrl+X 删除行Ctrl+D 复制行 ctrl+shift+ 箭头 上下移动块代 ...

  8. CentOS7和Ubuntu18.10下运行Qt Creator出现cannot find -lGL的问题的解决方案

    解决方法:缺少相应的opengl的库,需要安装opengl库 一.Ubuntu下解决Qt5.11.1 cannot find -lGL 有两种原因: 一种是没有按照libGL库,那么就安装: sudo ...

  9. Zepto v1.0-1源码注解

    /* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...

  10. Aria2+WebUI+caddy搭建私有网盘

    Aria2安装 wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ar ...