当前位置: 首页 > article >正文

分布式系统开发微服务架构,基于JavaSE部署环境提供REST微服务

常用技术

如何构建微服务是一个大话题,本节不会涉及细节,后面章节将会详细讲解。

在单体架构中,项目经常会打包成WAR文件部署在Tomcat或者Jetty等Servlet容器中。这种部署形式被称为基于Servlet的部署(Servlet-based Deployment)。这种部署环境也是使用最广泛的。

有时我们会有这样的需求,当Web应用不是很复杂,对应用性能要求不是很高时,需要将HTTP Server内嵌在我们的Java程序中,只要运行Java程序,相应的HTTP Server也就跟着启动了,而且启动速度很快。这就是本节所介绍的基于Java SE部署环境(Java SE Deployment)来提供REST微服务。

 Jetty HTTP Server

Jetty是流行的Servlet容器和HTTP服务器。在此我们不深究Jetty作为Servlet容器的能力(尽管在我们的测试和实例中都使用它),因为作为基于Servlet部署模型它并没有什么特别,我们在这里只重点描述如何使用Jetty的HTTP服务器。

Jersey和Jetty HTTP Server用法如下。

URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build();
ResourceConfig config = new ResourceConfig(MyResource.class);
Server server = JettyHttpContainerFactory.createServer(baseUri, config);
要加入容器扩展模块依赖。
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jetty-http</artifactId>
<version>2.30</version></dependency>

Jetty HTTP容器不支持部署在除了根路径是(“/”)的上下文路径。非根路径的上下文路径在部署中是被忽略的。

构建REST程序

构建一个实体类MyBean.java。

@XmlRootElement
public class MyBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

构建资源类MyResource.java,分别向外暴露各种类型资源,包括文本、XML、JSON格式。

@Path("myresource")
public class MyResource {
/**
* 方法处理HTTP GET请求。返回的对象以“text/plain”媒体类型给客户端
*
* @return String 以 text/plain 形式响应
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
return "Got it!";
}
/**
* 方法处理HTTP GET请求。返回的对象以“application/xml”媒体类型给客户端
** @return MyPojo以application/xml形式响应
*/
@GET
@Path("pojoxml")
@Produces(MediaType.APPLICATION_XML)
public MyBean getPojoXml() {
MyBean pojo = new MyBean();
pojo.setName("waylau.com");
pojo.setAge(28);
return pojo;
}
/**
* 方法处理HTTP GET请求。返回的对象以“application/json”媒体类型给客户端
*
* @return MyPojo 以 application/json 形式响应
*/
@GET
@Path("pojojson")
@Produces(MediaType.APPLICATION_JSON)
public MyBean getPojoJson() {
MyBean pojo = new MyBean();
pojo.setName("waylau.com");
pojo.setAge(28);
return pojo;
}
}

程序的应用配置为RestApplication.java,该配置说明了要扫描的资源类所在的包路径com.waylau.rest.resource,以及支持JSON转换MultiPartFeature。

public class RestApplication extends ResourceConfig {
public RestApplication() {
// 资源类所在的包路径
packages("com.waylau.rest.resource");
// 注册MultiPart
register(MultiPartFeature.class);
}
}

主应用程序入口类App.java。

public class App {
// HTTP server所要监听的uri
public static final String BASE_URI = "http://127.0.0.1:8080/";
/**
* Main method.
*
* @param args* @throws IOException
*/
public static void main(String[] args) throws IOException {
JettyHttpContainerFactory.createServer(URI.create(BASE_URI),
new RestApplication());
}
}

 运行

该程序编译后,会生成一个可执行的javase-rest-1.0.0.jar文件,用java -jar执行即可。

java -jar javase-rest-1.0.0.jar

该程序提供了如下API。

·http://127.0.0.1:8080/myresource。
·http://127.0.0.1:8080/myresource/pojoxml。
·http://127.0.0.1:8080/myresource/pojojson。

本节示例可以在javase-rest项目下找到。

http://www.lryc.cn/news/2413489.html

相关文章:

  • 分频器的设计
  • 华硕固件默认ip_斐讯K2/K3路由器掉线严重 刷华硕固件手把手教程
  • 不下载英语包 Vista照样可以玩梦幻桌面
  • 【2024最新高清版】408计算机组成原理考试大纲
  • Career Path(职业前景人生规划)的几点见解
  • 考研阅读唐迟视频总结
  • 微软数据库之微软自带数据库分析
  • 关于如何下载E都市三维地图的教程
  • 树莓派上FFMPEG/VLC播放海康网络摄像仪视频
  • 【正点原子FPGA连载】 第二十六章 高速AD/DA实验-摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
  • 解决 Linux 下mplayer不能显示中文字幕的 问题 !
  • MyEclipse6.0注册码生成类(Java)
  • 微软官方720P、1080P高清测试视频短片下载
  • 函数使得索引列失效
  • 数据链路层:广域网的数据链路层协议
  • 信号正常吗?
  • route print命令详解
  • Kindeditor使用方法
  • 优化算法改进的三个定性分析实验:收敛行为分析,种群多样性分析和探索开发分析
  • 自制 QQ游戏 连连看 外挂 ~~
  • VMware虚拟机win7安装教程
  • 编码器的使用教程与测速原理
  • 捷克论坛新ip_网络文学,文化出海的新路径
  • 找不到msvcr100.dll如何解决,总结5种有效的方法
  • 六个免费的虚拟主机管理系统
  • 向日葵深度linux,完美使用向日葵远程软件
  • 介绍一个不错的免费国外php空间
  • 表白墙网站手把手搭建(网站搭建的详细教程+保姆级解答)
  • python lable文本换行_Python3 Tkinter基础 Label 显示的文字换行
  • oj大大大大维1000: A+B Problem