随笔-7  评论-24  文章-102  trackbacks-0

目录

  1. 系统体系结构 
  2. J2EE 
  3. Servlet 
  4. JSP 
  5. JSP VS Servlet 
  6. XML
      
     

系统体系结构

两层体系结构

缺点:

l         client/server结构通常在第一次部署的时候比较容易,但难于升级或改进

l         经常基于某种专有的协议―通常是某种数据库协议。

l         它使得重用业务逻辑和界面逻辑非常困难

l         更重要的是,在Web时代,二层化应用通常不能体现出很好的伸缩性,因而很难适应Internet的要求。

N层体系结构

客户端/WEB服务层/应用服务层/数据库服务层

优点:

l         应用程序各部分之间松耦合,从而应用程序各部分的更新相互独立

l         业务逻辑集中放在服务器上由所有用户共享,使得系统的维护和更新变得简单,也更安全。降低了部署与维护的开销,提高了灵活性、可伸缩性。

l         引入瘦客户端,计算被集中至服务器端,使性能提高成为可能。数据库不再和每一个活动的用户保持一个连接,而是由应用程序组件负责与数据库打交道,降低数据库服务器的负担,提高了性能






J2EE

J2EE架构

J2EE提供了一套完整的解决所有这些问题的框架方案:

l         提供了分布式、可移植构件的框架

l         为构件与应用服务器提供标准API

l         简化了服务器端中间层构件的设计

 

开放的、基于标准的平台,用以开发、部署和管理N层结构、面向Web的,以服务器为中心的企业级应用

J2EE13种核心技术

   EJB CORBA RMIJSP

   Java ServletJavaBeanJDBC

   XMLJMS……





Servlet

l         Servlets(Server Applet):是一些运行于Web服务器端的Java小程序,用来扩展Web服务器的功能。

l         Servlet是一种扩展Web服务器功能的技术,而且由于它是用Java编写的,所以能够访问整个Java API库,包括用于访问企业数据库的JDBC API

l         Servlets用特定的Java解决方案替代了其它的Web服务器方编程模式(如:CGIISAPI等),因而继承了Java的所有特性(跨平台、多线程、OO)

l         用来编写ServletsServlet 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         可移植性好

ServletJava编写,Servlet API具有完善的标准。因此,为I-Planet Enterprise Server写的Servlet无需任何实质上的改动即可移植到ApacheMicrosoft 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请求方法(例如GETPOST等等)      

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()    返回会话IDservlet引擎设置的一个唯一关键字。      

l         ing getMaxInactiveInterval()    如果没有与客户端发生交互,设置和返回会话存活的最大秒数。      

l         void setMasInactiveInterval(int seconds)          

l         void invalidate()    使得会话被终止,释放其中任意对象。      

l         boolean isNew()    如果客户端仍未加入到会话,返回true。当会话首次被创建,会话ID被传入客户端,但客户端仍未进行包含此会话ID的第二次请示时,返回true    

ServletConfig

通过servlet还可以获得ServletConfig对象,一个ServletConfig对象是servlet containerservlet 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)    返回映射到另一URLservlet上下文。在同一服务器中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)    返回具有指定名字或路径的servletJSPRequestDispatcher。如果不能创建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表达式。如果为trueJSP Container将忽略EL表达式。

JSP的任何地方,以任何顺序,一个页面可以包含任意数量的page指令

l         include指令

功能:JSP编译时插入包含一个文件。包含的过程是静态的,包含的文件可以是JSPHTML、文本或是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 tagJava

在翻译阶段,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(带着DTDXML 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是基于XMLDTD的替代物。

  XML的错误,会终止处理程序。

IENetScapeXML的支持

 

浏览器中显示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预定义了五个特殊字符,如下表所示,当在数据中出现这几字符时,需要用一个串来代替,其中前两个是必须的,后三个是建议的。

 

 

&lt; < less than

&gt; > greater than

&amp; & ampersand 

&apos; ' apostrophe

&quot; " quotation mark

 

 

  一个CDATA片断,由""结束,所以其中间的内容不能含有"]]>"字符串。

XML文档编码

  在xml文档第一行声明中,指明文档所用的编码,如例:

 

<?xml version="1.0" encoding="UTF-8"?>

 

  需要注意的是,所用文本编辑器要要可以指定编码(如win2Knotepad),然后利用encoding属性指明所用的编码。win95/98Notepad可不行。

 

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

只有注册用户登录后才能发表评论。


网站导航: