Servlet开篇
- 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 Servlet开篇准备
作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 1. HTTP协议 HTTP协议是TCP/IP协议的上层协议.TCP负责确保从一个网络节点向另一个网络节点发送的 ...
- java web简易网上书店项目系列,使用MVC模式(servlet+jstl+dbutils),开篇
一. 针对很多java web初学者入门困难的问题,笔者利用一个小型web项目,一步一步的展示java web开发方法,每一个章节引入一些java web开发的重点知识,让同学们可以将java web ...
- JSP学习 —— 开篇:JSP,servlet容器,Tomcat,servlet容器之间的关系
JSP(JAVA SERVER PAGE)的缩写,其本身就是servlet的简化,是一种动态网页标准,其特点是在HTML代码中嵌入JAVA代码,JSP标签或用户标签来生成网页.至于它为什么会出现,主要 ...
- JSP入门:介绍什么是JSP和Servlet(转)
转自:http://developer.51cto.com/art/200907/134506.htm JSP入门:什么是jsp? JSP(Java Server Pages)是由Sun Micros ...
- 从.Net到Java学习第一篇——开篇
以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...
- Servlet、Tomcat访问(access)日志配置、记录Post请求参数
一.运行环境: Maven:3.5.2(点击下载) ,下载页 Tomcat:8.5.29(点击下载) ,下载页 JDK:jdk1.7.0_80(点击下载) ,下载页 MavenDependency: ...
- Servlet容器请求处理
红色部分为本章所述模块 所讲述的请求流程模块,大家已经很清楚了.那怎么给大家去讲的更清晰,大家理解的更容易呢?当然是,带着问题去学习,吸收或许会更快些啦.:) 开篇之前,给大家提以下几个问题,这些问题 ...
- 【Spring实战】----开篇(包含系列目录链接)
[Spring实战]----开篇(包含系列目录链接) 置顶2016年11月10日 11:12:56 阅读数:3617 终于还是要对Spring进行解剖,接下来Spring实战篇系列会以应用了Sprin ...
- servlet基础梳理(一)
将近一个月没看servlet了,再加上第一次学习也没有深入.仅仅是笼统的看了一遍,编了一点基础案例就过去了,如今再去看感觉跟没学过一样.这里再用一点时间把这些基础都梳理一下,加深印象并为以后高速复习做 ...
随机推荐
- windows虚拟内存管理
内存管理是操作系统非常重要的部分,处理器每一次的升级都会给内存管理方式带来巨大的变化,向早期的8086cpu的分段式管理,到后来的80x86 系列的32位cpu推出的保护模式和段页式管理.在应用程序中 ...
- windbg蓝屏调试
一般在写Windows内核程序的时候,经常会出现蓝屏的问题,这个时候一般是采用记录下dump文件然后用windbg查看得方式,具体的过程就不说了,网上一大堆的内容.现在我主要记录自己当初按照网上的方案 ...
- 大数据分析中Redis怎么做到220万ops
大数据时代,海量数据分析就像吃饭一样,成为了我们每天的工作.为了更好的为公司提供运营决策,各种抖机灵甚至异想天开的想法都会紧跟着接踵而来!业务多变,决定了必须每天修改系统,重新跑数据,这就要求极高的海 ...
- css写的常见图形
.aly-tooltip { display: inline-block; padding: 5px; padding-left: 15px; padding-right: 15px; backgro ...
- cloudera-manager所有服务提示时钟偏差问题解决办法
今天新部署Cloudera Manager Hadoop(CDH)集群 发现祖国江山一片红,所有服务都报时钟偏差 1.查看各服务器,时钟是否正确 发现并无问题 2.查看CDH主机配置----主机时钟偏 ...
- 使用elk转存储日志
ELK指的是由Elastic公司提供的三个开源组件Elasticsearch.Logstash和Kibana. Logstash:开源的服务器端数据处理管道,能够同时 从多个来源采集数据.转换数据,然 ...
- python面向对象进阶
前言 上节大话python面向对象对面向对象有了一些了解,这次就不用大话风格了 (ps:真心不好扯啊) isinstance与issubclass isinstance(obj,cls)检查是否obj ...
- vue vue-style-loader !css-loader错误
最近在学习vue框架,使用webpack打包vue项目,在执行npm run start的时候 出现如下错误: This dependency was not found: * !!vue-style ...
- ReentrantLock与Condition构造有界缓存队列与数据栈
通过ReentrantLock与Condition的设计,以数组为基础,可以实现简单的队列和栈的数据结构,临界阻塞的效果. ReentrantLock相对于synchronized比较大的一个区别是有 ...
- JS URI Encode
javascript中存在几种对URL字符串进行编码的方法:escape/encodeURI/encodeURIComponent.这几种编码所起的作用各不相同. escape 采用ISO Latin ...