JavaWeb开发学习(一)-JavaWeb开发概述
1、Web相关概念
Web程序也就是一般所说的网站,由服务器、客户端浏览器以及网络组成。Web程序的好处是使用简单,不需要安装、学习,有一台电脑、一根网线就可以使用。Web程序不是一般意义上的网站。网站的目的是提供信息服务,重在内容,程序往往比较简单。但一个Web程序往往比较复杂,背后结合数据库等技术。
按照是否需要访问网络,程序可分为网络程序和非网络程序。其中网络程序又分为B/S和C/S结构。C/S是指客户端(Client)/服务器(Server)模式。这种模式的客户端需要安装一个桌面程序。桌面程序负责与服务器进行数据交换。一般的网络程序都是C/S结构,例如QQ、MSN、PP Live、迅雷等。B/S是指浏览器(Browser)/服务器(Server)模式。一般的网站都是B/S结构的,例如Google、百度。
2、Web开发背景知识
2.1 Web访问的基本原理
(1)用户打开浏览器,输入网站的URL地址,也就是是通常说的网址。这个地址告诉浏览器要访问互联网中的哪台主机。
(2)浏览器寻找到指定的主机之后,向Web服务器发出请求(request)。
(3)Web服务器接受请求并做出相应的处理,生成处理结果,大多数生成HTML格式,也有其他响应的格式。
(4)服务器把响应的结果返回发送给服务器。
(5)浏览器接收到相对应的响应结果后,在浏览器中显示响应结构,比如Web页面。
图1.1 浏览器访问Web过程
2.2 HTTP超文本传输协议
HTTP协议是浏览器和服务器之间的应用层通信协议,它是基于TCP/IP之上的协议,不仅保证正确传输超文本文档,还确定传输文档中的那一部分,以及哪一部分内容首先显示(如文本先于图片)等。下面介绍基于HTTP协议的客户端/服务器模式的信息交换过程,它分为4个过程:建立连接。发送请求信息、发送响应信息、关闭连接。
· 建立连接:连接的建立是通过申请套接字(Socket)实现的。客户端打开一个套接字并把它约束在一个端口上,如果成功,就相当于建立了一个虚拟文件。以后就可以在该虚拟文件上些数据并通过网络向外传送。
· 发送请求:打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出的请求动作。
· 发送响应:服务器在处理完饿虎短的请求之后,要向客户机发送响应消息。
· 关闭连接:客户和服务器双方都可以通过关闭套接字来结束TCP/IP对话。
2.3 Web浏览器
目前,有很多Web浏览器,主流的浏览器有:IE、Firefox、Opera、Chrome等。
2.4 Web服务器
在服务器端,与通信相关的处理都是由服务器软件负责,这些服务器软件都由第三方的软件厂商提供,开发人员只需要把功能代码部署在Web服务器中,客户端就可以通过浏览器访问到这些功能代码,从而实现向客户提供的服务,常用的服务器有:
· IIS是微软提供的一种Web服务器,提供对ASP语言良好的支持,通过插件的安装,也可以提供对PHP语言的支持。
· Apache服务器是由Apache基金组织停工的一种Web服务器,提供对JSP和Servlet的支持,通过安装插件,同样可以提供对PHP语言的支持,但是Tomcat只是一个轻量级的JavaWeb容器,像EJB这样的服务在Tomcat中是不能运行的。
· JBoss是一个开源的重量级的Javaweb服务器,在JBoss中,提供对J2EE各种规范的良好支持,而且JBoss通过了Sun公司的J2EE认证,是Sun公司认可的J2EE容器。
· 另外J2EE的服务器还有BEA的Weblogic和IBM的WebSphere等,适合大型的商业应用。这些产品的性能都是非常优秀的,可以提供对J2EE的良好支持。
3 Web开发技术
3.1 Java Servlet
Sun公司在上世纪90年代末就发布了基于Servlet的Web服务器。为了确保加载在各个类之间不起冲突,已经建立了一个称为Java Servlet API(应用编程接口)的编码标准。现在基本上所有的服务器都遵循这个编码标准,所以Servlet有很好的移植性。现在的Web服务器已经集成了Servlet容器,Servlet容器负责管理加载、卸载、重新加载和之行Servlet代码等操作。
与传统的CGI程序相比,Servlet有如下几个优点:
· 只需要启动一个操作系统进程以及加载一个JVM,大大的降低了系统的开销。
· 如果多个请求需要做同样处理的时候,这时只需要加载一个类,这也大大降低了开销。
· 所有动态加载的类可以实现对网络协议以及请求解码的代码共享,大大降低了工作量。
· Servlet能够直接和Web服务器交互,而普通的CGI程序不能。Servlet还能在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。
虽然Servlet改变了传统CGI程序的缺点,但是它也有不足的地方:Servlet可以建立动态生成的网页,而网页中可以包含从服务器断的Java对象所获得的数据。但是Servlet生成网页的方法是在Java类中嵌入HTML标签和表达式。也就是说对HTML坐一个小小的改动是,都需要修改和重新编译Servlet 源文件,然后重新部署到Servlet容器中。或许设计HTML页面和编写Servlet代码的不是同一个人,这就使得修改Servlet变得非常麻烦。
3.2 JSP: Servlet的模板
Java Server Page(JSP)是一种实现普通静态HTML和动态HTML混合编码的技术,它是Servlet API的一个扩展。由于JSP页面在编译成Servlet之前也是可以使用的,所以它具有了Servlet的所有优点,包括访问Java API。又由于JSP是嵌入到Servlet中关于应用程序的一般表达代码,所以可以把它看成一种“彻底”的Servlet。访问一个JSP网站的过程如图1.2所示。
图1.2 JSP页面访问示意图
3.3 JSP基本原理
Web容器处理JSP文件请求需要经过三个阶段:
· 翻译阶段:在这一阶段,编写好的JSP文件首先会被Web容器中的JSP引擎转换成Java源代码,也就是通过Servlet引擎。
· 编译阶段:JSP文件所翻译成的Java源代码会被编译成可执行的字节码(可执行的字节码是二进制格式)。
· 请求阶段:当容器接受了客户端的请求之后,就执行前面已经编译成二进制字节码的JSP文件。出来请求之后,容器再把生成的页面反馈给客户端进行显示。
JavaWeb开发学习(一)-JavaWeb开发概述的更多相关文章
- Android开发学习之LauncherActivity开发启动的列表
Android开发学习之LauncherActivity开发启动的列表 创建项目:OtherActivity 项目运行结果: 建立主Activity:OtherActivity.java [jav ...
- Android开发学习总结——Android开发的一些相关概念
一.什么是3G.4G 1995年问世的第一代模拟制式手机(1G)只能进行语音通话. 1996到1997年出现的第二代GSM.CDMA等数字制式手机(2G)便增加了接收数据的功能 3G指的是第三代移 ...
- Android开发学习总结——Android开发的一些相关概念(转)
一.什么是3G.4G 1995年问世的第一代模拟制式手机(1G)只能进行语音通话. 1996到1997年出现的第二代GSM.CDMA等数字制式手机(2G)便增加了接收数据的功能 3G指的是第三代移 ...
- android开发学习---linux下开发环境的搭建&& android基础知识介绍
一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- 吴裕雄--天生自然 R语言开发学习:集成开发环境\工具RStudio的安装与配置
- 吴裕雄--天生自然 JAVA开发学习:Java 开发环境配置
- 吴裕雄--天生自然Android开发学习:android开发知识学习思维导图
- 熬夜肝了一份 C++/Linux 开发学习路线
大家好,我是帅地. 之前写过几篇学习路线的文章 前端开发学习路线 Java 后端开发学习路线 一般开发岗主流的就是 Java 后台开发,前端开发以及 C++ 后台开发,现在 Go 开发也是越来越多了, ...
- javaweb学习之Servlet开发(二)
javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...
随机推荐
- js 日期对象Date以及传参
创建一个日期对象,日期对象可传参new Date() 创建日期对象getFullYear() 获取年份 getMonth() 获取月份 返回值是 0(一月) 到 11(十二月) 之间的一个整数 get ...
- VLC嵌入网页,终于要成功了!
<OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" width="640" heig ...
- POJ3020 匹配
题目大意:给定一地图,*可以和相邻的*匹配成一对儿,问最少需要对儿匹配才能使所有*都被匹配到. 很直白的最小点覆盖,即ans = 点集数-最大匹配数. 不过一开始要对图进行遍历得到点集,找到一个*就把 ...
- In和Out指令
In和Out OUT 0FAH,AL(它是指从AL中输出一个字节到0FAH的一个端口吗?) OUT DX,AL OUT 0FAH,AX(AX是一个字为什么也能输出到0FAH所指的8位端口中呢?) ...
- SQL Server 数据库 'xxx' 正处于转换状态。请稍后再尝试该语句。
问题是这样的,最近因义务需要,公司更换了数据库服务器.数据库随之切换到新的服务器上. 服务器是 Windows Server 2012系统,数据库是SQL Server 2012 .上面有 多个数据库 ...
- MongoDB的C#官方驱动InvalidOperationException异常的解决办法
异常情况描述 有一个“文章”类,其中包含一个“List<段落>”类型的属性,“段落”类是抽象类,其子类有“副标题段落”.“文本段落”.“图像段落”.“附件段落”.“列表段落”等类型. 将“ ...
- a 标签提交前验证
最近在做验证的时候遇到了submit()与onsubmit()事件冲突的问题,本来想在a标签中添加submit()进行表单的提交,然后在 form中添加onsubmit事件触发验证方法.结果行不通,最 ...
- (原创)通用查询实现方案(可用于DDD)[附源码] -- 设计思路
[声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3988592.html). [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...
- Ceph剖析:数据分布之CRUSH算法与一致性Hash
作者:吴香伟 发表于 2014/09/05 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 数据分布是分布式存储系统的一个重要部分,数据分布算法至少要考虑以下三个 ...
- [转]Snappy压缩库安装和使用之一
Snappy压缩库安装和使用之一 原文地址:http://blog.csdn.net/luo6620378xu/article/details/8521223 近日需要在毕业设计中引入一个压缩库,要求 ...