Axis2 Webservice之部署服务到tomcat
作者:luckystar
日期:
如上是我的工程结构图,因为并不是单独的写webservice的类,所以将webservice相关的类和配置文件放在com.axis2.webservice包。 下面要说的就是怎么将webservice类和配置文件进行打包,部署到tomcat。 我使用的Ant打包aar,build.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="axis2WebService" default="aar" basedir=".">
<property name="lib.dir" value="lib">
</property>
<property name="src.dir" value="src">
</property>
<property name="dest.dir" value="dest">
</property>
<property name="classes.dir" value="${dest.dir}/classes">
</property>
<property name="jarfile" value="${dest.dir}/helloworldAnt.jar">
</property>
<property name="aarfile" value="${dest.dir}/webservice/axis2-ws.aar">
</property>
<property name="webserviceClass" value="${classes.dir}/com/axis2/webservice/">
</property>
<target name="init">
<mkdir dir="${classes.dir}">
</mkdir>
<echo message="Create dir ${dest.dir}.">
</echo>
</target>
<path id="master-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="master-classpath">
</javac>
<echo>Compile source code.</echo>
</target>
<target name="jar" depends="compile">
<jar jarfile="${jarfile}" basedir="${classes.dir}" includes="**/*.class">
</jar>
<echo>Create jar file.</echo>
</target>
<!--
Create Axis2 WebService Jar
这个其实是我webservice类中用到一个自定义的类,这里将这个类打包成jar
供客户端引用
-->
<target name="axis2-jar" depends="compile">
<jar jarfile="${dest.dir}/axis2-server-beans.jar" basedir="${classes.dir}" includes="com/axis2/webservice/Person.class"></jar>
<echo>Create Axis Webservice Jar.</echo>
</target>
<!-- 生成aar文件 -->
<target name="aar" depends="compile">
<copy file="${src.dir}/com/axis2/webservice/services.xml" todir="${dest.dir}/webservice/tmp/META-INF/" />
<copy todir="${dest.dir}/webservice/tmp/">
<fileset dir="${classes.dir}">
<include name="com/axis2/webservice/**" />
</fileset>
</copy>
<jar jarfile="${aarfile}">
<fileset dir="${dest.dir}/webservice/tmp/">
<include name="com/**">
</include>
<include name="META-INF/**">
</include>
<exclude name="**/http/**">
</exclude>
</fileset>
</jar>
<echo>Create Axis2 Webservice aar file.</echo>
<!--生成WEBSERVICE WAR包-->
<copy file="${src.dir}/com/axis2/webservice/web.xml" todir="${dest.dir}/axis2-ws.war/WEB-INF">
</copy>
<copy file="${dest.dir}/webservice/axis2-ws.aar" todir="${dest.dir}/axis2-ws.war/WEB-INF/services">
</copy>
<copy todir="${dest.dir}/axis2-ws.war/WEB-INF/classes">
<fileset dir="${dest.dir}/webservice/tmp">
<include name="com/**/http/**" />
</fileset>
</copy>
<!--Copy配置文件log4j.properties到classes目录-->
<copy todir="${dest.dir}/axis2-ws.war/WEB-INF/classes" file="${src.dir}/log4j.properties"></copy>
<!--Copy用到的JAR包到WEB-INF/lib-->
<copy todir="${dest.dir}/axis2-ws.war/WEB-INF/lib">
<fileset dir="${lib.dir}/axis2/">
<include name="**/**" />
</fileset>
<fileset dir="${lib.dir}/log4j/">
<include name="**/**" />
</fileset>
<fileset dir="${lib.dir}/json">
<include name="**/**"/>
</fileset>
</copy>
<echo message="axis2-ws.aar " file="${dest.dir}/axis2-ws.war/WEB-INF/services/services.list" append="true" />
<echo>Create WAR file successfully.</echo>
<delete dir="${dest.dir}/webservice">
</delete>
</target>
<target name="clean">
<delete dir="${dest.dir}">
</delete>
<delete file="${jarfile}">
</delete>
</target>
</project>
执行AAR任务后,生成的目录结构如下:
当然了,你甚至可以用Ant将axis2-ws.war复制到tomcat/webapps目录下,并且启动tomcat。
这里还要提一下web.xml,内容如下:
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>com.axis2.webservice.http.MyAxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
MyAxisServlet类继承AxisServlet,并重写service方法,你可以在这个方法中做一些拦截,比如过滤非法IP等。 如下:
package com.axis2.webservice.http;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.axis2.transport.http.AxisServlet;
public class MyAxisServlet extends AxisServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
super.service(req, res);
System.out.println(req.getRemoteAddr());
}
}
当然,如果你不需要过滤IP,即任何人都可以访问你的webservice,那么web.xml中配置servlet为AxisServlet就可以了。
作者:qincidong
出处:http://qincidong.github.io/blog/2015/02/10/axis2-webservice-deploy-under-tomcat.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
出处:http://qincidong.github.io/blog/2015/02/10/axis2-webservice-deploy-under-tomcat.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。