out.print(response.encodeURL(“SessionExample?
database=foo&datavalue=bar”));
out.println(“\”>URLencoded”);
3.SingleThreadModel
默认的,每一个servletdefinitioninacontainer只有一个servletclass的实例。
只有实现了SingleThreadModel,container才会让servlet有多个实例。
Servletspecification上建议,不要使用synchronized,而使用SingleThreadModel。
SingleThreadModel(没有方法)
保证servlet在同一时刻只处理一个客户的请求。
SingleThreadModel是耗费资源的,特别是当有大量的请求发送给Servlet时,SingleThreadModel的作用是使包容器以同步时钟的方式调用service方法。
这等同于在servlet的service()方法种使用synchronized.
SingleThreadModel一般使用在需要响应一个heavyrequest的时候,比如是一个需要和数据库打交道的连接。
2.在重载Servlet地init()方法后,一定要记得调用super.init();
3.theclient通过发送一个blankline表示它已经结束request
而theserver通过关闭thesocket来表示response已结束了。
4.一个HttpServlet可以送三种东西给Client
1)asinglestatuscode
2)anynumberofhttpheaders
3)aresponsebody
5.Servlet之间信息共享的一个最简单的方法就是
System.getProperties().put(“key”,”value”);
6.Post和Get
Post:
将form内各字段名称和内容放置在htmlheader内传送给server
Get:
?
之后的查询字符串要使用URLEncode,经过URLEncode后,这个字符串不再带有空格,以后将在server上恢复所带有的空格。
Get是Web上最经常使用的一种请求方法,每个超链接都使用这种方法。
7.Web.xml就是WebApplicatin的deploymentdescriptor
作用有:
组织各类元素
设置initparam
设置安全性
8.RequestDispatcher用来把接收到的requestforwardprocessing到另一个servlet
要在一个response里包含另一个servlet的output时,也要用到RequestDispatcher.
9.Servlet和Jsp在同一个JVM中,可以通过ServeltContext的
setAttribute()
getAttribute()
removeAttribute()
来共享对象
10.利用request.getParameter()得到的String存在字符集问题。
可以用strTitle=request.getParameter(“title”);
strTitle=newString(strTitle.getBytes(“8859-1”),”gb2312”);
如果你希望得到更大得兼容性
Stringencoding=response.getCharacterEncoding();
//确定Applicationserver用什么编码来读取输入的。
strTitle=newString(strTitle.getBytes(encoding),”gb2312”);
XML
1.XML基础知识
1.一个xml文档可以分成两个基本部分:
首部(header)
内容(content)
2.xml名字空间规范中指定:
xml文档中的每一个元素都处在一个名字空间中;如果没有指定的名字空间,缺省的名字空间就是和该元素相关联的名字空间。
3.Adocumentthatiswell-formedobeysalloftherulesofXMLdocuments(nestedtags,etc.)
"Ifawell-formeddocumentusesaDocumentTypeDefinition(moreontheseinaminute),anditfollowsalltherulesoftheDTD,thenitisalsoavaliddocument
4.Atagisthetextbetweenthe
"Anelementisthestarttag,theendtag,andeverything(includingotherelements)inbetween
5.标签(tags)实际上包含了“元素”(elements)和“属性”(attributes)两部分。
用元素(elements)来描述有规律的数据。
用属性(attributes)来描述系统数据。
如果你有一些数据要提供给某个应用程序,该数据就可能要用到一个元素。
如果该数据用于分类,或者用于告知应用程序如何处理某部分数据,或者该数据从来没有直接对客户程序公开,那么它就可能成为一种属性。
6.CDATA(读作:
Cdata)C是character的缩写。
7.org.xml.sax.Reader
/|\
org.xm.l.sax.XMLReader
/|\
org.apche.xerces.parsers.SAXParser
2.WebService
2.1WebService的基本概念
WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。
这种技术允许网络上的所有系统进行交互。
随着技术的发展,一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。
Web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。
这些服务会根据用户的身份,地点以及产生请求的原因来改变不同的处理,用以产生一个唯一的,定制的方案。
这种协作机制对那些只对最终结果有兴趣的用户来说,是完全透明的。
UDDI
在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件。
所以,我们需要一种方法来发布我们的Web服务。
UDDI(UniversalDescription,Discovery,andIntegration)是一个主要针对Web服务供应商和使用者的新项目。
UDDI项目中的成员可以通过UDDIBusinessRegistry(UBR)来操作Web服务的调用,UBR是一个全球性的服务。
Web服务供应商可以在UBR中描述并且注册他们的服务。
用户可以在UBR中查找并定位那些他们需要的服务。
UDDI是一种根据描述文档来引导系统查找相应服务的机制。
UDDI包含标准的“白皮书”类型的商业查询方式,
“黄皮书”类型的局部查找,以及
“绿皮书”类型的服务类型查找。
UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。
它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。
WSDL
对于商业用户来说,要找到一个自己需要使用的服务,他必须知道如何来调用。
WSDL(WebServicesDescriptionLanguage)规范是一个描述接口,语义以及Web服务为了响应请求需要经常处理的工作的XML文档。
这将使简单地服务方便,快速地被描述和记录。
以下是一个WSDL的样例:
xmlversion="1.0"?
>
targetNamespace="
xmlns:
tns="
xmlns:
xsd1="
xmlns:
soap="http:
//schemas.xmlsoap.org/wsdl/soap/"
xmlns="http:
//schemas.xmlsoap.org/wsdl/">
xmlns="http:
//www.w3.org/2000/10/XMLSchema">
TradePriceRequest"/>
TradePrice"/>
GetLastTradePriceInput"/>
GetLastTradePriceOutput"/>
type="tns:
StockQuotePortType">
bindingstyle="document"
transport="http:
//schemas.xmlsoap.org/soap/http"/>
operation
soapAction="
bodyuse="literal"/>
bodyuse="literal"/>
Myfirstservice
StockQuoteBinding">
addresslocation="
它包含了以下的关键信息:
消息的描述和格式定义可以通过XML文档中的和标记来传送。
标记中表示了消息传送机制。
(e.g.request-only,request-response,response-only)。
标记指定了编码的规范。
标记中表示服务所处的位置(URL)。
WSDL在UDDI中总是作为一个接口描述文档。
因为UDDI是一个通用的用来注册WSDL规范的地方,UDDI的规范并不限制任何类型或者格式描述文档。
这些文档可能是一个WSDL文档,或者是一个正规的包含导向文档的Web页面,也可能只是一个包含联系信息的电子邮件地址。
现在Java提供了一个JavaAPIforWSDL(JWSDL)规范。
它提供了一套能快速处理WSDL文档的方法,并且不用直接对XML文档进行操作,它会比JAXP更方便,更快速。
SOAP
当商业用户通过UDDI找到你的WSDL描述文档后,他通过可以SimpleObjectAccessProtocol(SOAP)调用你建立的Web服务中的一个或多个操作。
SOAP是XML文档形式的调用商业方法的规范,它可以支持不同的底层接口,象HTTP(S)或者SMTP。
之所以使用XML是因为它的独立于编程语言,良好的可扩展性以及强大的工业支持。
之所以使用HTTP是因为几乎所有的网络系统都可以用这种协议来通信,由于它是一种简单协议,所以可以与任何系统结合,还有一个原因就是它可以利用80端口来穿越过防火墙。
SOAP的强大是因为它简单。
SOAP是一种轻量级的,非常容易理解的技术,并且很容易实现。
它有工业支持,可以从各主要的电子商务平台供应商那里获得。
从技术角度来看,SOAP详细指明了如何响应不同的请求以及如何对参数编码。
一个SOAP封装了可选的头信息和正文,并且通常使用HTTPPOST方法来传送到一个HTTP服务器,当然其他方法也是可以的,例如SMTP。
SOAP同时支持消息传送和远程过程调用。
以下是一个SOAP请求。
POST/StockQuoteHTTP/1.1
Host:
Content-Type:
text/xml;charset="utf-8"
Content-Length:
nnnn
SOAPAction:
"Some-URI"
Envelope
xmlns:
SOAP-ENV="http:
//schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:
encodingStyle="http:
//schemas.xmlsoap.org/soap/encoding/"/>
Header>
Transactionxmlns:
t="some-URI"SOAP-ENV:
mustUnderstand="1">
5
Transaction>
Header>
Body>
GetLastTradePricexmlns:
m="Some-URI">
SUNW
GetLastTradePrice>