从零开始学JAVA(06)-WebService_Jersey_Restful
由于项目上需要写一个简单的评价系统,像银行MM前面的那种非常满意、满意、不满意那种,结合一个安卓的APP一起使用。由于使用3G网页通讯,个人认为http这种方式更合适。曾经听在Delphi鸟窝群的白雪公猪大神讲过,我们这种情况下的APP应用在移动网络下使用长连接通讯不是很合适,一方面是稳定性,另一方面是流量。所以决定写一个WebService,给app提供服务。本文Eclipse+Tomcat+ 以下菜鸟见解。
一、技术选型:刚学的java,所以百度了一通后,发现网上有很多写WebService的,都不错。常见的有:
- CXF:Apache的开源项目
- Axis2:Apcahe的开源项目
- JWS
- xFire
- Jersey
以上等等,还有其他,不列举,当然JAVA本身也有开发WebService的类,但有现成的开源框架,就没必要自己造车轮了。由于最近流行RESTFUL,所以找了一下支持的框架。网上有文章说Axis2,Jersey支持,所以去找了这方面的资料。当时不知道CXF为何物,所以从Apcahe大神的东西开始,最后发现Axis2已很久没更新了,所以没用。转向jersey,从网上的文章上看代码很简洁(菜鸟易用),资料还不少,所以就选它了,没更深入的原因,技术可行性分析不是我辈做的事。
二、数据库连接,看了不少数据库连接池,我直接选了c3p0,这块不了解,略。
三、准备工作,先到相关的网站下开相应的库。
- Jersey:https://jersey.java.net/,本文使用版本为2.8
- Tomcat:http://tomcat.apache.org/,本文使用版本为7.0.53,记住不要使用8.0版本,会提示java.io.IOException: java.lang.ClassCastException: Cannot cast org.glassfish.jersey.servlet.init.JerseyServletContainerInitializer to javax.servlet.ServletContainerInitializer。这是一个下午的调试换回来的血的教训。
四、编码
- 新建项目 File-New-Dymanic Web Project,弹出新建窗口,在Project Name写入项目名称,本文使用text,指定好路径。在Dynamic web module version中,选择3.0,对应Tomcat7,如果用Tomcat6,应选2.5,为什么这么选,原则我不懂,这里有个博客有写http://snkcxy.iteye.com/blog/1848279。点两次next来到Web Module窗口,勾上Generate web.xml deployment descriptor,点finish完成创建。
- 将下载下来的Jersey的所有jar入到项目的WebContent\WEB-INF\lib目录下。当然也可以入在公用的目录下,不过这招俺不会。暂时不细谈。
- 新建包,看很多人都建一个com的包,我也学着建了一个,为什么命令为com,不明白?可能是公用common的意思吧。在com中再建一个rest的包。rest包中建一个text的包。以上是习惯。不建也可以。不建的话一会改下web.xml的配置就行。
- 在com.rest.text包中新建一个hello类,先实现一个hello world。代码如下
package com.rest.text; import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; @Path("/hello")
public class hello { @GET
@Produces(MediaType.TEXT_PLAIN)
public String sayHello() {
return "hello world.";
} @GET
@Path("{param}")
@Produces("text/plain;chareset=UTF-8")
public String getParam1(@PathParam("param") String param) {
return "带1个参数: " + param;
} @GET
@Path("{param}/test/{param2}")
@Produces("text/plain;chareset=UTF-8")
public String getParam2(@PathParam("param") String param, @PathParam("param2") String p2) {
return "带2个参数: " + param + " " + p2;
}
} - 修改web.xml,可以看到使用com.rest.text做为参数,把这个包下面的所有类都做为服务使用,当然格式必须像hello类一样编写
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.rest.text</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app> - 运行,在IE中打开http://127.0.0.1:8080/text/hello,如查能看到hello world,说明你成功了。你可以试下其他的两个带参数的接口。
- 布署到Tomcat中,使用Tomcat前记得要配置JAVA的环境变量,如JAVA_HOME或JRE_HOME,每一次设置环意变量是要重启电脑的。回到Eclipse界面,通过File-Export,将项目导出生成text.war文件。将文件直接丢进Tomcat目录下的webapps文件夹中,Tomcat启动时会自动解压并加载程序的。Tomcat直接下载下来的zip包,解压出来就能用,不需要配置任何东西。记住是Tomcat7,用Tomcat8会报错,解决办法不明,菜鸟看不懂英语。
以上,通过jersey框架,很快就能建立一个基于Restful的WebService,代码量少,用法简单。有时候我们希望在WebService启动时做些初始化的工作,但从以上代码中,没发现有初始化的地方可以写代码,也没有main。通过百度与XXOO后,尝试写一个servlet类,学Jersey配置在web.xml中,发现可行。过两天有空,学习后,再写个文章补上。
2014-05-13
by lin
从零开始学JAVA(06)-WebService_Jersey_Restful的更多相关文章
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)
你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)
硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...
- 从零开始学 Java - 我放弃了 .NET ?
这不是一篇引起战争的文章 毫无疑问,我之前是一名在微软温暖怀抱下干了近三年的 .NET 开发者,为什么要牛(sha)X一样去搞 Java 呢?因为我喜欢 iOS 阿!哈哈,开个玩笑.其实,开始学 Ja ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)
从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...
- 从零开始学 Java - 利用 Nginx 负载均衡实现 Web 服务器更新不影响访问
还记得那些美妙的夜晚吗 你洗洗打算看一个小电影就睡了,这个时候突然想起来今天晚上是服务器更新的日子,你要在凌晨时分去把最新的代码更新到服务器,以保证明天大家一觉醒来打开网站,发现昨天的 Bug 都不见 ...
- 从零开始学 Java - log4j 项目中的详细配置
你还会用笔来写字么 我是不怎么会了,有时候老是拿起笔之后不知道这个字怎么写,这时候就会拿起手机去打出来:有时候还会写出来这个字之后越看越不像,这时候就开始怀疑自己的能力了:有时候写出来了一大堆字之后, ...
- 从零开始学 Java - Spring 支持 CORS 请求踩的坑
谁没掉进过几个大坑 记得好久之前,总能时不时在某个地方看到一些标语,往往都是上面一个伟人的头像,然后不管是不是他说的话,下面总是有看起来很政治正确且没卵用的屁话,我活到目前为止,最令我笑的肚子痛得是下 ...
- 从零开始学 Java - Spring MVC 实现跨域资源 CORS 请求
论职业的重要性 问:为什么所有家长都希望自己的孩子成为公务员? 答:体面.有权.有钱又悠闲. 问:为什么所有家长都希望自己的孩子成为律师或医生? 答:体面.有钱.有技能. 问:为什么所有家长都不怎么知 ...
随机推荐
- DataGrid Column Group (合并表头)
<thead> <tr> <th colspan=">swjg</th> <th colspan=">swbm</ ...
- 用jstack工具分析java程序
最近做项目时遇到了一个问题,我的多个采集线程中,有一个线程经常挂起,线程并没有死掉,但是一直采集不到数据,为了解决这个问题,用到了jstack. 首先查找到java进程的pid,ps -ef|grep ...
- datatable把一个LIst的数据放入两个colum防止窜行的做法
DataColumn objectOne = new DataColumn("objectOne", typeof(object)); dt.Columns.Add(objectO ...
- UVaLive 6698 Sightseeing Bus Drivers (水题,贪心)
题意:n个工人,有n件工作a,n件工作b,每个工人干一件a和一件b,a[i] ,b[i]代表工作时间,如果a[i]+b[j]>t,则老板要额外付钱a[i]+b[j]-t;现在要求老板付钱最少: ...
- CString的GetBuffer用法,GetBuffer本质,GetBuffer常见问题解决方法
一.函数原型 CString::GetBuffer LPTSTR GetBuffer( int nMinBufLength ); throw( CMemoryException ); Return V ...
- 粗解Xcode 5新特性: Asset Catalogs
原文:http://schlu.org/2013/10/01/Xcode-Asset-Catalogs.html 基础知识 在今年的WWDC大会上苹果介绍了Asset Catalogs.Asset C ...
- Js中获取frames中的元素
var oCombo = window.parent.frames["frmresourcetype"].document.getElementById('cmbType') ; ...
- opencv直方图均衡化
#include <iostream> #include "highgui.h" #include "cv.h" #include "cx ...
- CentOS6 下Vim安装和配置
1.系统只安装了vim-minimal,执行以下命令安装另外两个组件 yum install vim-common yum install vim-enhanced 2.安装ctags yum ins ...
- 妙用缓存调用链实现JS方法的重载
来自于我的博客http://sweets.cf/,转载注明出处 1.什么是方法重载 方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数. 简而言之就是:方法重载就 ...