`
qi_w2006
  • 浏览: 3253 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java通过amox-http发布http服务

阅读更多

前言
    做Java也有三年了,一直想自己做个东西出来,于是第一个想到的是做一个自动生成代码的工具,在添加webService服务功能时,想到再添加一个http服务功能,但java添加http服务很麻烦,由此产生的此软件,此软件是自动生成代码工具的附属工具。
我们都知道java的web项目可以对外发布webService服务和http服务,通过xfire只可以很方便的发布webService服务,但是java发布http服务一直不方便。通过java原生的servlet发布http服务可以方便其它平台调用,但是编程比较麻烦而且不太适合目前的j2ee的编程思想,此方式不太合适;通过spring的http-invorke发布的http服务,可以方便快速,但在客户端必须依赖spring本身才能调用,在移动平台火爆的今天许多移动平台原生支持http调用,此种http服务的发布方式显然也不合适;为达到目前j2ee的编程思想并且能方便快速用于其它平台的调用为此产生了本软件(amox-http),本软件可以方便快速的发布http服务,可以跨平台调用。


系统概述
(1)      本软件就是HTTP服务发布工具包;
(2)      主要功能使用本软件能方便快捷发布一个基于java的spring的HTTP服务。
(3)      工作原理:
       a)         在web工程启动时,加载类com.amox.http.spring.HttpServiceSpringRegister(http服务注册类)中注册的serviceBeans(需要发布服务的类);加载时只会把服务类中加了@PathMapping的注解的方法发布成服务载入内存;
      b)        用户请求时,拦截类com.amox.http.spring.HttpServiceSpringDispatcher拦截获取用户请求的路径,获取用户请求的路径;
      c)         根据用户的请求路径匹配对应的服务,若存在对应服务则返回对应方法返回值,若不存在给出错误提示。

实践
提示:本软件是基于spring开发,所以要有spring包(非spring方式暂未提供,正在设计调用方式),本软件的核心是反射所以还要有一个核心jar包javassist.jar
1. 载入jar包(amox-http-1.7.jar)
http://download.csdn.net/detail/qi_w2006/4971419
2. 载入jar包(javassist.jar)
http://download.csdn.net/detail/qi_w2006/4971428
3. 配置web.xml如下:
  <servlet>
    <servlet-name>AmoXHttpServlet</servlet-name>
    <servlet-class>com.amox.http.spring.HttpServiceSpringDispatcher</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AmoXHttpServlet</servlet-name>
    <url-pattern>/http/*</url-pattern>
  </servlet-mapping>

4. 配置spring-http.xml(此文件名为spring配置文件,可自定义需要的名称)配置文件如下:

    <!-- Service层类所在的包 -->
    <context:component-scan base-package="com.amox.**.bmo"/>

    <!-- 需要发布服务的类 -->
    <bean id="httpServiceDemo" class="com.amox.demo.httpService.HttpServiceDemoImpl"></bean>
   
    <!-- http服务注册类 -->
    <bean id="amoXHttpServiceBean" class="com.amox.http.spring.HttpServiceSpringRegister">
        <property name="serviceBeans">
            <list>
                <ref bean="httpServiceDemo"/>
            </list>
        </property>
    </bean>

5. 编写需要发布的服务类,如下:
public interface HttpServiceDemo {

/**
* 发布GET服务<br/>
* 建议参数中不用基本类型,这样若请求中可不传此参数
* @param request 请求参数
* @param index 请求参数
* @return 服务结果
*/
public String demoGet(String request, Long index);
/**
* 发布POST服务<br/>
* 建议参数中不用基本类型,这样若请求中可不传此参数
* @param request 请求参数
* @param index 请求参数
* @return 服务结果
*/
public String demoPost(String request, Double index);
/**
* 发布GET和POST服务 <br/>
* 建议参数中不用基本类型,这样若请求中可不传此参数
* @param request 请求参数
* @param index 请求参数
* @return 服务结果
*/
public String demoBoth(String request, Integer index);
}


public class HttpServiceDemoImpl implements HttpServiceDemo {
@Autowired
private HttpBmo httpBmo;
@PathMapping("/demoGetService")
public String demoGet(String request, Long index) {
return "demoGetService : " + httpBmo.demo(request, index);
}
@PathMapping(value="/demoPostService", method=RequestMethod.POST)
public String demoPost(String request, Double index) {
return "demoPostService : " + httpBmo.demo(request, index);
}
@PathMapping(value="/demoBothService", method={RequestMethod.POST, RequestMethod.GET} )
public String demoBoth(String request, Integer index) {
return "demoBothService : " + httpBmo.demo(request, index);
}
}

public interface HttpBmo {
public String demo(String request, Number index);
}


import org.springframework.stereotype.Service;
@Service
public class HttpBmoImpl implements HttpBmo {
@Override
public String demo(String request, Number index) {
return "{request : "+request
+", index : " + index + "}";
}
}


5. 访问服务,如下:

6. 好的教程不如好的文档
http://download.csdn.net/detail/qi_w2006/4971446
    生成的文档中,枚举类RequestMethod生成的文档有问题,说是jdk1.6的BUG会在7中解决。。。

7. 好的文档不如好的例子
http://download.csdn.net/detail/qi_w2006/4971395

8. 如果没有积分可以访问我在有道云笔记的分享
http://note.youdao.com/share/?id=33d7766911bb20fb3c99ec07a4082712&type=note


后记
    今天刚好是1月7号,是我阳历的生日,从开始写这个包到发布不至7-8次吧,虽然一共才花了4天不到的时间,版本为1.7,后期上2.0添加非spring支持发布http服务,到时有时间再把设计文档补充下。
^_^!

 

 
分享到:
评论

相关推荐

    java发布http服务工具包

    我们都知道java的web项目可以对外发布webService服务和http服务,通过xfire只可以很方便的发布webService服务,但是java发布http服务一直不方便。通过java原生的servlet发布http服务可以方便其它平台调用,但是编程...

    mysql驱动包mysql-connector-java-5.1.7-bin.jar

    mysql-connector-java-5.1.7-bin.jar

    mysql-connector-java-gpl-5.1.36

    "mysql-connector-java-gpl-5.1.36"是MySQL Connector/J的一个特定版本,发布于GPL(GNU General Public License)许可下,意味着它是开源且可自由分发的。 MySQL Connector/J 5.1.36是针对MySQL 5.1系列数据库...

    ckeditor-java-core-3.5.3

    CKEditor是一款广泛应用于Web开发的开源富文本编辑器,它为用户提供了一种在网页上创建、...通过理解和掌握这些知识点,开发者可以充分利用"ckeditor-java-core-3.5.3"在Java Web应用中构建出强大的富文本编辑功能。

    mysql-connector-java-commercial-5.1.30-bin.jar

    将要使用的是mysql-connector-java-5.1.30-bin-g.jar和mysql-connector-java-5.1.30-bin.jar 配置 在C:\Program Files\Java目录下建立mysqlforjdbc子目录,进入该目录将mysql-connector-java-5.1.30-bin.jar到该...

    mysql-connector-java-5.1.45-bin.jar

    这个"mysql-connector-java-5.1.45-bin.jar"文件是该驱动的一个特定版本,即5.1.45版。这个版本是纯净且正版的,适合于Java开发者在他们的项目中直接集成使用。 在Java编程中,为了连接到MySQL数据库,我们需要一个...

    mysql驱动包 mysql-connector-java-5.1.13-bin.jar

    mysql驱动包 mysql-connector-java-5.1.13-bin.jar 方便快捷获取。。。

    aliyun-java-sdk-dysmsapi-1.0.0

    最新下载的 阿里云短信服务器所需jar包之一,... &lt;artifactId&gt;aliyun-java-sdk-core &lt;version&gt;3.2.2 如此引用即可,更多关于阿里云短信发送相关请参考http://blog.csdn.net/niaoer2010/article/details/78036664

    java图片处理工具类JAR包 java-image-scalingjar

    java图片处理工具类JAR包 java-image-scalingjar

    cors-filter-1.7.jar 和 java-property-utils-1.9.jar

    `java-property-utils-1.9.jar` 可能用于读取自定义的配置文件,例如,你可能希望根据不同的环境设置不同的CORS策略,这时可以将策略写入一个属性文件,然后使用`java-property-utils`来读取并设置过滤器的参数。...

    java-7-openjdk-amd64.tar.gz

    Oracle的项目发布经理Joe Darcy在OSCON 2011上对两者关系的介绍也证实了OpenJDK 7和Oracle JDK 7在程序上是非常接近的,两者共用了大量相同的代码(如下图,注意图中提示了两者共同代码的占比要远高于图形上看到的...

    aliyun-java-sdk-core包和alicom-dysms-api包

    SDK工具包中一共包含了2个类库,一个aliyun-java-sdk-core包,另外一个是alicom-dysms-api包

    eclipse-java-indigo-SR2-win32

    "eclipse-java-indigo-SR2-win32" 版本是针对Windows 32位系统的Eclipse IDE的一个特定构建,它属于Eclipse Indigo Service Release 2(SR2)。Indigo是Eclipse的第3.7版本,发布于2011年,它带来了许多新特性和改进...

    mysql链接数据库jar驱动包(mysql-connector-java-5.0.4-bin.jar)

    用于连接mysql数据库. mysql-connector-java-5.0.4-bin.jar

    mysql-connector-java-5.1.30-bin.jar

    mysql-connector-java-5.1.30-bin.jar 最新的mysql jdbc

    java解压rar 包含java-unrar-0.3.jar

    `java-unrar-0.3.jar`是一个库,它允许Java开发者处理RAR文件,无需依赖外部命令行工具,如WinRAR。这个库为Java提供了一个简单易用的API,可以方便地实现RAR文件的解压功能。 `java-unrar-0.3.jar`库是由Andrei ...

    fastdfs-client-java-1.27-SNAPSHOT.jar

    fastdfs在java中集成需要用的jar包1.27-SNAPSHOT版本。

    mysql-connector-java-5.1.31-bin

    mysql-connector-java-5.1.31-bin

    java基础教程----精华版

    - Java内置对多线程的支持,通过Thread类或实现Runnable接口创建线程。 - 线程同步机制,如synchronized关键字,Lock接口,避免多线程环境下数据不一致问题。 8. **网络编程**: - 使用Socket编程进行客户端/...

    mysql-connector-java-5.1.40.zip和mysql-connector-java-5.1.10.jar

    总结,`mysql-connector-java-5.1.40.zip`和`mysql-connector-java-5.1.10.jar`是MySQL与Java应用交互的关键组件,它们通过JDBC实现了数据存取功能。了解和正确使用这些文件,可以帮助Java开发者更高效地与MySQL...

Global site tag (gtag.js) - Google Analytics