科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Web服务部署内幕2

Web服务部署内幕2

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

配置一个Web服务的最简方法:为了能让web服务先跑起来,先给出一个Web服务的原型,以便于后面的讨论。我们从一个最简单的例子开始,本文只给出必须的东西。

来源:IT专家网 2008年5月12日

关键字: 部署 服务 web java

  • 评论
  • 分享微博
  • 分享邮件

这就是我们想要的结果吗?这只是服务器端送回来的SOAP消息,不过我们想要的结果在里面。。。

为了真正调用我们的Web服务,下面给出一个Client:

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;

public class test
{
public static void main(String [] args)
{
try {
String endpoint = "http://192.168.0.1/test/services/sayHelloService";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) ;
call.setOperationName(new QName("http://sayHelloService", "sayHelloTo"));
String ret = (String) call.invoke( new Object[] { args[0] } ;
System.out.println(ret);
} catch (Exception e) {
e.printStackTrace();
}
}
}

注意要配置好正确的classpath,确保编译器能找的到axis.jar和jaxrpc.jar,否则编译不会通过。
用下面的命令行运行这个class:
java test everybody
我们会得到:How are you, everybody

这才是我们真正想要的。。。

2.追根究底,我们的Web服务是怎样跑起来的

前面给出的两个配置文件web.xml和server-config.wsdd,或许不是能一下子就看懂的。

先让我们回顾一下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中定义的::
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

所以,如果抛开Tomcat_HOME/conf/web.xml,我们这样定义一个web.xml,似乎更能清楚的说明问题:

<?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-name>MyInvoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>MyInvoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
</web-app>

即所有/servlet/* 模式的url,都会交给org.apache.catalina.servlets.InvokerServlet来处理。
或者说,所有/servlet/* 模式的url,其实都是调用InvokerServlet这个类,而InvokerServlet本身也是
一个servlet,它也是从 HttpServlet 继承而来的。

这样,我们自己的servlet就能够通过特定的url执行,即 /servlet/OurServlet。
当然,如果你高兴,可以定义任何的 url pattern,而不一定是 /servlet/*,这一点,正如我们后面
看到的Axis处理Soap消息的方法。

再进一步,如果不想让 InvokerServlet 在中间“捣鬼”,我们当然可以直接定义自己的servlet:

<?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-name>MyInvoker2</servlet-name>
<servlet-class>
com.foo.MyServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>MyInvoker2</servlet-name>
<url-pattern>/AnyName/*</url-pattern>
</servlet-mapping>
</web-app>

JSP也是一样的道理,有了上面的分析,
看看Tomcat_HOME/conf/web.xml中的如下语句就可以JSP的处理方法了,这里就不再废话了:
....
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
....

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章