由于项目上需要写一个简单的评价系统,像银行MM前面的那种非常满意、满意、不满意那种,结合一个安卓的APP一起使用。由于使用3G网页通讯,个人认为http这种方式更合适。曾经听在Delphi鸟窝群的白雪公猪大神讲过,我们这种情况下的APP应用在移动网络下使用长连接通讯不是很合适,一方面是稳定性,另一方面是流量。所以决定写一个WebService,给app提供服务。本文Eclipse+Tomcat+ 以下菜鸟见解。

一、技术选型:刚学的java,所以百度了一通后,发现网上有很多写WebService的,都不错。常见的有:

  1. CXF:Apache的开源项目
  2. Axis2:Apcahe的开源项目
  3. JWS
  4. xFire
  5. Jersey

以上等等,还有其他,不列举,当然JAVA本身也有开发WebService的类,但有现成的开源框架,就没必要自己造车轮了。由于最近流行RESTFUL,所以找了一下支持的框架。网上有文章说Axis2,Jersey支持,所以去找了这方面的资料。当时不知道CXF为何物,所以从Apcahe大神的东西开始,最后发现Axis2已很久没更新了,所以没用。转向jersey,从网上的文章上看代码很简洁(菜鸟易用),资料还不少,所以就选它了,没更深入的原因,技术可行性分析不是我辈做的事。

二、数据库连接,看了不少数据库连接池,我直接选了c3p0,这块不了解,略。

三、准备工作,先到相关的网站下开相应的库。

  1. Jersey:https://jersey.java.net/,本文使用版本为2.8
  2. 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。这是一个下午的调试换回来的血的教训。

四、编码

  1. 新建项目 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完成创建。
  2. 将下载下来的Jersey的所有jar入到项目的WebContent\WEB-INF\lib目录下。当然也可以入在公用的目录下,不过这招俺不会。暂时不细谈。
  3. 新建包,看很多人都建一个com的包,我也学着建了一个,为什么命令为com,不明白?可能是公用common的意思吧。在com中再建一个rest的包。rest包中建一个text的包。以上是习惯。不建也可以。不建的话一会改下web.xml的配置就行。
  4. 在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;
    }
    }
  5. 修改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>
  6. 运行,在IE中打开http://127.0.0.1:8080/text/hello,如查能看到hello world,说明你成功了。你可以试下其他的两个带参数的接口。
  7. 布署到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的更多相关文章

  1. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  2. 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)

    你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...

  3. 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)

    硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...

  4. 从零开始学 Java - 我放弃了 .NET ?

    这不是一篇引起战争的文章 毫无疑问,我之前是一名在微软温暖怀抱下干了近三年的 .NET 开发者,为什么要牛(sha)X一样去搞 Java 呢?因为我喜欢 iOS 阿!哈哈,开个玩笑.其实,开始学 Ja ...

  5. 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)

    从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...

  6. 从零开始学 Java - 利用 Nginx 负载均衡实现 Web 服务器更新不影响访问

    还记得那些美妙的夜晚吗 你洗洗打算看一个小电影就睡了,这个时候突然想起来今天晚上是服务器更新的日子,你要在凌晨时分去把最新的代码更新到服务器,以保证明天大家一觉醒来打开网站,发现昨天的 Bug 都不见 ...

  7. 从零开始学 Java - log4j 项目中的详细配置

    你还会用笔来写字么 我是不怎么会了,有时候老是拿起笔之后不知道这个字怎么写,这时候就会拿起手机去打出来:有时候还会写出来这个字之后越看越不像,这时候就开始怀疑自己的能力了:有时候写出来了一大堆字之后, ...

  8. 从零开始学 Java - Spring 支持 CORS 请求踩的坑

    谁没掉进过几个大坑 记得好久之前,总能时不时在某个地方看到一些标语,往往都是上面一个伟人的头像,然后不管是不是他说的话,下面总是有看起来很政治正确且没卵用的屁话,我活到目前为止,最令我笑的肚子痛得是下 ...

  9. 从零开始学 Java - Spring MVC 实现跨域资源 CORS 请求

    论职业的重要性 问:为什么所有家长都希望自己的孩子成为公务员? 答:体面.有权.有钱又悠闲. 问:为什么所有家长都希望自己的孩子成为律师或医生? 答:体面.有钱.有技能. 问:为什么所有家长都不怎么知 ...

随机推荐

  1. LINQ标准查询操作符(四) —AsEnumerable,Cast,OfType,ToArray,ToDictionary,ToList,ToLookup,First,Last,ElementAt

    十.转换操作符 转换操作符是用来实现将输入对象的类型转变为序列的功能.名称以“As”开头的转换方法可更改源集合的静态类型但不枚举(延迟加载)此源集合.名称以“To”开头的方法可枚举(即时加载)源集合并 ...

  2. datareader几种用法总结

    1.本人常用: if (reader["字段名"] != DBNull.Value) { userRegisterInfo.OrgCode = reader["字段名&q ...

  3. HDU4289Control(最大流)

    看了这道题,然后重新开始练习自己的刚敲不久的网络流,发现还是难以一遍敲得完整啊,,,,, 调了...遍,改了...遍,测了...遍,交了,,,遍,总算是A了,,不简单啊 然后试着用了其他两种算法EK和 ...

  4. .net 学习资源(转)

      名称:快速入门地址:http://chs.gotdotnet.com/quickstart/描述:本站点是微软.NET技术的快速入门网站,我们不必再安装.NET Framework中的快速入门示例 ...

  5. apt-get &dpkg

    apt-get是ubuntu常用的软件安装工具.他可以很easy的从互联网上下载软件安装包,并实现安装. apt-get比较常用的命令如下: apt-get install packagename   ...

  6. 获取和设置localStorage

    东钿金融服务平台 用户第一次访问页面出现,引导步骤,起初一直使用cookie,但是cookie一直不稳定 今天老大说改用localStorage 于是乎百度,查了一篇博客 http://www.cnb ...

  7. A*算法为什么是最优的

    图搜索的A*算法有两种情况: hn是可采纳的,但是不是满足一致性 如果满足一致性,A*算法的实现要简单一些:即使不检查closed节点的状态重复,也能得到最优的结果 下面是证明最优性的一些关键点: 1 ...

  8. UI:字典的两种取值的区别

    字典的两种取值的区别 (objectForKey: 和 valueForKey )参考 一般来说 key 可以是任意字符串组合,如果 key 不是以 @ 符号开头,这时候 valueForKey: 等 ...

  9. [转] [Visual Studio 2012] 找回 建立單元測試 選單

    原文链接:http://www.dotblogs.com.tw/yc421206/archive/2013/03/08/95920.aspx Step1.建立選單 在VS2012選單,Tools→Cu ...

  10. shell切换用户执行后面语句 su与su -的区别

    关于su和su -的区别,切换用户是可以使用su tom或者su - tom来实现,但是两者有区别,su只是切换身份,但shell环境仍然是原用户的shell,su -是连用户的shell环境一起切换 ...