• Servlet开篇

前面我已经说过好多遍了,如何学习好一个东西其实就是2个问题:

1,这个东西是干嘛的?为什么要玩这个东西?

2,怎么样就玩好这个东西了?具体的应该玩这个东西的什么?



其实现在对于我来说并不是说学习一个东西,说白了就是想玩一个东西,这里的玩就想深入的研究一下这个东西的源码,更加全面的来把控这个东西。实践是最好的学习方式,废话不多说了,现在开始Servlet之旅。



  • Servlet是什么?为什么要玩Servlet?

Servlet是JavaEE(Java系统平台企业版)的一部分,它建立在JavaSE的基础上,为开发和部署企业应用程序提供API和服务,将JavaSE和JavaEE的服务和库结合在一起有助于开发独立于系统平台、基于Web的Java应用。





B/S可以理解为从过去的C/S结构发展而来的,以通用的浏览器为客户端,由服务器通过请求响应的方式和客户端交流信息。由于浏览器、服务器的多种多样,就需要一种方式为浏览器与服务器解耦和,使一个浏览器可以访问不同的服务器,一个服务器也可以和不同的浏览器通信,HTTP协议就是这个统一的关键。浏览器与服务器厂商共同遵守的顶级Web协议,浏览器只负责发送或接收解析遵守此协议的信息,服务器只负责响应或发送遵守此协议的信息,把从前C/S结构中客户端与服务器的紧密性解开了。从此,厂商再也不用为了维护客户端的版本更新而伤财费力,像IE浏览器,已经嵌在系统中,用户也不需要再为安装哪种客户端,使用哪个厂商的服务而大伤脑筋。





一个C/S结构的应用,客户端向服务器发送信息,从服务器得到响应,服务器解析客户端的信息,将处理结果返还给客户端。在这个应用中,服务器为了响应多个客户端,需要多进程或者多线程编程。

抛开复杂的东西不谈,不同的B/S应用,服务器端最基本的:监听客户端连接,提供服务,销毁客户端不用的资源等,这些内容是每个C/S结构应用都需要的,而对于B/S结构的应用而言,这些内容也是基本相同的,每写一个应用都要做这些重复的工作,是很费时费力的。

既然在Web这种B/S结构应用中,客户端与服务器通信的协议已经固定了,那么能否再把相同的服务器端代码再提取出来,使这些代码与业务相关的代码分离,从而达到让一个服务器可以服务不同的应用,让同一个应用也可以跑在不同的服务器上呢?这是否就需要在应用与服务器间建立一套协议呢?





这就是一套规范,服务器只负责调用规范中的API给应用提供服务,而服务器为了能够调用到我们具体的业务逻辑方法,就需要我们去实现这套API中接口或类的固定方法,服务器与应用的业务实现者通过这个规范交流,无论不同的服务器内部如何实现,它与业务实现者的交流是通过API中规范的接口或类中的方法,无论多么复杂的业务逻辑,业务实现者想要返回处理结果给客户也要通过这套API。而这套API就需要服务器与业务实现者共同遵守。这样就把开发者从与服务器的交流中解放出来,使他们更专注于业务的开发中。这也就是JavaEE规范起的作用。





Servlet是JavaEE中的一部分,它位于Web层,负责处理客户请求并对客户请求做出响应,为客户端提供动态的内容,是客户端与应用程序交流的桥梁,主要服务是在标准的请求响应结构中与客户交换和传送数据。





容器:普通的玻璃容器可以用来装水,JavaSE中数组容器、集合容器可以用来装一组相同对象,JavaEE的容器里面装的是组件。无论是集合容器还是JavaEE的容器,里面内容(组件)的管理依靠容器,组件之间的交流也要依靠容器,容器的作用就是为这些组件提供运行环境以及所需要的服务。JavaEE的容器可以用来接收请求,把用户的需求影射到某个资源(如我们写好的Servlet上),再由容器把响应信息发送给客户。容器是由希望在自己的产品中采用Servlet技术的厂商实现的(通常是在Web服务器中)





Servlet:属于JavaEE中的Web组件,容器负责实例化、初始化、调用和销毁部署在其中的Servlet组件。Servlet实际上就是一个Java类,用来动态处理请求以及构造响应信息,它可以动态生成Html的Web页面做为请求的响应,还可以向客户端发送其他格式的数据,如串行化的Java对象、XML等。这些Servlet就是在一个Servlet容器中运行,由容器管理,访问由容器提供的服务。Servlet是由想要使用JavaServlet技术开发Web应用的程序员编写的,并部署到Web应用程序中。





OK,认真的看过上面的介绍,相信我们自己都有感觉了。Servlet就是BS架构中的服务器端小程序。从广义上来讲,Servlet 规范是 Sun 公司制定的一套技术标准,包含与 Web 应用相关的一系列接口,是 Web 应用实现方式的宏观解决方案。而具体的 Servlet 容器负责提供标准的实现。从狭义上来讲,Servlet 指的是 javax.servlet.Servlet 接口及其子接口,也可以指实现了 Servlet 接口的实现类。Servlet 作为服务器端的一个组件,它的本意是“服务器端的小程序” 。Servlet
的实例对象由 Servlet 容器负责创建Servlet 的方法由容器在特定情况下调用;Servlet 容器会在 Web 应用卸载时销毁 Servlet 对象的实例。

下面贴2张图片:1,Web应用运行模式



2,通过网页驱动服务器端的 Java 程序。在网页上显示 Java 程序返回的数据。



  • 怎么样就玩好这个东西了?具体的应该玩这个东西的什么?

之后我会认真的把Servlet的每一个细节都整理完,其中的内容包括:Servlet继承体系,Servlet常用API,Servlet生命周期,Servlet常用操作等等。





Servlet开篇的更多相关文章

  1. 1 Servlet开篇准备

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 1. HTTP协议 HTTP协议是TCP/IP协议的上层协议.TCP负责确保从一个网络节点向另一个网络节点发送的 ...

  2. java web简易网上书店项目系列,使用MVC模式(servlet+jstl+dbutils),开篇

    一. 针对很多java web初学者入门困难的问题,笔者利用一个小型web项目,一步一步的展示java web开发方法,每一个章节引入一些java web开发的重点知识,让同学们可以将java web ...

  3. JSP学习 —— 开篇:JSP,servlet容器,Tomcat,servlet容器之间的关系

    JSP(JAVA SERVER PAGE)的缩写,其本身就是servlet的简化,是一种动态网页标准,其特点是在HTML代码中嵌入JAVA代码,JSP标签或用户标签来生成网页.至于它为什么会出现,主要 ...

  4. JSP入门:介绍什么是JSP和Servlet(转)

    转自:http://developer.51cto.com/art/200907/134506.htm JSP入门:什么是jsp? JSP(Java Server Pages)是由Sun Micros ...

  5. 从.Net到Java学习第一篇——开篇

    以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...

  6. Servlet、Tomcat访问(access)日志配置、记录Post请求参数

    一.运行环境: Maven:3.5.2(点击下载) ,下载页 Tomcat:8.5.29(点击下载) ,下载页 JDK:jdk1.7.0_80(点击下载) ,下载页 MavenDependency: ...

  7. Servlet容器请求处理

    红色部分为本章所述模块 所讲述的请求流程模块,大家已经很清楚了.那怎么给大家去讲的更清晰,大家理解的更容易呢?当然是,带着问题去学习,吸收或许会更快些啦.:) 开篇之前,给大家提以下几个问题,这些问题 ...

  8. 【Spring实战】----开篇(包含系列目录链接)

    [Spring实战]----开篇(包含系列目录链接) 置顶2016年11月10日 11:12:56 阅读数:3617 终于还是要对Spring进行解剖,接下来Spring实战篇系列会以应用了Sprin ...

  9. servlet基础梳理(一)

    将近一个月没看servlet了,再加上第一次学习也没有深入.仅仅是笼统的看了一遍,编了一点基础案例就过去了,如今再去看感觉跟没学过一样.这里再用一点时间把这些基础都梳理一下,加深印象并为以后高速复习做 ...

随机推荐

  1. 使用阿里云镜像maven管理配置开发环境

    修改方法:在~/.m2目录下的settings.xml文件中,(如果该文件不存在,则需要从maven/conf目录下拷贝一份),找到<mirrors>标签,添加如下子标签: <mir ...

  2. Maven 环境配置

    1. 解压maven 2. 配置MAVEN_HOME环境变量 MAVEN_HOME   D:\maven\apache-maven-3.0.5-bin\apache-maven-3.0.5 path  ...

  3. .NET技术面试题系列(1) 基础概念

    这是.NET技术面试题系列第一篇,今天主要分享基础概念. 1.简述 private. protected. public.internal 修饰符的访问权限 private : 私有成员, 在类的内部 ...

  4. Elastic-Job-一个分布式调度解决方案

    注:Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成.Elastic-Job-Lite定位为轻量级无中心化 ...

  5. NEST 中的时间单位

    Time units 英文原文地址:Time units 与 Elasticsearch 交互,我们会遇到需要设定时间段的情况(例如:timeout 参数).为了指定时间段,我们可以使用一个表示时间的 ...

  6. [Haskell] 为什么列表操作++很昂贵?

    博主是haskell新手.学习haskll的时候遇到了一些问题,在寻求答案的过程中产生了一些思考,可能理解存在偏差,希望各位不吝赐教. 提出问题 <Learn you a haskell for ...

  7. Django查询笔记1

    models.Book.objects.filter(**kwargs): querySet [obj1,obj2] models.Book.objects.filter(**kwargs).valu ...

  8. Codeforces Round #343 (Div. 2)-629A. Far Relative’s Birthday Cake 629B. Far Relative’s Problem

    A. Far Relative's Birthday Cake time limit per test 1 second memory limit per test 256 megabytes inp ...

  9. BC#64 4.Tree

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5589 对于u,v的xor和就是u到根的xor和 xor上 v到根的xor和.看到n<=5w,考虑莫队 ...

  10. GSS4 - Can you answer these queries IV(线段树懒操作)

    GSS4 - Can you answer these queries IV(线段树懒操作) 标签: 线段树 题目链接 Description recursion有一个正整数序列a[n].现在recu ...