当前位置:首页 » 网页前端 » velocityweb应用
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

velocityweb应用

发布时间: 2023-05-16 03:28:30

1. jquery怎么使用velocity

Velocity的基本用法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Velocity概述

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。当Velocity 应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也 为我们在JSP和PHP之外又提供了一种可选的方案。
Velocity的能力远不止web站点开发这个领域,例如,它可以从模板 (template)产生sql和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。 Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。

一、基本语法

1、"#"用来标识Velocity的脚本语句,包括#set、#if 、#else、#end、#foreach、#end、#include、#parse、#macro等;
如:
#if($info.imgs)
<img src="$info.imgs" border=0>
#else
<img src="noPhoto.jpg">
#end

2、"$"用来标识一个对象(或理解为变量);如:$i、$msg、$TagUtil.options(...)等。

3、"{}"用来明确标识Velocity变量;
比如在页面中,页面中有一个$someonename,此时,Velocity将把someonename作为变量名,若我们程序是想在someone这个变量的后面紧接着显示name字符,则上面的标签应该改成${someone}name。

4、"!"用来强制把不存在的变量显示为空白。
如当页面中包含$msg,如果msg对象有值,将显示msg的值,如果不存在msg对象同,则在页面中将显示$msg字符。这是我们不希望的,为了把不存在的变量或变量值为null的对象显示为空白,则只需要在变量名前加一个“!”号即可。
如:$!msg

二、在EasyJWeb中的最佳实践

理论上你可以在EasyjWeb模板使用所有Velocity的脚本及功能,但我们不推荐你在界面模板中使用过多过复杂的脚本表达方式,在万不得已的情况下,不要在界面模板中加入任何复杂的逻辑,更不要在界面模板中加入变量声明、逻辑运算符等等。
1、$!obj 直接返回对象结果。
如:在html标签中显示java对象msg的值。<p>$!msg</p>
在html标签中显示经过HtmlUtil对象处理过后的msg对象的值<p>$!HtmlUtil.doSomething($!msg)</p>

2、#if($!obj) #else #end 判断语句
如:在EasyJWeb各种开源应用中,我们经常看到的用于弹出提示信息msg的例子。
#if($msg)
<script>
alert('$!msg');
</script>
#end
上面的脚本表示当对象msg对象存在时,输出<script>等后面的内容。

3、#foreach( $info in $list) $info.someList #end循环读取集合list中的对象,并作相应的处理。
如:EasyJF开源论坛系统中论(0.3)坛首页显示热门主题的html界面模板脚本:
#foreach( $info in $hotList1)
<a href="/bbsdoc.ejf?easyJWebCommand=show&&cid=$!info.cid"
target="_blank">$!info.title</a><br>
#end
上面的脚本表示循环遍历hotList1集合中的对象,并输出对象的相关内容。
4、#macro(macroName)#end 脚本函数(宏)调用,不推荐在界面模板中大量使用。 Velocity中的宏我们可以理解为函数。 ①宏的定义 #macro(宏的名称 $参数1 $参数2 …) 语句体(即函数体) #end
②宏的调用 #宏的名称($参数1 $参数2 …)
说明:参数之间用空格隔开。
如:在使用EasyJWeb Tools快速生成的添删改查示例中,可以点击列表的标题栏进行升降排序显示,这是我们在EasyJWeb应用中经常看到的一个排序状态显示的模板内容。
函数(宏)定义,一般放在最前面
#macro(orderPic $type)
#if ($orderField.equals($type))
<img src="http://images.cnblogs.com/ico/${orderType}.gif">
#end
#end
具体的调用如:<font color="#FFFFFF">头衔#orderPic("title")</font>

5、包含文件#inclue("模板文件名")或#parse("模板文件名")
主要用于处理具有相同内容的页面,比如每个网站的顶部或尾部内容。
如:#parse("/blog/top.html")或#include("/blog/top.html")
区别:
1 若包含的文件中有Velocity脚本标签,将会进一步解析,而include将原样
显示。
2 #parse只能指定单个对象。而#include可以有多个
示范代码:
#include ("one.gif", "two.txt", "three.htm" )
#parse ("parsefoo.vm")
三、关于#set的使用

在万不得已的时候,不要在页面视图自己声明Velocity脚本变量,也就是尽量少使用#set。有时候我们需要在页面中显示序号,而程序对象中又没有包含这个序号属性同,可以自己定义。如在一个循环体系中,如下所示:
#set ($i=0)
#foreach($info in $list)
序号:$i
#set($i=$i+1)
#end

四、Velocity脚本语法摘要

声明:#set ($var=XXX)
变量引用,字面字符串,属性引用,方法引用,字面数字,数组列表。
#set( $monkey = $bill ) ## variable reference
#set( $monkey.Friend = "monica" ) ## string
#set( $monkey.Blame = $whitehouse.Leak ) ## property reference
#set( $monkey.Plan = $spindoctor.weave($web) ) ## method reference
#set( $monkey.Number = 123 ) ##number
#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList
算术运算符
#set ( $foo = $bar + 3 ) #set ( $foo = $bar - 4 ) #set ( $foo = $bar * 6 ) #set ( $foo = $bar / 2 )

2、注释:
单行## XXX
多行#* xxx
xxxx
xxxxxxxxxxxx*#

References 引用的类型
3、变量 Variables
以 "$" 开头,第一个字符必须为字母。character followed by a VTL Identifier. (a .. z or A .. Z).
变量可以包含的字符有以下内容:
alphabetic (a .. z, A .. Z)
numeric (0 .. 9)
hyphen ("-")
underscore ("_")

4、Properties
$Identifier.Identifier
$user.name
hashtable user中的的name值.类似:user.get("name")

5、Methods
object user.getName() = $user.getName()

6、Formal Reference Notation
用{}把变量名跟字符串分开


#set ($user="csy"}
${user}name
返回csyname

$username
$!username
$与$!的区别
当找不到username的时候,$username返回字符串"$username",而$!username返回空字符串""

7、双引号 与 引号
#set ($var="helo")
test"$var" 返回testhello
test'$var' 返回test'$var'
可以通过设置 stringliterals.interpolate=false改变默认处理方式

8、条件语句
#if( $foo )
<strong>Velocity!</strong>
#end
#if($foo)
#elseif()
#else
#end
当$foo为null或为Boolean对象的false值执行.

9、逻辑运算符:== && || !

10、循环语句#foreach($var in $arrays ) // 集合包含下面三种Vector, a Hashtable or an Array
#end
#foreach( $proct in $allProcts )
<li>$proct</li>
#end

#foreach( $key in $allProcts.keySet() )
<li>Key: $key -> Value: $allProcts.get($key)</li>
#end

#foreach( $customer in $customerList )
<tr><td>$velocityCount</td><td>$customer.Name</td></tr>
#end
语句的嵌套 #foreach ($element in $list) ## inner foreach 内循环 #foreach ($element in $list) This is $element. $velocityCount <br>inner<br> #end ## inner foreach 内循环结束 ## outer foreach This is $element. $velocityCount <br>outer<br> #end

11、velocityCount变量在配置文件中定义
# Default name of the loop counter
# variable reference.
directive.foreach.counter.name = velocityCount
# Default starting value of the loop
# counter variable reference.
directive.foreach.counter.initial.value = 1

12、包含文件
#include( "one.gif","two.txt","three.htm" )

13、Parse导入脚本
#parse("me.vm" )

14、#stop 停止执行并返回
停止执行模板引擎并返回,把它应用于debug是很有帮助的。

15、定义宏Velocimacros ,相当于函数 支持包含功能
#macro( d )
<tr><td></td></tr>
#end
调用
#d()

16、带参数的宏
#macro( tablerows $color $somelist )
#foreach( $something in $somelist )
<tr><td bgcolor=$color>$something</td></tr>
#end
#end

17、Range Operator
#foreach( $foo in [1..5] )

18、转义字符
如果reference被定义,两个’\’意味着输出一个’\’,如果未被定义,刚按原样输出。 #set($email = "foo" ) $email \$email \\$email \\\$email
输出: foo $email....

2. web前后端的区别

详细的解释一下web前后端的区别

1、

前台:呈现给用户的视觉和基本的操作。

后台:用户浏览网页时,我们看不见的后台数据跑动。后台包括前端、后端。

前端:对应我们写的html、css、javascript等网页语言作用在前端网页。

后端:对应jsp、javaBean、层、action层和service层的业务逻辑代码。(包括数据库

为什么jsp是后端呢?主要是jsp的运行原理是在tomcat服务器运行的。

2、

(1)javaweb是java开发中的一个方向java有搞安卓的,搞web的,搞嵌入式的等。javaweb就是指搞web方向的,javaweb分两块,一块是服务器端叫后端,另一块叫前端,也就是web前端。前端就是用户能看到的部分,比如淘宝网,qq空间,网页上你能看到的都是web前端做的。后端做的就是为前端的展示业务逻辑功能做处理。

(2)javaweb包括了jsp,servelt以及一些框架比如spring,structs以及与数据库交互的知识,当然也涉及到了html,css等前端技术,但是更侧重于后端的开发。web前端主要是html,css,javascript之类的技术。

jaweb是javaee的一个方向,Javaweb,由前端、Java代码、和数据库三个大方面组成,前端只是其中之一。

(3)在我们的机子上看到的界面,安装的程序,给用户看的,操作的就是前端;而你看不到的,帮你保存网络游戏数据,保存应用数据,处理数据的就是后端(服务器)。比如说:我们在用的知乎就是前端,而保存这个问题,还有把这个问题推送给你的就是后端。

二、定义不同

一般来说,我们将网站分为前端和后端。前端主要负责页面的展示,后端则是业务逻辑的实现。

1、Web前端:

顾名思义是来做Web的前端的。这里所说的前端泛指Web前端,也就是在Web应用中用户可以看得见碰得着的东西。包括Web页面的结构、Web的外观视觉表现以及Web层面的交互实现。

2、Web后端:

后端更多的是与数据库进行交互以处理相应的业务逻辑。需要考虑的是如何实现功能、数据的存取、平台的稳定性与性能等。

三、需要掌握的技术不同

1、Web前端:

精通JS,能熟练应用JQuery,懂CSS,能熟练运用这些知识,进行交互效果的开发。

(1)精通HTML,能够书写语义合理,结构清晰,易维护的HTML结构;

(2)精通CSS,能够还原视觉设计,并兼容业界承认的主流浏览器;

(3)熟悉JavaScript,了解ECMAScript基础内容,掌握1-2种js框架,如JQuery;

(4)对常见的浏游乎览器兼容问题有清晰的理解,并有可靠的解决方案;

(5)对性能有一定的要求,了解yahoo的性能优化建议,并可以在项目中有效实施。

2、Web后端:

后端开发人员:会写Java代码,会写SQL语句,能做简单的数据库设计,会Spring和iBatis,懂一些设计模式等。

(1)精通jsp,servlet,javabean,JMS,EJB,Jdbc,Flex开发,或者对相关的工具、类库以及框架非常熟悉,如Velocity,Spring,Hibernate,iBatis,OSGI等,对Web开发的模式有较深神乎悉的理解;

(2)练使用oracle、sqlserver、mysql等常用的数据库系统,对数据库有较强的设计能力;

(3)熟悉maven项目配置管理工具,熟悉tomcat、jboss等应用服务器,同时对在高并发处理情况下的负载调优有相关经验者优先考虑;

(4)精通面向对象分析和设计技术,包括设计模式、UML建模等;

(5)熟悉网络编程,具有设计和开发顷丛对外API接口经验和能力,同时具备跨平台的API规范设计以及API高效调用设计能力。

四、web后端和前端是怎么连接的?

1、web服务器(apache、tomcat等),网络协议(http、socket等),浏览器(chrome、FF、IE等)。浏览器发起建立连接请求,通过网络协议与服务器建立连接,服务器保持连接,获取浏览器想要的数据,服务器通过连接返回内容给浏览器,浏览器把数据呈现出来。

2、连接的协议一般是http,也有websocket。服务器以服务的方式存在,就像外卖店,你打个电话过去,人家就把饭菜送上门来了。

3、web服务器访问数据库一样要使用网络连接,端口只是开放服务的入口而已,就像外卖的电话。

五、JavaWeb与web前端的区别?

1、web前端,主要是给网站做静态页面的,也就是说你平时浏览的网站所看到的页面基本都出自web前端,不过网站版面可以是美工出图。

web前端需要掌握的技术有:DIVCSS,j,jQuery更高一层的是可以去使用一些框架去网站页面。这样的框架也有很多。如Bootstrap,UIkit,Kube等等。

2、javaweb一般涉及到前端。而web前端开发只是有可能涉及到java。

前端开发一般只涉及到js,html,css,有些可能会用flash,photoshop这些。框架就jquery,ext,jodo等这些。

web前端的话他的后端可能是java,也可能是.net或者php等都可能,但javaweb可以确定后端就是java,web前端其实都一样。

前端和Javaweb的区别更多的在于一个主要负责前端的设计和效果,而Javaweb更专注于后端的内容。

3、刚开始从事web开发时,首先要选准学习方向,看是想从事前端部分还是后端程序部分。当然在工作的后期,就不会分的那么细致了。做前端到后期也会懂一些后端的技术,反之,后端也是。

六、学习Web前端开发都需要掌握哪些技能?

1、学习html。这个是最简单的,也是最基础的.要熟练掌握div、formtable、ulli、p、span、font这些标签,这些都是最常用的,特别是div和table,div用于布局、table也可以用于布局,但是不灵活,基本table是用来和数据打交道。

2、学习css。这里说的css不包括css3,一般我们看到web前端开发工程师的要求里面,有一个会使用csshtml或者cssdiv来进行界面布局,所以css是用于辅助html来布局和展示的,我们称之为“css样式”,为什么会说cssdiv呢?因为我上面说了div就是html主要用于布局的东西,所以div就是核心掌握的东西!那么css肯定必须要配合div来使用才好.css要熟练掌握float、position、width、height,以及对于的最大最小、会使用百分百、overflow、margin、padding等等,这些都是跟布局有关系的样式,一点要掌握。

3、学习js。可能前两个大家觉得还过的去,看到js就傻眼了,其实吧,js入门很简单的,不需要会很多东西的,只要会根据某个id、或者name拿到网页dom或者样式、或者值,然后会给某个id或者name的元素标签赋值、或者追加数据、追html,这个是跟数据有关系的操作,然后数据逻辑判断,效果方面的,无非就是跳转、弹框、隐藏什么的,把这些全部结合其他就是实际用途了,代码一点都不难,会了这些基础js,其他的直接网络就好了.然后看多了,用多了,就什么都不是问题了。

4、学习jquery。jquery是相当于把js封装了一套的一个js插件,目的就是操作起来更方便,代码写的更少,jquery入门也很简单,那些是入门需要学的和js一样,只是换成了jq的代码.其他的一样网络就够了。

5、最好会点后台语言,比如java、php,为什么呢?因为前台界面的数据都是从后台来的,如果会点后台代码,就知道怎么跟后台交互数据是最好的,这样节约时间,也可以让前端代码更规范.不然可能因为你的写法和后端给来的数据不能结合上,那么前端代码又得重新写,那就更加麻烦了。

6、学习css3html5,可能这个对于更接手的新人来说有点困难,需要较强的代码知识与经验,但是如果你们是准备专门搞前端,那么最好还是学一下,这样对于将来的工作会有更大的帮助。

七、从事Java后端开发都需要掌握哪些技能?

对于初学Java并且有志于后端开发的同学来说,需要重点关注以下几个部分:

1、基础:比如计算机系统、算法、编译原理等等

2、Web开发:主要是Web开发相关的内容,包括HTML/CSS/js(前端页面)、Servlet/JSP(J2EE)以及MySQL(数据库)相关的知识。它们的学习顺序应该是从前到后,因此最先学习的应该是HTML/CSS/JS(前端页面)。还有一些前段框架比如easyui,还有js,jquery等技术。

3、J2EE:你需要学习的是Servlet/JSP(J2EE)部分,这部分是Java后端开发必须非常精通的部分,因此这部分是这三部分中最需要花精力的。关于Servlet/Jsp部分视频的选择,业界比较认可马士兵的视频。4、数据库:你需要学会使用数据库,mysql是个不错的入门选择,而且Java领域里主流的关系型数据库就是mysql。这部分一般在你学习Servlet/Jsp的时候,就会接触到的,其中的JDBC部分就是数据库相关的部分。你不仅要学会使用JDBC操作数据库,还要学会使用数据库客户端工具,比如navicat,sqlyog,二选一即可。

5、开发框架:目前比较主流的是SSM框架,即spring、springmvc、mybatis。你需要学会这三个框架的搭建,并用它们做出一个简单的增删改查的Web项目。你可以不理解那些配置都是什么含义,以及为什么要这么做,这些留着后面你去了解。但你一定要可以快速的利用它们三个搭建出一个Web框架,你在搭建SSM的过程中,可能会经常接触到一个叫maven的工具。这个工具也是你以后工作当中几乎是必须要使用的工具,所以你在搭建SSM的过程中,也可以顺便了解一下maven的知识。在你目前这个阶段,你只需要在网络上了解一下maven基本的使用方法即可,一些高端的用法随着你工作经验的增加,会逐渐接触到的。

6、你需要去看一些JDK中的类的源码,也包括你所使用的框架的源码。这些源码能看懂的前提是,你必须对设计模式非常了解。否则的话,你看源码的过程中,永远会有这样那样的疑问,这段代码为什么要这么写?为什么要定义这个接口,它看起来好像很多余?由此也可以看出,这些学习的过程是环环相扣的,如果你任何一个阶段拉下来了,那么你就真的跟不上了,或者说是一步慢步步慢。总而言之,这个阶段,你需要做的是深入了解Java底层和Java类库(比如并发那本书就是Java并发包java.concurrent的内容),也就是JVM和JDK的相关内容。而且还要更深入的去了解你所使用的框架,方式比较推荐看源码或者看官方文档。

希望对您有所帮助!~

3. web页面怎么使用velocity

Velocity是可以在html中使用的,也是网页前端人员都要要熟悉的一种模版引擎; Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于w...

4. 如何在web项目中引用velocity逡

Velocity是可以在html中使用的,也是网页前端人员都要要熟悉的一种模版引擎;
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。
Velocity使用,就是在这个模版内通过它现有语法和函数,然后在html中应用,一般我们结合具体的案例来使用Velocity,这里我举个简单的小例子:
<td colspan="3" class="tdContent2">$!obj.getDealInfo().replaceAll("\r\n", "<br></td>
Velocity就是通过这样来实现小的换行的。

5. 如何利用spring boot做一个简单的web应用

spring-boot适合开发web应用的静态资源访问在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。默认配置SpringBoot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:/static/public/resources/META-INF/resources举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件。启动程序后,尝试访问页面的时候,要如何实现呢?模板引擎在动态HTML实现上SpringBoot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站。SpringBoot提供了默认配置的模板引擎主要有以下几种:建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现SpringBoot的多种特性,具体可见后文:支持JSP的配置当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates。当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性中查询并修改。ThymeleafThymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于ApacheLicense2.0许可,由DanielFernández创建,该作者还是Java加密库Jasypt的作者。Thymeleaf提供了一个用于整合SpringMVC的可选模块,在应用开发中,你可以使用Thymeleaf来完全代替JSP或其他模板引擎,如Velocity、FreeMarker等。Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。

6. velocity是怎么用的

Velocity是一个基于java的模板引擎(template engine)。

官方网站:http://velocity.apache.org/

#formSingleSelectDictionary("accountingForm" "$!{info.accountingForm}" $!{dicData.dicAccountingForm} " class='combox' style='width:60' " "--请选择--")

#formSingleSelectDictionary : 调用这个 formSingleSelectDictionary 方法
传参数为 括号里面的

$!{info.accountingForm} : 取 info 这个对象的属性

稍微翻下文档就能开始用了。

加油。

7. Tomcat与JavaWeb开发技术详解的目录

第1篇 Java Web开发技术详解
依据SUN的Java Servlet规范和JSP规范,深入介绍了开发Java Web应用的各种技术。
第1章 Web运作原理探析 3
利用Java套接字(Socket)实现了一个简单的基于HTTP协议的客户程序和服务器程序。
1.1 Web的概念 3
1.2 HTML简介 4
1.3 URL简介 7
1.4 HTTP协议简介 7
1.4.1 HTTP请求格式 9
1.4.2 HTTP响应格式 11
1.4.3 正文部分的MIME类型 13
1.5 用Java套接字创建HTTP客户与服务器程序 14
1.5.1 演示异构系统之间用HTTP协议通信 17
1.5.2 演示对网页中的超级链接的处理过程 19
1.5.3 演示对网页中的图片的处理过程 20
1.6 Web发展历程 21
1.6.1 发布静态HTML文档 21
1.6.2 发布静态多媒体信息 22
1.6.3 提供浏览器端与用户的动态交互功能 22
1.6.4 提供服务器端与用户的动态交互功能 24
1.6.5 发布Web应用 29
1.6.6 发布Web服务 30
1.6.7 Web 2.0:全民共建的Web 32
1.7 处理HTTP请求参数及HTML表单 33
1.8 客户端向服务器端上传文件 36
1.9 小结 41
1.10 思考题 42
第2章 Tomcat简介 45
Tomcat除了能够充当运行Servlet的容器,还提供了作为Web服务器的一些实用功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。Tomcat已成为目前开发企业JavaWeb应用的最佳Servlet容器选择之一。
2.1 Tomcat概述 46
2.2 Tomcat作为Servlet容器的基本功能 47
2.3 Tomcat的组成结构 48
2.4 Tomcat的工作模式 50
2.5 Tomcat的版本 52
2.6 安装和配置Tomcat所需的资源 53
2.7 安装Tomcat 55
2.8 启动Tomcat并测试Tomcat的安装 57
2.9 Tomcat的运行脚本 58
2.10 小结 59
2.11 思考题 60
第3章 第一个JavaWeb应用 63
以一个简单的helloapp应用为例,让初学者迅速获得开发JavaWeb应用的实际经验。
3.1 JavaWeb应用简介 63
3.2 创建JavaWeb应用 64
3.2.1 JavaWeb应用的目录结构 64
3.2.2 创建HTML文件 65
3.2.3 创建Servlet类 66
3.2.4 创建JSP文件 67
3.2.5 创建web.xml文件 68
3.3 在Tomcat中发布JavaWeb应用 70
3.3.1 Tomcat的目录结构 70
3.3.2 按照默认方式发布JavaWeb应用 71
3.3.3 Web组件的URL 72
3.3.4 配置Tomcat的元素 75
3.3.5 配置Tomcat的虚拟主机 78
3.4 创建、配置和使用自定义JSP标签 80
3.5 用批处理文件或ANT编译范例 84
3.6 小结 85
3.7 思考题 86
第4章 Servlet技术(上) 89
要想精通Servlet编程,不仅要了解Servlet自身的用法,还要了解容器为它提供的十八般武器的用法。
4.1 Servlet API 90
4.1.1 Servlet接口 90
4.1.2 GenericServlet抽象类 91
4.1.3 HttpServlet抽象类 93
4.1.4 ServletRequest接口 96
4.1.5 HttpServletRequest接口 97
4.1.6 ServletResponse接口 100
4.1.7 HttpServletResponse接口 101
4.1.8 ServletConfig接口 104
4.1.9 ServletContext接口 105
4.2 JavaWeb应用的生命周期 108
4.2.1 启动阶段 108
4.2.2 运行时阶段 109
4.2.3 终止阶段 109
4.2.4 用Tomcat的管理平台管理Web应用的生命周期 109
4.3 Servlet的生命周期 111
4.3.1 初始化阶段 111
4.3.2 运行时阶段 112
4.3.3 销毁阶段 112
4.3.4 演示Servlet的生命周期的范例 113
4.4 ServletContext与Web应用范围 115
4.4.1 在Web应用范围内存放共享数据的范例 116
4.4.2 使用ServletContextListener监听器 119
4.5 Servlet的服务方法抛出异常 121
4.6 防止页面被客户端缓存 122
4.7 小结 123
4.8 思考题 124
第5章 Servlet技术(下) 129
进一步介绍Servlet的一些高级用法。
5.1 下载文件 129
5.2 上传文件 130
5.3 动态生成图像 136
5.4 读写Cookie 139
5.5 访问Web应用的工作目录 145
5.6 转发和包含 147
5.6.1 请求转发 148
5.6.2 包含 152
5.6.3 请求范围 154
5.7 重定向 155
5.8 访问Servlet容器内的其他Web应用 158
5.9 避免并发问题 160
5.9.1 合理决定在Servlet中定义的变量的作用域类型 162
5.9.2 使用Java同步机制对多线程同步 164
5.9.3 被废弃的SingleThreadModel接口 165
5.10 小结 166
5.11 思考题 169
第6章 JSP技术 171
包括JSP的运行机制和语法、JSP包含其他Web组件的方法、把请求转发给其他Web组件的方法,以及JSP的异常处理。
6.1 比较HTML、Servlet和JSP 171
6.1.1 静态HTML文件 171
6.1.2 用Servlet动态生成HTML页面 171
6.1.3 用JSP动态生成HTML页面 173
6.2 JSP语法 177
6.2.1 JSP指令(Directive) 178
6.2.2 JSP声明 180
6.2.3 Java程序片段(Scriptlet) 181
6.2.4 Java表达式 182
6.2.5 隐含对象 184
6.3 JSP的生命周期 185
6.4 请求转发 188
6.5 包含 190
6.5.1 静态包含 190
6.5.2 动态包含 192
6.5.3 混合使用静态包含和动态包含 194
6.6 JSP异常处理 200
6.7 再谈发布JSP 202
6.8 预编译JSP 203
6.9 PageContext抽象类 204
6.10 JSP技术的发展趋势 206
6.11 小结 207
6.12 思考题 207
第7章 bookstore应用简介 211
介绍bookstore应用的软件结构、各个JSP网页的功能,以及部分Web组件的实现。
7.1 bookstore应用的软件结构 211
7.1.1 Web服务器层 211
7.1.2 数据库层 212
7.2 浏览bookstore应用的JSP网页 212
7.3 JavaBean和实用类 217
7.3.1 实体类 218
7.3.2 购物车的实现 219
7.4 发布bookstore应用 222
7.5 小结 223
第8章 访问数据库 225
介绍通过JDBC API访问数据库、在Tomcat中配置数据源,以及在Web应用中通过数据源连接数据库的方法。
8.1 安装和配置MySQL数据库 225
8.2 JDBC简介 228
8.2.1 java.sql包中的接口和类 230
8.2.2 编写访问数据库程序的步骤 234
8.2.3 事务处理 236
8.3 通过JDBC API访问数据库的JSP范例程序 237
8.4 bookstore应用通过JDBC API访问数据库 239
8.5 数据源(DataSource)简介 243
8.6 配置数据源 244
8.6.1 在context.xml中加入元素 244
8.6.2 在web.xml中加入元素 245
8.7 程序中访问数据源 246
8.7.1 通过数据源连接数据库的JSP范例程序 246
8.7.2 bookstore应用通过数据源连接数据库 248
8.8 处理中文编码 251
8.9 分页显示批量数据 252
8.10 小结 256
8.11 思考题 257
第9章 HTTP会话的使用与管理 259
介绍如何通过会话来实现服务器对客户的状态的跟踪。
9.1 会话简介 259
9.2 HttpSession的生命周期及会话范围 263
9.3 使用会话的JSP范例程序 265
9.4 使用会话的Servlet范例程序 269
9.5 通过重写URL来跟踪会话 273
9.6 会话的持久化 277
9.6.1 标准会话管理器StandardManager 279
9.6.2 持久化会话管理器PersistentManager 280
9.7 会话的监听 284
9.7.1 用HttpSessionListener统计在线用户人数 289
9.7.2 用HttpSessionBindingListener统计在线用户人数 291
9.8 小结 294
9.9 思考题 295
第10章 JSP访问JavaBean 299
介绍JavaBean的概念和创建方法, JSP访问JavaBean的语法,JavaBean在Web应用中的4种存在范围,如何在bookstore应用中运用JavaBean。
10.1 JavaBean简介 299
10.2 JSP访问JavaBean的语法 300
10.3 JavaBean的范围 302
10.3.1 JavaBean在页面(page)范围内 302
10.3.2 JavaBean在请求(request)范围内 305
10.3.3 JavaBean在会话(session)范围内 306
10.3.4 JavaBean在Web应用(application)范围内 307
10.4 在bookstore应用中访问JavaBean 308
10.4.1 访问BookDB类 308
10.4.2 访问ShoppingCart类 309
10.5 小结 313
10.6 思考题 314
第11章 开发JavaMail Web应用 317
介绍了一个JavaMail Web应用,通过它,客户可以访问邮件服务器上的邮件账号、收发邮件和管理邮件夹。
11.1 E-mail协议简介 317
11.1.1 SMTP简单邮件传输协议 317
11.1.2 POP3邮局协议 318
11.1.3 接收邮件的新协议IMAP 318
11.2 JavaMail API简介 319
11.3 建立JavaMail应用程序的开发环境 321
11.3.1 获得JavaMail API的类库 321
11.3.2 安装和配置邮件服务器 321
11.4 创建JavaMail应用程序 324
11.5 JavaMail Web应用简介 328
11.6 JavaMail Web应用的程序结构 328
11.6.1 重新封装Message数据 329
11.6.2 用于保存邮件账号信息的JavaBean 332
11.6.3 定义所有JSP文件的相同内容 334
11.6.4 登录IMAP服务器上的邮件账号 336
11.6.5 管理邮件夹 339
11.6.6 查看邮件夹中的邮件信息 342
11.6.7 查看邮件内容 345
11.6.8 创建和发送邮件 346
11.6.9 退出邮件系统 348
11.7 在Tomcat中配置邮件会话(Mail Session) 349
11.7.1 在context.xml中配置Mail Session资源 349
11.7.2 在web.xml中加入对JNDI Mail Session资源的引用 350
11.7.3 在javamail应用中获取JNDI Mail Session资源 350
11.8 发布和运行javamail应用 352
11.9 小结 352
11.10 思考题 353
第12章 EL表达式语言 355
EL(Expression Language)表达式语言是在JSP 2.0版本中引入的新特性,它用于JSP文件中的数据访问。
12.1 基本语法 355
12.1.1 访问对象的属性及数组的元素 356
12.1.2 EL运算符 356
12.1.3 隐含对象 357
12.1.4 命名变量 359
12.2 使用EL表达式的JSP范例 360
12.2.1 关于基本语法的例子 360
12.2.2 读取HTML表单数据的例子 362
12.2.3 访问命名变量的例子 363
12.3 定义和使用EL函数 363
12.4 小结 366
12.5 思考题 367
第13章 自定义JSP标签 369
结合具体的范例,进一步介绍自定义标签的创建过程,以及它在JSP文件中的使用方法。
13.1 自定义JSP标签简介 369
13.2 JSP Tag API 370
13.2.1 JspTag接口 370
13.2.2 Tag接口 371
13.2.3 IterationTag接口 373
13.2.4 BodyTag接口 374
13.2.5 TagSupport类和BodyTagSupport类 376
13.3 创建和使用message标签(访问标签属性) 380
13.3.1 创建message标签的处理类MessageTag 382
13.3.2 创建标签库描述文件 385
13.3.3 在Web应用中使用标签 388
13.3.4 发布支持中、英文版本的helloapp应用 390
13.4 创建和使用iterate标签(重复执行标签主体) 391
13.5 创建和使用greet标签(访问标签主体内容) 395
13.6 小结 399
13.7 思考题 400
第14章 采用模板设计网上书店应用 403
以bookstore应用为例,介绍如何通过自定义JSP标签来为网站设计模板,从而使所有在客户端展示的网页都通过模板来生成。
14.1 如何设计网站的模板 403
14.2 创建负责流程控制的Servlet 404
14.3 创建模板标签和模板JSP文件 406
14.3.1 标签和其处理类 408
14.3.2 标签和处理类 411
14.3.3 标签和处理类 413
14.3.4 标签和处理类 417
14.4 修改JSP文件 419
14.5 发布采用模板设计的bookstore应用 420
14.6 小结 423
第15章 JSTL Core标签库 425
本章对JSTL做了概要介绍,并且着重介绍了JSTL中的Core标签库的用法。
15.1 使用第三方提供的标签库的步骤 425
15.2 JSTL标签库简介 426
15.3 一般用途的标签 427
15.3.1 标签 427
15.3.2 标签 428
15.3.3 标签 430
15.3.4 标签 430
15.4 条件标签 431
15.4.1 标签 431
15.4.2 、和标签 432
15.5 迭代标签 433
15.5.1 标签 433
15.5.2 标签 437
15.6 URL相关的标签 437
15.6.1 标签 437
15.6.2 标签 438
15.6.3 标签 440
15.7 小结 440
15.8 思考题 441
第16章 JSTL I18N标签库 443
I18N标签库主要用于编写国际化的Web应用,本章对I18N标签库进行了详细介绍。
16.1 国际化的概念 443
16.2 Java对I18N的支持 444
16.2.1 Locale类 444
16.2.2 ResourceBundle类 448
16.2.3 MessageFormat类和复合消息 449
16.3 国际化标签 452
16.3.1 标签 452
16.3.2 标签 453
16.3.3 标签 453
16.3.4 标签 454
16.3.5 标签 455
16.3.6 标签 455
16.4 创建国际化的Web应用 456
16.4.1 创建支持国际化的网页 456
16.4.2 创建资源文件 459
16.5 格式化标签 460
16.5.1 标签 460
16.5.2 标签 461
16.5.3 标签 461
16.5.4 标签 462
16.5.5 标签 463
16.5.6 标签 465
16.6 小结 465
16.7 思考题 466
第17章 JSTL SQL标签库 469
在JSP中直接通过Java程序代码来访问数据库,会降低JSP页面的可读性和可维护性,为了解决这一问题,可以在JSP中通过JSTL SQL标签库中的标签来访问数据库。
17.1 标签 469
17.2 标签 470
17.2.1 设置数据源 470
17.2.2 设置select查询语句 470
17.2.3 控制实际取出的记录 471
17.2.4 访问查询结果 471
17.2.5 使用标签的范例 472
17.3 标签 474
17.4 标签 475
17.5 标签 475
17.6 标签 476
17.7 小结 478
17.8 思考题 478
第18章 JSTL Functions标签库 481
介绍Functions标签库中常用的16个函数的用法。
18.1 fn:contains函数 481
18.2 fn:containsIgnoreCase函数 481
18.3 fn:startsWith函数 482
18.4 fn:endsWith函数 482
18.5 fn:indexOf函数 482
18.6 fn:replace函数 483
18.7 fn:substring函数 483
18.8 fn:substringBefore函数 483
18.9 fn:substringAfter函数 484
18.10 fn:split函数 484
18.11 fn:join函数 485
18.12 fn:toLowerCase函数 485
18.13 fn:toUpperCase函数 485
18.14 fn:trim函数 486
18.15 fn:escapeXml函数 486
18.16 fn:length函数 487
18.17 小结 488
18.18 思考题 489
第19章 简单标签和标签文件 491
为了简化开发标签的过程,JSP 2.0引入了一种新的标签扩展机制,称为“简单标签扩展”。
19.1 实现SimpleTag接口 491
19.1.1 创建和使用简单标签 493
19.1.2 创建和使用带属性和标签主体的简单标签 494
19.1.3 创建和使用带动态属性的简单标签 495
19.2 使用标签文件 497
19.2.1 标签文件的隐含对象 500
19.2.2 标签文件的指令 501
19.2.3 标签文件的和动作元素 503
19.2.4 创建和使用带属性和标签主体的display标签文件 503
19.2.5 创建和使用带属性和标签主体的welcome标签文件 505
19.2.6 创建和使用带变量的precode标签文件 506
19.3 小结 507
19.4 思考题 507
第20章 过滤器 509
如果在多个Web组件中编写完成同样操作的程序代码,显然会导致重复编码,从而降低开发效率和软件的可维护性,为了解决上述问题,过滤器应运而生。
20.1 过滤器简介 509
20.2 创建过滤器 510
20.3 发布过滤器 513
20.4 串联过滤器 518
20.4.1 包装设计模式简介 519
20.4.2 ServletOutputStream的包装类 521
20.4.3 HttpServletResponse的包装类 524
20.4.4 创建对响应结果进行字符串替换的过滤器 525
20.4.5 ReplaceTextFilter过滤器工作的UML时序图 527
20.4.6 发布和运行包含ReplaceTextFilter过滤器的Web应用 528
20.5 小结 531
20.6 思考题 532
第21章 在Web应用中访问EJB组件 535
首先介绍JavaEE的体系结构;然后以bookstore应用为例,介绍开发EJB组件的过程;最后讲解如何在JBoss服务器上发布JavaEE应用。
21.1 JavaEE体系结构简介 535
21.2 安装和配置JBoss服务器 537
21.3 创建EJB组件 538
21.3.1 编写Remote接口 539
21.3.2 编写Home接口 539
21.3.3 编写Enterprise Java Bean
类 540
21.4 在Web应用中访问EJB组件 543
21.5 发布JavaEE应用 544
21.5.1 在JBoss上发布EJB组件 545
21.5.2 在JBoss上发布Web应用 547
21.5.3 在JBoss上发布JavaEE应用 549
21.6 小结 550
21.7 思考题 551
第22章 在Web应用中访问Web服务 553
介绍利用AXIS来创建SOAP服务和SOAP客户程序的方法,还介绍了在bookstore应用中访问SOAP服务的方法。
22.1 SOAP简介 553
22.2 建立Apache AXIS环境 555
22.3 在Tomcat上发布
Apache-AXIS Web应用 556
22.4 创建SOAP服务 557
22.4.1 创建提供SOAP服务的Java类 557
22.4.2 创建SOAP服务的发布描述符文件 557
22.5 管理SOAP服务 558
22.5.1 发布SOAP服务 558
22.5.2 删除SOAP服务 559
22.6 创建和运行SOAP客户程序 560
22.7 发布JWS服务 563
22.8 在bookstore应用中访问SOAP服务 563
22.8.1 创建BookDB服务类及
BookDBDelegate代理类 564
22.8.2 发布bookdbservice服务和bookstore应用 573
22.9 小结 574
22.10 思考题 575
第23章 Web应用的MVC设计模式 577
首先介绍了MVC设计模式的结构和优点;接着介绍了SUN公司提出的在Java Web开发领域的两种设计模式:JSP Model1和JSP Molde2;然后介绍了Struts实现MVC的机制;最后以helloapp应用为例,简要介绍了在Web应用中使用Struts 2.0的方法。
23.1 MVC设计模式简介 577
23.2 JSP Model 1和
JSP Model 2 579
23.3 Struts概述 581
23.3.1 Struts实现MVC的机制 581
23.3.2 Struts的工作流程 582
23.4 创建采用Struts的Web应用 583
23.4.1 建立Struts的环境 583
23.4.2 创建视图 584
23.4.3 创建模型 585
23.4.4 创建Action类 585
23.4.5 创建web.xml文件和struts.xml文件 586
23.5 运行helloapp应用 587
23.5.1 服务器端装载login.htm的流程 587
23.5.2 用户验证的流程 587
23.6 小结 589
23.7 思考题 589
第2篇 Tomcat配置及第三方实用软件的用法
介绍Tomcat服务器的基本配置和高级配置,从而为Java Web应用创建高效的运行环境;介绍在Java Web应用中运用第三方提供的实用软件(如Velocity和Log4J)的方法。
第24章 Tomcat的控制平台和管理平台 593
Tomcat提供了基于Web方式的管理平台和控制平台,用户通过浏览器,就可以很方便地配置Tomcat服务器,还可以管理运行在Tomcat服务器上的Web应用,如发布、启动、停止或删除Web应用,以及查看Web应用状态。
24.1 访问Tomcat的控制平台和管理平台 593
24.2 Tomcat的控制平台 595
24.2.1 Tomcat控制平台的功能 595
24.2.2 配置元素 597
24.3 Tomcat的管理平台 598
24.4 小结 600
第25章 安全域 601
主要介绍如何通过Tomcat提供的安全域来保护Web应用的资源。
25.1 安全域概述 601
25.2 为Web资源设置安全约束 602
25.2.1 在web.xml中加入元素 603
25.2.2 在web.xml中加入元素 605
25.2.3 在web.xml中加入元素 608
25.3 内存域 608
25.4 JDBC域 610
25.4.1 用户数据库的结构 610
25.4.2 在MySQL中创建和配置用户数据库 611
25.4.3 配置元素 611
25.5 DataSource域 612
25.6 在Web应用中访问用户信息 614
25.7 小结 614
25.8 思考题 615
第26章 Tomcat与其他HTTP 服务器集成 617
首先讨论Tomcat与HTTP服务器集成的一般原理,然后介绍Tomcat与Apache服务器及IIS集成的详细步骤,最后介绍把由多个Tomcat服务器构成的集群系统与Apache服务器集成的方法。
26.1 Tomcat与HTTP服务器集成的原理 617
26.1.1 JK插件 618
26.1.2 AJP协议 618
26.2 在Windows下Tomcat与
Apache服务器集成 618
26.3 在Linux下Tomcat与Apache
服务器集成 621
26.4 Tomcat与IIS服务器集成 623
26.4.1 准备相关文件 624
26.4.2 编辑注册表 624
26.4.3 在IIS中加入“jakarta”虚拟目录 626
26.4.4 把JK插件作为ISAPI筛选器加入到IIS中 627
26.4.5 测试配置 628
26.5 Tomcat集群 628
26.5.1 配置集群系统的负载平衡器 629
26.5.2 配置集群管理器 631
26.6 小结 635
26.7 思考题 636
第27章 在Tomcat中配置SSI 637
首先介绍了SSI的概念及SSI指令的用法,然后介绍了在Tomcat中配置SSI的方法。
27.1 SSI简介 637
27.1.1 #echo指令 638
27.1.2 #include指令 640
27.1.3 #flastmod指令 641
27.1.4 #fsize指令 641
27.1.5 #exec指令 641
27.1.6 #config指令 641
27.1.7 #if、#elif、#else和#endif指令 643
27.2 在Tomcat中配置对SSI的支持 643
27.3 小结 645
27.4 思考题 645
第28章 Tomcat阀 647
介绍Tomcat阀的种类,还将详细介绍各种Tomcat阀的功能和使用方法。
28.1 Tomcat阀简介 647
28.2 客户访问日志阀 648
28.3 远程地址过滤器 650
28.4 远程主机过滤器 651
28.5 客户请求记录器 652
28.6 小结 653
28.7 思考题 653
第29章 在Tomcat中配置SSL 655
SSL(Server Socket Layer)协议,旨在达到在开放网络(Internet)上安全、保密地传输信息的目的,这种协议在Web上获得了广泛的应用。
29.1 SSL简介 655
29.1.1 加密通信 656
29.1.2 安全证书 656
29.1.3 SSL握手 657
29.2 在Tomcat中使用SSL 658
29.2.1 准备安全证书 658
29.2.2 配置SSL连接器 659
29.2.3 访问支持SSL的Web站点 660
29.3 小结 661
29.4 思考题 662
第30章 用ANT工具管理Web应用 663
介绍了ANT的安装和配置,并以bookstore应用为例,介绍了ANT的使用方法。
30.1 安装配置ANT 663
30.2 创建build.xml文件 663
30.3 运行ANT 668
30.4 小结 669
30.5 思考题 669
第31章 使用Log4J进行日志操作 671
首先介绍Log4J的组成,接着介绍如何在程序中使用Log4J,最后介绍如何在Web应用中通过Log4J生成日志。
31.1 Log4J简介 671
31.1.1 Logger组件 672
31.1.2 Appender组件 673
31.1.3 Layout组件 673
31.1.4 Logger组件的继承性 674
31.2 Log4J的基本使用方法 675
31.2.1 定义配置文件 675
31.2.2 在程序中使用Log4J 677
31.3 在helloapp应用中使用Log4J 680
31.3.1 创建用于配置Log4J环境的Servlet 680
31.3.2 在login.jsp中输出日志 681
31.3.3 发布和运行使用Log4J的helloapp应用 681
31.4 小结 683
31.5 思考题 683
第32章 Velocity模板语言 685
首先通过一个简单的Velocity例子来讲解创建基于Velocity的Web应用的步骤,然后详细介绍Velocity模板语言的各个要素。
32.1 安装Velocity 685
32.2 Velocity的简单例子 685
32.2.1 创建Velocity模板 685
32.2.2 创建扩展VelocityServlet的Servlet类 686
32.2.3 发布和运行基于Velocity的Web应用 688
32.3 注释 689
32.4 引用 689
32.4.1 变量引用 689
32.4.2 属性引用 690
32.4.3 方法引用 692
32.4.4 正式引用符 693
32.4.5 安静引用符 693
32.4.6 转义符 694
32.4.7 大小写替换 694
32.5 指令 695
32.5.1 #set指令 695
32.5.2 字面字符串 696
32.5.3 #if指令 697
32.5.4 比较运算 697
32.5.5 #foreach循环指令 698
32.5.6 #include指令 700
32.5.7 #parse指令 700
32.5.8 #macro指令 701
32.5.9 转义VTL指令 702
32.5.10 VTL的格式 702
32.6 其他特征 703
32.6.1 数学运算 703
32.6.2 范围操作符 703
32.6.3 字符串的连接 704
32.7 小结 705
32.8 思考题 705
第33章 创建嵌入式Tomcat服务器 707
介绍如何把Tomcat嵌入到Java应用程序中,以及在程序中配置Tomcat的组件,并控制Tomcat服务器的启动和关闭。
33.1 将Tomcat嵌入到Java应用中 707
33.2 创建嵌入了Tomcat的
Java示范程序 708
33.3 运行嵌入式Tomcat
服务器 711
33.4 小结 713
附录A server.xml文件 715
对server.xml文件的一些常用的元素进行了介绍。
A.1 配置Server元素 716
A.2 配置Service元素 717
A.3 配置Engine元素 717
A.4 配置Host元素 718
A.5 配置Context元素 718
A.6 配置Connector元素 719
附录B web.xml文件 721
介绍了Web应用的配置文件web.xml文件。
B.1 配置过滤器 723
B.2 配置Servlet 724
B.3 配置Servlet映射 725
B.4 配置Session 725
B.5 配置Welcome文件清单 725
B.6 配置Tag Library 726
B.7 配置资源引用 726
B.8 配置安全约束 727
B.9 配置安全验证登录界面 727
B.10 配置对安全验证角色的引用 728
附录C XML简介 729
XML,即可扩展标记语言(Extensible Markup Language),是一种可以用来创建自定义标记的标记语言。
C.1 SGML、HTML 与XML的比较 729
C.2 DTD文档类型定义 730
C.3 有效XML文档以及简化格式的XML文档 731
C.4 XML中的常用术语 732
C.4.1 URL、URN和URI 733
C.4.2 XML命名空间 733
附录D 书中涉及软件获取途径 735
为了便于读者在本地机器上搭建运行范例的环境,列出了书中涉及的软件的获取途径。
……