静态web页面:html+css+js,页面是静态的、不变的,显示给每个用户的页面都一样。

动态web页面:php、jsp、asp,根据用户、实时数据(数据库)来动态显示页面,不同的用户,显示的页面可能不同。

Servlet应用的体系结构

浏览器发送HTTP请求,HTTP服务器(比如Apache)接受并解析HTTP请求,对静态资源的请求由HTTP服务器负责处理,对Servlet的请求由HTTP服务器转交给Servlet容器处理。

Servlet容器(比如Tomcat)根据映射关系,调用相应的Servlet来处理请求,Servlet处理完毕将结果返回给Servlet容器,Servlet容器将结果转交给HTTP服务器,HTTP服务器以HTTP响应的形式将结果返回给浏览器。

常用的web服务器

  • WebLogic
  • WebSphere
  • JBoss
  • Tomcat    开源免费,短小精悍,适合中小型项目、访问量不大的项目。如果项目并发很高,Tomcat可能承载不起,需要使用上面专业的、商用的服务器。

Servlet的特点

  • 跨平台。Servlet是JavaEE的一种技术,Java是跨平台的。
  • 可扩展。Servlet指实现了javax.servlet.Servlet接口的Java类,通过继承可扩展Servlet的功能。

javax.servlet.Servlet接口中的常用方法

  • void init(ServletConfig  config)     //初始化Servlet
  • ServletConfig  getServletConfig()
  • void  service(ServletRequest request, ServletResponse  response)    //处理servlet请求,servlet请求封装在request中,servlet响应封装在response中返回
  • void destroy()    //销毁Servlet时做的处理

init()、service()、destroy()三个方法表现了Servlet的声明周期。

Servlet的生命周期

1、初始化阶段

Servlet容器解析Servlet请求,根据映射关系确定要调用的Servlet,检查内存中是否已存在该Servlet实例。

若已存在,则直接使用该Servlet实例。

若不存在,先创建该Servlet的实例,再调用init()初始化该Servlet实例。

2、运行阶段

Servlet容器为每个Servlet请求创建ServletRequest对象、ServletResponse对象,将Servlet请求封装在ServletRequest对象中,把ServletRequest、ServletResponse对象作为参数传递给service()。

service()处理servlet请求,将响应封装在ServletResponse对象中,传回给HTTP服务器。

3、销毁阶段

当Servlet容器(比如Tomcat)关闭,或web应用被移出Servlet容器时,Servlet会随着web应用的销毁而销毁。

在销毁Servlet之前,Servlet容器会调用Servlet实例的destroy()方法。

Servlet实例一旦创建,就会常驻内存,直到服务器被关闭,或web应用被移出Servlet容器,Servlet才会被销毁。

在Servlet生命周期中,init()、destroy()均只调用一次,service()会调用多次。

每次处理Servlet请求,都会创建新的ServletRequest对象、ServletResponse对象,调用一次service()方法。

Servlet的线程安全问题

  • Servlet是单实例、多线程的。Tomcat容器中只有此Servlet的一个实例,此Servlet每次处理一个请求时,都会开启一条新的线程,调用service()方法来处理请求。
  • Servlet是线程不安全的。此Servlet在Tomcat容器中只有一个实例,但可以有多个线程同时调用此Servlet实例的service()方法来处理请求,如果多个线程同时在service()中访问某个资源,这个资源又没加同步锁,很容易引发问题。
  • 为什么Servlet要设计成单例模式?如果处理一个请求就新建一个Servlet的实例,那Tomcat中会有大量的Servlet实例,JVM负担很重,且每次处理请求都要创建一个Servlet实例,很花时间。

Servlet的实现

javax.servlet.Servlet接口有2个默认的实现类:

  • GenericServlet      这是一个抽象类,未实现许多方法,主要是未实现service(),自己写service()很麻烦。一般不用这个。

  • HttpServlet    实现了GenericServlet,并在GenericServlet的基础上进行了扩展,我们根据需要重写doGet()、doPost()即可。推荐。

doGet()、doPost的权限都是protected,因为它们只在service()中被调用,Servlet容器调用service()来处理Servlet请求,而非直接调用doGet()、doPost()。

 public class TestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter(); //获取响应输出流
writer.write("ok"); //输出
}
}

HttpServlet是如何处理请求的?

HttpServlet中有2个service():

  • public void service(ServletRequest req, ServletResponse res)

  • protected void service(HttpServletRequest req, HttpServletResponse resp)

一个公有的,暴露出来,供外部调用。一个保护的,供类中调用。

public void service(ServletRequest req, ServletResponse res) 公有的这个,先接收2个参数,

把这2个参数分别转换为HttpServletRequest、HttpServletResponse类型,

再调用protected的service(), protected void service(HttpServletRequest req, HttpServletResponse resp) ,把2个参数传进去。

protected的service(),先获取请求类型 String method = req.getMethod(); ,

再判断这个请求类型是get、post,还是其它什么。

根据请求类型来调用对应的方法,是get,就调用doGet()来处理请求;是post,就调用doPost()来处理请求。并将参数传进去:

  protected void doPost(HttpServletRequest request, HttpServletResponse response) {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response){

    }

Servlet 入门的更多相关文章

  1. HTTP协议 Servlet入门 Servlet工作原理和生命周期 Servlet细节 ServletConfig对象

    1 HTTP协议特点   1)客户端->服务端(请求request)有三部份     a)请求行--请求行用于描述客户端的请求方式.请求的资源名称,以及使用的HTTP协议版本号 请求行中的GET ...

  2. 浅谈JavaWEB入门必备知识之Servlet入门案例详解

    工欲善其事.必先利其器,想要成为JavaWEB高手那么你不知道servlet是一个什么玩意的话,那就肯定没法玩下去,那么servlet究竟是个什么玩意?下面,仅此个人观点并通过一个小小的案例来为大家详 ...

  3. java之servlet入门操作教程一续

    本节主要是在java之servlet入门操作教程一  的基础上使用myeclipse实现自动部署的功能 准备: java之servlet入门操作教程一 中完成myFirstServlet项目的创建: ...

  4. servlet入门与进阶

    servlet入门与进阶 1.servlet基础认知 Servlet(Server Applet):全称Java Servlet,是用Java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据, ...

  5. JavaWeb之Servlet入门(二)

    1. 准备 在JavaWeb之Servlet入门(一)中,我们完成了第一个Servlet程序,完成了从URL到后台控制器的中转过程,接下来我们延续JavaWeb之Servlet入门(一)学习下如何传参 ...

  6. Servlet视频学习笔记 57-58 (servlet入门和调用过程)

    网易云课堂<30天轻松掌握JavaWeb视频>servlet部分 课时57 servlet开发入门 servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术.S ...

  7. Servlet入门和ServletConfig、ServletContext

    Servlet是一门用于开发动态web资源的技术. 若想开发一个动态web资源,需要完成以下2个步骤: 1)编写一个Java类,实现servlet接口: 2)把开发好的Java类部署到web服务器中. ...

  8. servlet入门学习之工作原理解析

    从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...

  9. Servlet入门实践

    本文主要介绍servlet,包括入门到升入,基本上可以对servlet有一个很好的认识: 1servlet介绍:   Servlet(Server Applet),全称Java Servlet,未有中 ...

  10. Servlet入门和HTTP。

    Servlet: 1.概念:Servlet:server applet  ,运行在服务器端的小程序.   浏览器在访问服务器的动态资源时,访问的是具有逻辑性的Java代码(Java类),而这里的Jav ...

随机推荐

  1. hadoop map中获取文件/切片名称

    //import org.apache.hadoop.mapreduce.InputSplit;//import org.apache.hadoop.mapreduce.lib.input.FileS ...

  2. 【树形DP】【P3177】[HAOI2015] 树上染色

    Description 给定一棵 \(n\) 个点的带权树,要求选 \(k\) 个点染成黑色,剩下染成白色,最大化两两同色点之间的距离和. Limitations \(0 \leq k \leq n ...

  3. 【LG3322】[SDOI2015]排序

    [LG3322][SDOI2015]排序 题面 洛谷 题解 交换顺序显然不影响答案,所以每种本质不同的方案就给答案贡献次数的阶乘. 从小往大的交换每次至多\(4\)中决策,复杂度\(O(4^n)\). ...

  4. 2019年底前的web前端面试题初级-web标准应付HR大多面试问题

    作者 | Jeskson来源 | 达达前端小酒馆 问:你知道在css中,html的标签元素分多少中不同的类型吗? 答:大体可分三种:1,块状元素,2,内联元素,3,内联块状元素 块级元素:就是每个块级 ...

  5. 记一次生产kafka消息消费的事故

    事故背景: 我们公司与合作方公司有个消息同步的需求,合作方是消息生产者,我们是消息消费者,他们通过kafka给我们推送消息,我们实时接收,然后进行后续业务处理.昨天上午,发现他们推送过来的广场门店信息 ...

  6. docker compose yml 文件常用字段简介

    常用参数: version # 指定 compose 文件的版本 services # 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称 ...

  7. Android 10 终于来了!增加了不少新特性

    前言 Android 10 正式发布了,根据官网的介绍,聚焦于隐私可控.手机自定义与使用效率,此版本主要带来了十大新特性:   image 智能回复 使用机器学习来预测你在回复信息时可能会说些什么,这 ...

  8. BurpSuite pro v2.0 使用入门教程

    BurpSuite简介 BurpSuite是进行Web应用安全测试集成平台.它将各种安全工具无缝地融合在一起,以支持整个测试过程中,从最初的映射和应用程序的攻击面分析,到发现和利用安全漏洞.Burps ...

  9. dnsperf

    github 地址:https://github.com/DNS-OARC/dnsperf mac安装:brew install dnsperf 参数详解 Dnsperf 支持下面的这些命令行参数: ...

  10. top命令输出解释以及load average 详解及排查思路

    原地址: https://blog.csdn.net/zhangchenglikecc/article/details/52103737 1.top输出以及load average 详解 昨天nagi ...