2019独角兽企业重金招聘Python工程师标准>>>
-
动静态网页技术
首先说下访问网页的大概过程:
你在浏览器中输入网址,按下enter键,此时浏览器代你做了很多事,简要说为:将你输入的这个网址作为目的地参数,向这个参数代表的web服务器发起了HTTP请求,服务器返回一个HTML页面,浏览器将这个页面呈现给你。
WEB服务器都遵循HTTP规范,所有浏览器、web服务器都实现了HTTP协议规范,而HTTP协议是编程语言无关的,这样使得可以用MFC编的浏览器能访问Tomcat(由Java开发)的中Java Web应用网页。
网址你知道了,网页也显示了,到底是静态的还是动态的呢?
用例子好说些,比如歌手大赛:张三、李四、王五、赵六,
现在要展示每个参赛选手的简历网页,
简历信息主要包含姓名、靓照、性别、出生年月、身高、体重,特长等信息,
几个人的信息在报名时已经登记在excel表格中了。
- 静态网页技术的做法:
根据excel表格给每个选手做一个HTML页面,共有四个网页存放在web服务器的目录下,访问的网址为:
http://www.jianli.com/zhangsan.html
http://www.jianli.com/lisi.html
http://www.jianli.com/wangwu.html
http://www.jianli.com/zhaoliu.html
web服务器根据网址在目录下找到对应的HTML文件,将其返回给浏览器。
有个需求静态网页是做不到的:显示网页被访问多少次!不可能每访问一次改一下这个HTML吧?
- 动态网页技术的做法:
web服务器目录下很可能没有HTML页面。
首先访问网址一般会变成 http://www.jianli.com/geshou?name=xxx
web服务器收到网页请求后,将请求作为参数调用 帮助程序,帮助程序根据请求中名字的不同,到excel中查出具体信息,组装成一个HTML页面返回给服务器,服务器将这个页面传给浏览器。
就是上面的 帮助程序 真正实现了动态网页技术,现今被广泛使用的“帮助程序”有:
微软系的 : asp、aspx;
CGI系的:PHP,Perl,Python
Java系的:Servlet
为什么是servlet
- Java有两种实现动态网页的方式:
1、Java Applet ,在浏览器端用Java applet实现,通过applet能够解释执行WEB服务器发过来的Java代码。这样浏览器必须安装插件,又受限于浏览器,所以Java代码不能太多和太复杂。
2、Server applet , WEB服务器不发Java代码,而去调用基于Java代码的server端applet,此即为servlet
因为servlet就是运行在web服务器中的普通Java程序,每个人可以随便写咯,必然导致混乱,所以出现了servlet规范,规定了WEB服务器对servlet的生命周期的调度:何时调用servlet、怎么调用servlet,何时清理servlet,servlet对请求处理的通用逻辑等。
遵循这个规范的服务器都可以称之为servlet容器。
servlet规范概要:
Server创建一个Servlet的实例
Server调用Servlet的init()方法
一个客户端的请求到达Server
Server创建一个请求对象
Server创建一个响应对象
Server激活Servlet的service()方法,传递请求和响应对象作为参数
service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息
service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。
service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法。
对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次(只有一个对象),当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法
初期servlet是在Java代码中组合拼装html,大量的out语句
JSP是在HTML中嵌入jsp标签(Java代码片段),然后编译成servlet,
接着出现了更好更快的标签及编译技术-struts,
后记
做Java web开发最好从基本的servlet写起,用最原始的servlet开发web应用之后,
再进入各种层面封装起来的框架的学习和整合会没那么多雾水,
各种框架出现的大量配置文件和java代码会弄晕你,
实在是搞不懂干什么用的,为何有这些东西,
这时请回过头来温习你最初的servlet项目,或许会有收获。