前言
做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的web项目可以对外发布webService服务和http服务,通过xfire只可以很方便的发布webService服务,但是java发布http服务一直不方便。通过java原生的servlet发布http服务可以方便其它平台调用,但是编程...
5.6.20 最新JDBC mysql-connector-java-5.1.32-bin.jar
mysql-connector-java-5.1.42-bin.jar 官网下载的驱动
mysql驱动包 mysql-connector-java-5.1.13-bin.jar 方便快捷获取。。。
"mysql-connector-java-5.1.15-bin.jar"是这个驱动程序的一个特定版本,版本号为5.1.15。 在Java编程环境中,当你需要连接到MySQL数据库时,你需要在类路径中包含这个JAR文件。JDBC驱动程序主要分为四种类型:Type ...
java图片处理工具类JAR包 java-image-scalingjar
使用`mysql-connector-java-5.1.22-bin.jar`时,首先需要将其添加到项目的类路径中,无论是传统的Java应用、Java EE应用服务器,还是现代的Maven或Gradle构建系统,都可以通过配置相应的依赖来引入这个库。...
"eclipse_java_2020-03安装包.7z" 和 "eclipse-java-2020-03-R-win32-x86_64-Windows安装包.zip" 都是Eclipse针对Java开发者的2020年3月版本的安装文件,适用于Windows 64位操作系统。这两个文件可能包含了不同的...
Java-WebSocket jar包,封装WebSocket实现。
mysql-connector-java-5.1.30-bin.jar 最新的mysql jdbc
mysql 的jdbc 驱动。mysql-connector-java-5.1.38-bin.jar
配置tomcat,支持js跨域访问用的的jar包 与 cors-filter-1.8.jar 一起用
jdbc的驱动jar包,有需要的童鞋自取。
- `java-1.7.0-openjdk-devel-1.7.0.6-2.3.2.fc16.1.x86_64.rpm`:这是一个开发包,包含编译器、调试工具和其他开发所需的组件,如 Javadoc 和 JUnit,使得开发者可以构建和测试 Java 应用程序。 4. **Fedora 16**...
mysql-connector-java-5.1.31-bin
java-client-3.1.0.jar
fastdfs在java中集成需要用的jar包1.27-SNAPSHOT版本。
java-unrar-0.3.jar java写的用来解压rar zip文件的工具类 无需安装解压程序 兼容windows、linux两大系统
mysql 数据库 JDBC驱动包 mysql-connector-java-5.1.7-bin.jar
- Java内置对多线程的支持,通过Thread类或实现Runnable接口创建线程。 - 线程同步机制,如synchronized关键字,Lock接口,避免多线程环境下数据不一致问题。 8. **网络编程**: - 使用Socket编程进行客户端/...