1.最初的html协议以及Tomcat\JBoss扮演的角色
web应用(其实就是2个电脑上的进程)之间的通信是需要遵循协议的,应用层的协议是html,通信过程如下:
首先,客户端向服务器发送一个请求(这个请求是浏览器发出的,URL应该就是网址经浏览器翻译给出的,或者由用户点击某个链接由浏览器翻译给出),该请求包括:
①统一资源标识符(URL)(URL包括数据库连接的URL,JDBC-URL中就有,比如你点击一个登录框,浏览器就发出了一个JDBC-URL,该请求被JBoss获得,然后如果JBoss已经添加了数据库资源,那么JBoss就能访问数据库并把相关资源传给客户端的浏览器)。
②协议版本号
③MIME信息
服务器端的程序接收到这一请求,然后翻译URL,找到对应的资源或资源集,然后把这些资源(资源可以是任意形式)发给客户端。
我们可以在服务器端写一个应用程序,使用socket绑定8080端口来专门处理html请求,然后使用ODBC来连接数据库。(Win32API中有CreateSocket和RecvFrom,SendTo这样的API,我们可以利用这些API手动写一个服务器端的程序。
但是我们的程序没有JBoss\Tomcat做得完善。JBoss监听8080端口,并对其中的html请求响应。
那么我们怎么操控JBoss呢?我们操控CPU用的是各种语言(C++/C/JAVA/C#/SHELL /WINDOWSSHELL/MATLAB/FOTRAIN/…),操作JBoss用的是xml,xml告诉JBoss该干什么,比如把一部分处理html语言的java代码进行装载
2.servlet:
在servlet之前,有cgi,cgi也是一种资源,用户的html请求被服务器响应时,服务器执行对应名称的cgi程序,然后生成对应的html页面,再把页面发送出去。但是cgi有一个缺点:
cgi会为每一个请求生成一个系统进程,从而造成很大的系统开销。(cgi可以由java,c++,c,shell等编写)
Servlet类似于dll,JVM(等价于dll中的Windows操作系统)可以动态地加载类,这样所有的请求运行的进程只需要一份代码,从而有效地减小了开销。Servlet类由JVM进行动态地加载。类似cgi,Servlet也是由Tomcat,JBoss等服务器管理软件进行管理的,JBoss在响应用户的html请求时会执行对应的java程序,加载Servlet类的字节码,然后生成html代码返回给客户端。
Servlet也有不足之处:Servlet是一个java工程,html语言是内嵌在java代码之中的,这样如果要修该html代码来改变页面,那么servlet类要重新编译,再加载到服务器上,这样过于繁琐。
3.jsp:
Jsp(Java Server Page,注意,区别于JS)采用“把java代码内嵌于html代码中”的方式,同时内嵌的java代码又具有“动态加载类”的特性,修改html代码或者内嵌的java代码时,都无须重新编译。因为内嵌的java代码是在“客户端有请求发来时”服务器才会去编译的,而且在请求很多时,java代码都是动态加载类,可以动态加载,生成html时的资源占用少,从而兼具Servlet的优点。
(注:jsp和servlet可以混用,也可以servlet与jsp各都单独使用)
总而言之,jsp是一段java程序,它内嵌于html代码中,含jsp的文件就是.jsp文件,(html协议的html请求中包括URL为.jsp的请求)。如果客户端请求了一个jsp(如果服务器资源中同时有index.jsp和index.html文件,那么index请求的结果将是未定义的,index.jsp请求的结果当然是index.jsp),那么服务器就会先执行.jsp文件中的程序片段,然后将执行结果以HTML格式返回给客户端。程序片段可以操纵数据库,重定向网页以及发送email等
4.js:
js(javascript)Js是脚本(即会被解释成java程序片段由浏览器调用),js是由服务器原样发给客户端的,如果JBoss遇到客户端网页访问请求,它将会根据URL找到对应资源,然后连同附带的js发送给客户端,js在客户端上被浏览器解释执行。
例:使用js和html创建web页面(之前我说的都是js,javascript)
//jspsrc1.js
//JavaScript Appears here
alert(“这是第一个JavaScript例子!”);
alert(“欢迎你进入JavaScript的世界”);
alert(“今后我们将共同学习JavaScript知识!”);
//jspsrc1.html
<html>
<head>
<Script src=”jspsrc1.js”>
</Script>
</Head>
</Html>
然后双击jspsrc1.html就能看到js被解释执行了