Servlet在web services中起到很大的作用,負責解析soap文件(消息和附件封套),使用wsdl來校驗soap消息等。作為基本的編程是可以用servlet來解析soap消息,尤其是對於帶附件的soap消息,這樣做很透明,但是servlet不能作為Web服務,當然拓展的JAXM是可以做到的。現在那些支持web services的項目都是通過底層上實現了servlet的功能,來完成HTTP+SOAP的通信,就不需要程序員考慮基於HTTP的SOAP消息的通信過程(不要有這樣的誤解,在java平台上HTTP的通信的服務程序是servlet/jsp,而現在你不用servlet和jsp來通信,豈不是矛盾?事實不矛盾,記住是底層已經實現了servlet功能,具體通信有底曾自己管理),直接上升到業務邏輯的服務編程。當然有時也可以編寫解析SOAP消息的servlet,那就僅僅只是SOAP通信了(servlet無法作為服務來描述)。
下面根據配置文件,來說明一些底層與web services的關系:
回顧一下servlet的映射模式。我們知道,servlet是從javax.servlet.http.HttpServlet繼承的,在服務器端被載入JVM執行,然後向客戶端輸出html流。
servlet的web.xml文件(位於 webapps/foo/WEB-INF目錄):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
<web-app>
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
</web-app>
invoker servlet 其實是:org.apache.catalina.servlets.InvokerServlet
按類名提供小服務程序。例如,如果您調用 foo/servlet/HelloServlet,
invoker servlet將裝入該HelloServlet(如果它在其類路徑中的話)並執行。
初看上面的web.xml,好像只給出了一個servlet映射,而沒有定義invoker servlet。
其實,invoker servlet 是在tomcat的conf目錄中的web.xml中定義的::