1.1 Web开发背景知识
1.1.1 Web访问的基本原理
Web访问可以简单划分为两个过程:客户端请求、服务器端响应并显示结果。客户端的请求通过Servlet引擎传递给Servlet模块,Web服务器接受客户端的请求,并把处理的结果返回给客户。客户端与服务器之间的通信协议就是HTTP超文本协议。客户端与服务器之间的请求模式如图1所示。
图1 Web响应原理
1.1.2 超文本传输协议
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一种互联网上应用最为广泛的网络协议,是一种无状态的协议。自1990年起,就已经被应用于WWW全球信息服务系统。所有的WWW文件都必须遵循这个标准。
HTTP协议的主要特点如下:
♦ 简单、快速:客户端向服务器请求服务时,只需发送请求方法和路劲URL。通常请求的方法有POST和GET。由于HTTP传输协议简单,使得HTTP服务器的程序规模相对较小,因此传输速度较快。
♦ 灵活:HTTP允许传输任意类型的数据,例如普通文本、超文本、音频、视频等,主要由Content-Type控制。
♦ 无状态:无状态是指对于数据库事务处理没有记忆能力。后续的处理如果需要前面的信息,就需要重新发送。
♦ 无连接:无连接的含义是每次连接只处理一次请求,处理完当次请求后就断开连接。
1.1.3 静态网页和动态网页
在网站设计中,直接使用HTML标记语言编写的网页通常被称作为“静态网页”。静态网页时标准的HTML文件,后缀名为“.htm”或“.html”。它所展示的内容一般是固定不变的,早期的网站一般都是由静态网页制作的。静态网页更新起来比较麻烦,需要将更新的HTML页面重新上传到网站服务器。显然,这样的网站缺乏灵活性,同时网站的维护成本也比较高。动态网页技术的出现改变了如此不灵活的状态,用户在不同时间或不同地点访问同一动态网页时显示的内容可以是不同的。
所谓静态网页与动态网页,是基于访问网页时页面的内容有无变化而言的,与页面的视觉效果没有关系。因为动态的视觉效果大多是通过JavaScript或其他基于JavaScript的框架技术实现的,与动态网页技术没有直接必然的联系。
动态网页中的变化内容大多来自于数据库中数据的变化,通过增加、删除、修改、查找数据库中存储的数据来显示内容的变化。例如,在微博中发布一条微博后,查看微博时,会将所发的微博即时显示出来,这在静态网页中是无法完成的。动态网页在被访问时,首先运行服务端脚本,通过它生成网页内容。显然,网页的内容是在访问该网页的时候动态生成的,而静态网页是提前做好放在服务器中的,因此,当前网络上的网页大多是动态网页,很少有静态网页,除非一些固定不变的内容,例如发布公告等新闻内容。
目前比较流行的动态网页技术吧包含ASP、PHP以及JSP。
♦ ASP更精准的说应该是一个中间件,它将Web上的请求转入到IIS解释器中,IIS将ASP上的Script脚本全部解析执行。其缺点就是不能跨平台,只能在Windows平台下,开发受到诸多限制。其优点是微软提供了强大的IDE,所以开发者容易上手且开发效率也较高。
♦ PHP是当前比较流行的动态网页技术,是一种HTML内嵌式的语言,其语法融合了Java、C和Prel,能够比CGI更加快速地执行动态网页。其优点是开源、跨平台,正因为其具有开源和跨平台特性,所以很多网站都采用PHP编写自身的网页;其缺点是安装复杂,需要添加很多的外部库来支持,如图形需要gd库等。
♦ JSP(Java Server Pages)采用Java语言作为服务器端脚本,页面由HTML和嵌入Java代码组成。随着Java的广泛应用,JSP的应用也越来越广泛。其优点是简单实用,完全面向对象,具有Java的平台无关性和安全可靠性。
1.1.4 Web浏览器和Web服务器
浏览器是指Web服务的客户端浏览程序。它可以向服务器发送各种请求,并对从服务器中返回的各种信息(包括文本、超文本、音频、视频等各种数据)进行解释、显示和播放。
浏览器与服务器的关系可谓是“唇齿相依”,浏览器发送请求,服务器处理请求并将结果发回给浏览器显示。
1.2 JSP简介
1.2.1 什么是JSP
JSP技术是由SUN公司(现被Oracle收购)提出,多家公司参与的,于1999年推出的一款建设动态网站的方法。它基于Java Servlet技术来开发动态的、高性能的Web应用程序。JSP的网页实际上是在HTML文件中加入的Java代码片段和JSP的特殊标记构成的。
因为JSP是Java的成员,所以JSP具有平台无关性,即实现了跨平台功能,实现了用户界面和程序代码的解耦合,使得业务逻辑与代码的耦合度更低,开发人员可以在不更改JSP程序的情况下修改用户的界面。
JSP界面实际上也是一个HTML页面,只不过他包含了用于产生动态网页内容的Java代码,这些Java代码可以是Java Bean、SQL语句、RMI(远程方法调用)对象等。例如:一个JSP页面包含了用于产生静态网页的HTML代码,同时也包含了连接数据库的JDBC代码,那么当网页在浏览器中显示时,它既包含了静态的HTML代码,又包含了从数据库中取得的动态内容,正因为如此才能称之为动态网页。
1.2.2 JSP优势
JSP可以看做是Java Servlet的一种扩展,JSP在使用前必须被编译为Servlet,也就是Java类,然后被调用执行,Servlet所产生的Web页面是不能包含在HTML标签中的,因为它离不开Java类文件的支持。
♦ 开发简单方便
♦ 跨平台
♦ 高效率和高性能
♦ 低成本
1.2.3 JSP的执行顺序
JSP程序的执行过程大致如下:首先客户端向Web服务器提出请求,然后JSP引擎负责将页面转化为Servlet,此Servlet经过虚拟机编译生成类文件,再把类文件加载到内存中执行,最后由服务器将处理结果返回给客户端。整个流程如图2所示。
图2 JSP执行顺序
JSP页面代码会被编译成Servlet代码,所以从执行效率上说肯定是没有Servlet快,但并不是每一次都需要编译JSP页面。当JSP第一次被编译成类文件后,重复调用该JSP页面时,JSP引擎发现该JSP页面没有改动过,那么就会直接使用编译后的类文件,而不会再次编译为新的Servlet。当然,如果页面被修改过,则需要重新加载编译。
1.2.4 一个JSP的简单实例
以下是JSP网页的一个简单实例,功能是输出1~10的相加结果:
<%-- Created by IntelliJ IDEA. User: 邱宇 Date: 2020-09-25 Time: 20:15 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*"%> <html> <head> <title>JSP简单例子</title> </head> <body> <% int count=0; for(int i=1;i<=10;i++){ count+=i; } out.print("1到10的相加结果="+count); %> </body> </html>