欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
servlet與web服務(wù)
 

      Servlet在web services中起到很大的作用,負責解析soap文件(消息和附件封套),使用wsdl來(lái)校驗soap消息等。作為基本的編程是可以用servlet來(lái)解析soap消息,尤其是對于帶附件的soap消息,這樣做很透明,但是servlet不能作為Web服務(wù),當然拓展的JAXM是可以做到的?,F在那些支持web services的項目都是通過(guò)底層上實(shí)現了servlet的功能,來(lái)完成HTTP+SOAP的通信,就不需要程序員考慮基于HTTP的SOAP消息的通信過(guò)程(不要有這樣的誤解,在java平臺上HTTP的通信的服務(wù)程序是servlet/jsp,而現在你不用servlet和jsp來(lái)通信,豈不是矛盾?事實(shí)不矛盾,記住是底層已經(jīng)實(shí)現了servlet功能,具體通信有底曾自己管理),直接上升到業(yè)務(wù)邏輯的服務(wù)編程。當然有時(shí)也可以編寫(xiě)解析SOAP消息的servlet,那就僅僅只是SOAP通信了(servlet無(wú)法作為服務(wù)來(lái)描述)。

     下面根據配置文件,來(lái)說(shuō)明一些底層與web services的關(guān)系:

      回顧一下servlet的映射模式。我們知道,servlet是從javax.servlet.http.HttpServlet繼承的,在服務(wù)器端被載入JVM執行,然后向客戶(hù)端輸出html流。
servlet的web.xml文件(位于 webapps/foo/WEB-INF目錄):


                         "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">


invoker
/servlet/*


invoker servlet 其實(shí)是:org.apache.catalina.servlets.InvokerServlet
按類(lèi)名提供小服務(wù)程序。例如,如果您調用 foo/servlet/HelloServlet,
invoker servlet將裝入該HelloServlet(如果它在其類(lèi)路徑中的話(huà))并執行。

初看上面的web.xml,好像只給出了一個(gè)servlet映射,而沒(méi)有定義invoker servlet。
其實(shí),invoker servlet 是在tomcat的conf目錄中的web.xml中定義的::
 
        invoker
        
          org.apache.catalina.servlets.InvokerServlet
        

        
            debug
            0
        

        2
    

所以,如果拋開(kāi)Tomcat_HOME/conf/web.xml,我們這樣定義一個(gè)web.xml,似乎更能清楚的說(shuō)明問(wèn)題:

                         "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

MyInvoker

org.apache.catalina.servlets.InvokerServlet


debug
0

2


MyInvoker
/servlet/*


即所有/servlet/* 模式的url,都會(huì )交給org.apache.catalina.servlets.InvokerServlet來(lái)處理。
或者說(shuō),所有/servlet/* 模式的url,其實(shí)都是調用InvokerServlet這個(gè)類(lèi),而InvokerServlet本身也是
一個(gè)servlet,它也是從 HttpServlet 繼承而來(lái)的。
這樣,我們自己的servlet就能夠通過(guò)特定的url執行,即 /servlet/OurServlet。
當然,如果你高興,可以定義任何的 url pattern,而不一定是 /servlet/*,這一點(diǎn),正如我們后面
看到的Axis處理Soap消息的方法。

進(jìn)一步,如果不想讓 InvokerServlet 在中間“搗鬼”,我們當然可以直接定義自己的servlet:


                         "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

MyInvoker2

com.foo.MyServlet



MyInvoker2
/AnyName/*


JSP也是一樣的道理,有了上面的分析,
看看Tomcat_HOME/conf/web.xml中的如下語(yǔ)句就可以JSP的處理方法了,這里就不再廢話(huà)了:
....

        jsp
        org.apache.jasper.servlet.JspServlet
        
            logVerbosityLevel
            WARNING
        

        3


    jsp
    *.jsp

....
進(jìn)入正題。
我們先來(lái)看部署Web Service的web.xml:




    Axis
    
    org.apache.axis.transport.http.AxisServlet





    Axis
    /services/*





所有 /services/* 模式的 url 都會(huì )交給org.apache.axis.transport.http.AxisServlet處理,
AxisServlet當然也是從HttpServlet繼承而來(lái)的。這就是為什么我們部署的Web服務(wù)在調用時(shí)都要在
服務(wù)名稱(chēng)前加上 services/ 了。

可以說(shuō),AxisServlet是所有Web服務(wù)調用的入口。
那么AxisServlet在接手Web服務(wù)調用后都做了哪些工作呢?

客戶(hù)端用call.invoke()調用web服務(wù)用的是POST,所以入口是AxisServlet.doPost...
而不是AxisServlet.doGet...


先來(lái)看看AxisServlet的doPost函數,這里只給出了關(guān)鍵語(yǔ)句及注釋?zhuān)?br>
    /**
     * Process a POST to the servlet by handing it off to the Axis Engine.
     * Here is where SOAP messages are received
     * @param req posted request
     * @param res respose
     * @throws ServletException trouble
     * @throws IOException different trouble
     */
     public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException
    {
msgContext = createMessageContext(engine, req, res);//獲取客戶(hù)請求信息

engine.invoke(msgContext); //調用客戶(hù)端請求的服務(wù)

responseMsg = msgContext.getResponseMessage();//得到調用的返回結果

sendResponse(getProtocolVersion(req), contentType, res, responseMsg);//將結果送至客戶(hù)端
     }

這樣一來(lái),Web服務(wù)調用的來(lái)龍去脈就大致清楚了。。。

為了高清楚前面我們的三個(gè)url
http://192.168.0.1/test/services
http://192.168.0.1/test/services/sayHelloService?wsdl
http://192.168.0.1/test/services/sayHelloService?method=sayHelloTo&aname=everybody
是怎樣獲得輸出結果的,再來(lái)看看AxisServlet的doGet函數,這里只給出了流程框架及注釋?zhuān)?br>
**
* Process GET requests. Because Axis does not support the GET-style
* pseudo execution of SOAP methods, this handler deals with queries
* of various kinds, not real SOAP actions.
*
* @todo for secure installations, dont stack trace on faults
* @param request request in
* @param response request out
* @throws ServletException
* @throws IOException
*/
public void doGet(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException
{

//如果路徑為空,比如:http://localhost/wstk/services 或 http://localhost/wstk/services/*
if((pathInfo == null || pathInfo.equals("")) && !realpath.endsWith(".jws"))

{
//從server-config.wsdd文件中讀取所有部署的服務(wù)信息,向向客戶(hù)端列出所有部署的服務(wù),
//包括每個(gè)服務(wù)可調用的方法。

}else
//如果路徑不為空,比如:http://localhost/wstk/services/sayHelloService
if(realpath != null)
{
//如果請求wsdl,比如:http://localhost/wstk/services/sayHelloService?wsdl
if(wsdlRequested)
{
//創(chuàng )建sayHelloService的WSDL文件并傳送至客戶(hù)端
} else
//這里是利用url調用Web服務(wù)的入口,比如http://192.168.0.1/test/services/sayHelloService?method=sayHelloTo&aname=everybody
if(req.getParameterNames().hasMoreElements())
{
//如果客戶(hù)端調用的方法正確,則Axis會(huì )調用相應的JavaBean,并把JavaBean的返回結果
//封裝為Soap消息流返回給客戶(hù)端。
}
}
}


而Axis怎樣找到我們所請求的JavaBean呢?答案是server-config.wsdd文件。

server-config.wsdd





  
  





  
    
  





WSDD是web service deployment descriptor的縮寫(xiě)。

最外面的元素指示這是WSDD,并定義了java的名字空間。

接著(zhù)的 元素定義了service。一個(gè)service是一個(gè)目標鏈,包括請求request、內容提供者provider、響應response。
在這個(gè)例子中,我們指出service名字是sayHelloService ,provider是"java:RPC",它是axis 的標記,指示這是一個(gè)java的RPC service,
而處理它的真正的class是org.apache.axis.providers.java.RPCProvider。

接著(zhù)我們要在中告訴RPCProvider,它如何實(shí)例化并調用正確的class(如:com.foo.MyService)。
元素的className指示class名,allowedMethods告訴引擎那些共用的方法要通過(guò)soap來(lái)調用。
"*"表示所有的公共方法,我們也列出方法名字列表,可以空格或逗號分割它們。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
如何使用axis發(fā)布webservices
WebService之a(chǎn)xis2詳解
CXF + Spring 開(kāi)發(fā) Webservices
AXIS開(kāi)始Web 服務(wù)
在集成Spring Axis 的環(huán)境下webservice的發(fā)布和部署 - Aflye...
java axis webservice 開(kāi)發(fā)實(shí)例 - 劉志猛博客
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久