目录
- 系统体系结构
- J2EE
- Servlet
- JSP
- JSP VS Servlet
- XML
系统体系结构
两层体系结构
缺点:
l client/server结构通常在第一次部署的时候比较容易,但难于升级或改进。
l 经常基于某种专有的协议―通常是某种数据库协议。
l 它使得重用业务逻辑和界面逻辑非常困难。
l 更重要的是,在Web时代,二层化应用通常不能体现出很好的伸缩性,因而很难适应Internet的要求。
N层体系结构
客户端/WEB服务层/应用服务层/数据库服务层
优点:
l 应用程序各部分之间松耦合,从而应用程序各部分的更新相互独立
l 业务逻辑集中放在服务器上由所有用户共享,使得系统的维护和更新变得简单,也更安全。降低了部署与维护的开销,提高了灵活性、可伸缩性。
l 引入瘦客户端,计算被集中至服务器端,使性能提高成为可能。数据库不再和每一个活动的用户保持一个连接,而是由应用程序组件负责与数据库打交道,降低数据库服务器的负担,提高了性能。
J2EE
J2EE架构
J2EE提供了一套完整的解决所有这些问题的框架方案:
l 提供了分布式、可移植构件的框架
l 为构件与应用服务器提供标准API
l 简化了服务器端中间层构件的设计
开放的、基于标准的平台,用以开发、部署和管理N层结构、面向Web的,以服务器为中心的企业级应用
J2EE的13种核心技术
EJB、 CORBA、 RMI、JSP、
Java Servlet、JavaBean、JDBC
XML、JMS……
Servlet
l Servlets(=Server +Applet):是一些运行于Web服务器端的Java小程序,用来扩展Web服务器的功能。
l Servlet是一种扩展Web服务器功能的技术,而且由于它是用Java编写的,所以能够访问整个Java API库,包括用于访问企业数据库的JDBC API。
l Servlets用特定的Java解决方案替代了其它的Web服务器方编程模式(如:CGI,ISAPI等),因而继承了Java的所有特性(跨平台、多线程、OO)。
l 用来编写Servlets的Servlet API对于服务器环境和协议没有任何特殊的要求,所以Servlets具有很强的可移植性,也不像利用CGI程序等其它方式那样具有性能局限。
l Servlets也同样使用HTTP协议与客户端进行通讯,所以有时也称Sevlets为“HTTP Servlets”。
与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资
l 高效
在传统的CGI中,每个请求都要启动一个新的进程,如果CGI程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在Servlet中,每个请求由一个轻量级的Java线程处理(而不是重量级的操作系统进程)。
在传统CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复装载了N次;而对于Servlet,处理请求的是N个线程,只需要一份Servlet类代码。在性能优化方面,Servlet也比CGI有着更多的选择,比如缓冲以前的计算结果,保持数据库连接的活动,等等。
l 方便
Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。
l 功能强大
在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。例如,Servlet能够直接和Web服务器交互,而普通的CGI程序不能。Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。
l 可移植性好
Servlet用Java编写,Servlet API具有完善的标准。因此,为I-Planet Enterprise Server写的Servlet无需任何实质上的改动即可移植到Apache、Microsoft IIS或者WebStar。几乎所有的主流服务器都直接或通过插件支持Servlet。
l 节省投资
不仅有许多廉价甚至免费的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。
|
当一个servlet接收来自客户端的调用请求,它接收两个对象: 一个是ServletRequest,另外一个是ServletResponse。 这个ServletRequest class 概括从客户端到服务器之间的联系, 而 ServletResponse class 概括从servlet 返回客户端的联系。
ServletRequest interface 可以获取到这样一些信息如由客户端传送的阐述名称,客户端正在使用的协议, 产生请求并且接收请求的服务器远端主机名。它也提供获取数据流的servlet, ServletInputStream,这些数据是客户端引用中使用HTTP POST 和 PUT 方法递交的。 一个ServletRequest的子类可以让 servlet获取更多的协议特性数据。 例如: HttpServletRequest 包含获取 HTTP-specific头部信息的方法。更重要的是,我们能从HttpServletRequest中获取用户提交的表单数据。
ServletResponse interface 给出相应客户端的servlet方法。 它允许servlet 设置内容长度和回应的mime类型, 并且提供输出流,ServletOutputStream, 通过编写者可以发回相应数据。 ServletResponse子类可以给出更多 protocol-specific容量的信息。 例如: HttpServletResponse 包含允许servlet 操作HTTP-specific头部信息的方法。
HttpServletRequest
封装了客户端请求的细节
1) 继承自ServletRequest的方法:
l Object getAttribute(String name) 返回具有指定名字的请求属性,如果不存在则返回null。属性可由servlet引擎设置或使用setAttribute()显式加入。
l Enumeration getAttributeName() 返回请求中所有属性名的枚举。如果不存在属性,则返回一个空的枚举。
l String getCharacteEncoding() 返回请求所用的字符编码。
l Int getContentLength() 指定输入流的长度,如果未知则返回-1。
l ServletInputStream getInputStream()throws IOException 返回与请求相关的(二进制)输入流。可以调用getInputStream()或getReader()方法之一。
l String getParameter(String name) 返回指定输入参数,如果不存在,返回null。
l Enumeration getParameterName() 返回请求中所有参数名的一个可能为空的枚举。
l String[] getParameterValues(String name) 返回指定输入参数名的取值数组,如果取值不存在则返回null。它在参数具有多个取值的情况下十分有用。
l String get Protocol() 返回请求使用协议的名称和版本。
l String getScheme() 返回请求URI的子串,但不包含第一个冒号前的内容。
l String getServerName() 返回处理请求的服务器的主机名。
l String getServerPort() 返回接收主机正在侦听的端口号。
l BufferedReader getReader()throws IOException 返回与请求相关输入数据的一个字符解读器。此方法与getInputStream()只可分别调用,不能同时使用。
l String getRemoteAddr() 返回客户端主机的数字型IP地址。
l String getRemoteHost() 如果知道,返回客户端主机名。
l void setAttribute(String name,Object obj) 以指定名称保存请求中指定对象的引用。
l void removeAttribute(String name) 从请求中删除指定属性
l Locale getLocale() 如果已知,返回客户端的第一现场或者为null。
l Enumeration getLocales() 如果已知,返回客户端的第一现场的一个枚举,否则返回服务器第一现场。
l boolean isSecure() 如果请求使用了如HTTPS安全隧道,返回true
l RequestDispatcher getRequestDispatcher(String name) 返回指定源名称的RequsetDispatcher对象。
2) HttpServletRequest自身的方法:
l String getAuthType() 如果servlet由一个鉴定方案所保护,如HTTP基本鉴定,则返回方案名称。
l String getContextPath() 返回指定servlet上下文(web应用)的URL的前缀。
l Cookie[] getCookies() 返回与请求相关cookie的一个数组。
l Long getDateHeader(String name) 将输出转换成适合构建Date对象的long类型取值的getHeader()的简化版。
l String getHeader(String name) 返回指定的HTTP头标指。如果其由请求给出,则名字应为大小写不敏感。
l Enumeration getHeaderNames() 返回请求给出的所有HTTP头标名称的权举值。
l Enumeration getHeaders(String name) 返回请求给出的指定类型的所有HTTP头标的名称的枚举值,它对具有多取值的头标非常有用。
l int getIntHeader(String name) 将输出转换为int取值的getHeader()的简化版。
l String getMethod() 返回HTTP请求方法(例如GET、POST等等)
l String getPathInfo() 返回在URL中指定的任意附加路径信息。
l String getPathTranslated() 返回在URL中指定的任意附加路径信息,被子转换成一个实际路径。
l String getQueryString() 返回查询字符串,即URL中?后面的部份。
l String getRemoteUser() 如果用户通过鉴定,返回远程用户名,否则为null。
l String getRequestedSessionId() 返回客户端的会话ID
l String getRequestURI() 返回URL中一部分,从“/”开始,包括上下文,但不包括任意查询字符串。
l String getServletPath() 返回请求URI上下文后的子串
l HttpSession getSession() 调用getSession(true)的简化版。
l HttpSession getSession(boolean create) 返回当前HTTP会话,如果不存在,则创建一个新的会话,create参数为true。
l Principal getPrincipal() 如果用户通过鉴定,返回代表当前用户的java.security.Principal对象,否则为null。
l boolean isRequestedSessionIdFromCookie() 如果请求的会话ID由一个Cookie对象提供,则返回true,否则为false。
l boolean isRequestedSessionIdFromURL() 如果请求的会话ID在请求URL中解码,返回true,否则为false
l boolean isRequestedSessionIdValid() 如果客户端返回的会话ID仍然有效,则返回true。
l Boolean isUserInRole(String role) 如果当前已通过鉴定用户与指定角色相关,则返回true,如果不是或用户未通过鉴定,则返回false。
HttpServletResponse
将一个servlet生成的结果传到发出请求的客户端
1) 继承自ServletResponse的方法:
l void flushBuffer()throws IOException 发送缓存到客户端的输出内容。因为HTTP需要头标在内容前被发送,调用此方法发送状态行和响应头标,以确认请求。
l int getBufferSize() 返回响应使用的缓存大小。如果缓存无效则返加0。
l String getCharacterEncoding() 返回响应使用字符解码的名字。除非显式设置,否则为ISO-8859-1
l Locale getLocale() 返回响应使用的现场。除非用setLocale()修改,否则缺省为服务器现场。
l OutputStream getOutputStream()throws IOException 返回用于将返回的二进制输出写入客户端的流,此方法和getWrite()方法二者只能调用其一。
l Writer getWriter()throws IOException 返回用于将返回的文本输出写入客户端的一个字符写入器,此方法和getOutputStream()二者只能调用其一。
l boolean isCommitted() 如果状态和响应头标已经被发回客户端,则返回true,在响应被确认后发送响应头标毫无作用。
l void reset() 清除输出缓存及任何响应头标。如果响应已得到确认,则引发事件IllegalStateException。
l void setBufferSize(int nBytes) 设置响应的最小缓存大小。实际缓存大小可以更大,可以通过调用getBufferSize()得到。如果输出已被写入,则产生IllegalStateException。
l void setContentLength(int length) 设置内容体的长度。
l void setContentType(String type) 设置内容类型。在HTTP servlet中即设置Content-Type头标。
l void setLocale(Locale locale) 设置响应使用的现场。在HTTP servlet中,将对Content-Type头标取值产生影响。
2) HttpServletResponse自身的方法:
l void addCookie(Cookie cookie) 将一个Set-Cookie头标加入到响应。
l void addDateHeader(String name,long date) 使用指定日期值加入带有指定名字(或代换所有此名字头标)的响应头标的方法。
l void setHeader(String name,String value) 设置具有指定名字和取值的一个响应头标。
l void addIntHeader(String name,int value) 使用指定整型值加入带有指定名字的响应头标(或代换此名字的所有头标)。
l boolean containsHeader(String name) 如果响应已包含此名字的头标,则返回true。
l String encodeRedirectURL(String url) 如果客户端不知道接受cookid,则向URL加入会话ID。第一种形式只对在sendRedirect()中使用的URL进行调用。其他被编码的URLs应被传递到encodeURL()
l String encodeURL(String url)
l void sendError(int status) 设置响应状态码为指定值(可选的状态信息)。HttpServleetResponse定义了一个完整的整数常量集合表示有效状态值。
l void sendError(int status,String msg)
l void setStatus(int status) 设置响应状态码为指定指。只应用于不产生错误的响应,而错误响应使用sendError()。
HttpSession
HttpSession类似于哈希表的接口,它提供了setAttribute()和getAttribute()方法存储和检索对象。HttpSession提供了一个会话ID关键字,一个参与会话行为的客户端在同一会话的请求中存储和返回它。servlet引擎查找适当的会话对象,并使之对当前请求可用。
HttpSession接口中的方法
l Object getAttribute(String name) 将会话中一个对象保存为指定名字,返回或删除前面保存的此名称对象。
l void setAttribute(String name,Object value)
l void removeAttribute(String name)
l Enumeration getAttributeName() 返回捆绑到当前会话的所有属性名的枚举值。
l long getCreationTime() 返回表示会话创建和最后访问日期和时间的一个长整型,该整型形式为java.util.Date()构造器中使用的形式。
l long getLastAccessedTime()
l String getId() 返回会话ID,servlet引擎设置的一个唯一关键字。
l ing getMaxInactiveInterval() 如果没有与客户端发生交互,设置和返回会话存活的最大秒数。
l void setMasInactiveInterval(int seconds)
l void invalidate() 使得会话被终止,释放其中任意对象。
l boolean isNew() 如果客户端仍未加入到会话,返回true。当会话首次被创建,会话ID被传入客户端,但客户端仍未进行包含此会话ID的第二次请示时,返回true。
ServletConfig
通过servlet还可以获得ServletConfig对象,一个ServletConfig对象是servlet container在servlet initialization的时候传递给servlet的。其中包含ServletContext 和 一些 来自于配置描述的 名称/值 对。ServletContext接口封装了Web应用程序的上下文概念。
l Object getAttribute(String name) 返回servlet上下文中具有指定名字的对象,或使用已指定名捆绑一个对象。从Web应用的标准观点看,这样的对象是全局对象,因为它们可以被同一servlet在另一时刻访问。或上下文中任意其他servlet访问。
l void setAttribute(String name,Object obj) 设置servlet上下文中具有指定名字的对象。
l Enumeration getAttributeNames() 返回保存在servlet上下文中所有属性名字的枚举。
l ServletContext getContext(String uripath) 返回映射到另一URL的servlet上下文。在同一服务器中URL必须是以“/”开头的绝对路径。
l String getInitParameter(String name) 返回指定上下文范围的初始化参数值。此方法与ServletConfig方法名称不一样,后者只应用于已编码的指定servlet。此方法应用于上下文中所有的参数。
l Enumeration getInitParameterNames() 返回(可能为空)指定上下文范围的初始化参数值名字的枚举值。
l int getMajorVersion() 返回此上下文中支持servlet API级别的最大和最小版本号。
l int getMinorVersion()
l String getMimeType(String fileName) 返回指定文件名的MIME类型。典型情况是基于文件扩展名,而不是文件本身的内容(它可以不必存在)。如果MIME类型未知,可以返回null。
l RequestDispatcher getNameDispatcher(String name) 返回具有指定名字或路径的servlet或JSP的RequestDispatcher。如果不能创建RequestDispatch,返回null。如果指定路径,必须心“/”开头,并且是相对于servlet上下文的顶部。
l RequestDispatcher getNameDispatcher(String path)
l String getRealPath(String path) 给定一个URI,返回文件系统中URI对应的绝对路径。如果不能进行映射,返回null。
l URL getResource(String path) 返回相对于servlet上下文或读取URL的输入流的指定绝对路径相对应的URL,如果资源不存在则返回null。
l InputStream getResourceAsStream(String path)
l String getServerInfo() 返顺servlet引擎的名称和版本号。
l void log(String message)
l void log(String message,Throwable t) 将一个消息写入servlet注册,如果给出Throwable参数,则包含栈轨迹。
l void removeAttribute(String name) 从servlet上下文中删除指定属性。
示例
JSP
JSP的基础知识
__
_____ | directive (指令)
| |-- scripting (脚本)
JSP -------| |__ action (动作)
|
|_____Template data :除JSP语法外,JSP引擎不能解读的东西
在JSP中使用的directive(指令):
l page指令
功能:设定整个JSP网页的属性和相关功能。
语法:<%@ page attribute1="value1" attribute2="value2" %>
标签元素:
page指令元素的属性
language="language" 指定JSP Container要用什么语言来编译JSP网页。目前只可以使用Java语言,不过不排除增加其它语言。默认值为Java。
extends="className" 定义此JSP页面产生的Servlet是继承自哪个父类。必须为实现HttpJspPage接口的类。JSP规范对不完全理解其隐意的情况下使用此属性提出警告。
import ="importList" 定义此JSP页面可以使用哪些Java API。用逗号分隔列出一个或多个全质类名。此列表用于在生成的 java servlet中创建相应的导入语句。以下包是自动包含的,不必被指出:java.lang.*;java.servlet.*; java.servlet.jsp.*;java.servlet.htt.*
session="true|false" 指明JSP页面是否需要一个HTTP会话,如果为true,那么产生的servlet将包含创建一个HTTP会话(或访问一个HTTP会话)的代码,缺省为true。
buffer="none|size in kb" 指定输出流缓存的大小。有效值是nkb或没有。缺省为8kb。
authflush="true|false: 决定输出流的缓冲区是否要自动清除。当值为true时缓存满时将被自动刷新,当值为false时,缓冲区满会抛出溢出异常。缺省值为true。
isThreadSafe ="true" 此JSP页面能处理来自多个线程的同步请求,此值为true,否则为false,生成的servlet表明它实现了 SingleThreadMode接口。SingleThreadMode已经声明不赞成使用(deprecate)
info="text" 表示此JSP页面的相关信息,由getServletInfo()方法返回的。
isErrorPage ="true|false" 如果此页面被用作处理异常错误的页面,则为true。在这种情况下,页面可被指定为另一页面page指令元素中 errorPage属性的取值。指定此属性为true将使exception隐含变量对此页面可用。缺省值为false。
errorPage="error_url" 表示如果发生异常错误,网页会被重新指向一个URL页面。错误页面必须在其page指令元素中指定isErrorPage="true"
contentType="ctinfo" 表示将在生成servlet中使用的MIME类型和可选字符解码。
pageEncoding="ctinfo" 表示JSP页面的编码方式。
isELIgnored="true|false" 表示是否在此JSP网页中执行或忽略EL表达式。如果为true时JSP Container将忽略EL表达式。
在JSP的任何地方,以任何顺序,一个页面可以包含任意数量的page指令
l include指令
功能:在JSP编译时插入包含一个文件。包含的过程是静态的,包含的文件可以是JSP、HTML、文本或是Java程序。
语法:<%@ include file="relativeURLspec" %>
标签元素:
注意:include指令元素和行为元素主要有两个方面的不同点。
1.include指令是静态包含,执行时间是在编译阶段执行,引入的内容为静态文要,在编译成servlet时就和包含者融合到一起。所以file不能是一个变量,也不能在file后接任何参数。
2.include行为是动态包含,执行时间是在请求阶段执行,引入的内容在执行页面时被请求时动态生成再包含到页面中
l taglib指令
功能:使用标签库定义新的自定义标签,在JSP页面中启用定制行为。
语法:<%@ taglib uri="tabLibraryURI" prefix"tagPrefix" %>
Scripting(脚本)包括三种类型
l 声明语法
<%!declaraction %>
声明变量和方法(函数)
例:
<%!int a, b ; double c ; %>
<%! Circle a = new circle(2.0) ; %>
l 脚本语法
<% scriptlet %>
可以操作声明、表达式和其他类型合法的代码段在页脚本语言
例:
<% String name=null ;
If (request.getParmeter("name")==null){
…….
}
%>
l 表达式语法
<%= expression %>
定义脚本语言表达式
例:
<%= Math.sqrt(2) %>
<%= item[I] %>
<%= a+b+c %>
<%= new java.util.date() %>
action(动作)
标准的动作类型有:
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
<jsp:param>
<jsp:include>
<jsp:forward>
<jsp:plugin>
JSP中的JavaBean
JSP三种bean的类型
页面bean
会话bean
应用bean
大多数的系统会使用一个会话bean来保持状态,而对每一个页面使用一个页面bean 来对复杂的数据进行表示。
页面bean是一个模型,而JSP是一个视图。
Custom tag
bean是信息的携带者,
而tag更适用于处理信息。
标记库包含一个标记库描述符(TLD)和用于实现Custom tag的Java类
在翻译阶段,JSP容器将使用TLD来验证页面中的所有的tag是否都被正确的使用。
标记处理程序只是一个简单的适配器,而真正的逻辑是在另一个类中实现的,标记处理程序只是提供了一个供其他的可复用的类的JSP接口
示例
Model1
Model 1结构图
mode1 1是一个以JSP文件为中心的模式,在这种模式中JSP页面不仅负责表现逻辑,也负责控制逻辑。专业书籍上称之为逻辑耦合在页面中,这种处理方式,对一些规模很小的项目如:一个简单的留言簿,也没什么太大的坏处,实际上,人们开始接触一些对自己来说是新的东西的时候,比如,用JSP访问数据库时,往往喜欢别人能提供一个包含这一切的单个JSP页面,因为这样在一个页面上他就可以把握全局,便于理解。但是,用Model 1模式开发大型时,程序流向由一些互相能够感知的页面决定,当页面很多时要清楚地把握其流向将是很复杂的事情,当您修改一页时可能会影响相关的很多页面,大有牵一发而动全身的感觉,使得程序的修改与维护变得异常困难;还有一个问题就是程序逻辑开发与页面设计纠缠在一起,既不便于分工合作也不利于代码的重用,这样的程序其健壮性和可伸缩性都不好。
Model2
Model 2结构图
Struts
WebWork
JSP VS Servlet
相似:
l 两者都是基于Java的技术,所以都继承了Java的所有特性(跨平台、多线程、OO ),都可以使用Java强大的API。
l 两者工作方式相似:JSP代码先被JSP容器转换为Servlet代码再编译为类。
l 两者在J2EE体系结构中的工作层次相同,都负责与客户端的连接。
不同:
l 编程方式不同。Servlets是一些运行于Web服务器端的Java小程序;而JSP是脚本,编写起来更简单容易。
l 应用目的不同。Servlet主要用于从客户端接收请求信息,而JSP主要负责将服务器端信息传送到客户端。
l 使用JSP的真正意义在于:可以将界面设计和业务逻辑设计分离。
XML
XML基础知识
简介
XML是一种标记语言,设计用来描述数据(HTML设计用显示数据),没有预定义的标签,它用Document Type Definition (DTD)或XML Schema描述数据,XML(带着DTD或XML Schema )被设计成自描述的。
XML不是无所不能的,它只是用来描述数据的,至于数据如何显示、或传输、或处理,那是别的程序或语言的事。
哪些用途
XML语法
XML文件的开头,要用一个声明行如:
<?xml version="1.0" encoding="ISO-8859-1"?>,用以说明版本和编码。
XML的所有元素都必须有一个结束标签,标签大小写敏感,标签嵌套必须准确,每个XML文件必须有一个根元素,属性值必须用双/单引号括起(要成对使用),XML中的空格被保留,新起一行的回车换行统一用换行符一个,XML中的注释跟HTML一样。
XML元素
一个XML元素包括开始标签和结束标签以及它们之间的内容,可动态扩展,有父子关系或兄弟关系。一个元素的内容可以为空。
命名一个元素的要求:不能以数字、标点和XML(三个字符的大小组合,顺序不变)开头,不能有空格,由字母、数字或其它符构成的字符串。
不建议含有-或.或:或非英语字符,建议名字长度不要太长且要用描述性。
XML元素属性
元素开始标签中可以含有属性,用以补充说明元素,但属性的值可以用来描述数据内容,但尽量不要这么用而尽可能地用子元素来完成这个任务。
用属性存放数据有以下弊端:不能含有多个值,不易扩展、不能描述数据结构、程序难以处理、不能用DTD来进行检查。
这个作者习惯有一个例外,就是ID或名,可以放在属性里。
XML检查
一个好的XML文件,合于语法和DTD描述。
DTD定义了XML的合法元素,XML Schema是基于XML的DTD的替代物。
XML的错误,会终止处理程序。
IE和NetScape对XML的支持
浏览器中显示XML文件,当XML有错误时会提示。
现实生活中的XML
命名空间
提供了一种避免元素命名冲突的机制。通过在元素名前增加一个前缀来区分不同的元素,同时在开始标签中增xmlns属性来描述不同的URI指定的命名空间。例如:
<f:table xmlns:f="http://www.w3schools.com/furniture">......</table>
<h:table xmlns:h="http://www.w3.org/TR/html4/">......</table>
xmlns属性的语法是:
xmlns:namespace-prefix="namespace"
需要说明的是,这里的URL(即要求的URI)只是用来区别空间的不同,并不要求从那取得什么数据。
xmlns在现实中的典型应用是xsl,每个xsl中的非HTML标签都要指明xmlns.
CDATA
除了CDATA片断外,一个XML文档中所有文本都要经过解析器解析,即使是两个标签中间的数据也不例外,这是因为标签可以嵌套的缘故。
XML预定义了五个特殊字符,如下表所示,当在数据中出现这几字符时,需要用一个串来代替,其中前两个是必须的,后三个是建议的。
< < less than
> > greater than
& & ampersand
' ' apostrophe
" " quotation mark
一个CDATA片断,由""结束,所以其中间的内容不能含有"]]>"字符串。
XML文档编码
在xml文档第一行声明中,指明文档所用的编码,如例:
<?xml version="1.0" encoding="UTF-8"?>
需要注意的是,所用文本编辑器要要可以指定编码(如win2K的notepad),然后利用encoding属性指明所用的编码。win95/98的Notepad可不行。
IE5以上可支持XMLHTTP请求。
引用两段javascript代码,供参考吧。
var objHTTP = new ActiveXObject("Microsoft.XMLHTTP")
objHTTP.Open('GET','httprequest.asp',false)
objHTTP.Send()
......
document.all['A1'].innerText= objHTTP.status
document.all['A2'].innerText= objHTTP.statusText
document.all['A3'].innerText= objHTTP.responseText
这样一来,跟服务器打交道,来去都可用XML了。
posted on 2008-09-09 11:25
黄小二 阅读(559)
评论(0) 编辑 收藏 所属分类:
J2EE