由于项目上需要写一个简单的评价系统,像银行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. Flipping Parentheses(CSU1542 线段树)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1542 赛后发现这套题是2014东京区域赛的题目,看了排名才发现自己有多low  = =! 题目大意 ...

  2. C#图解教程读书笔记(第15章 委托)

    委托是C#的一个很重要的知识点. 1.什么是委托 委托在我认为,就是一系列格式相同的方法列表,可能就是定义的名称不一致,参数.返回值等都是一样的. 2.如何声明委托 delegate void MyF ...

  3. 图片转换成base64_encode的链接代码示例

    <?php $file = "example.jpg"; $type = getimagesize( $file ); //取得图片的大小,类型等 $file_content ...

  4. 递归模式学习(recursion)

    所谓递归,就是方法调用自身.对于递归模式来说,要有一个出口来让递归结束,避免出现死循环. 实例全排列: 从n中拿出m个元素进行排列,当n==m时为全排列. 利用递归就是:把n个元素轮流放入第一个位置, ...

  5. Linux下的TUN/TAP编程

    linux下实现虚拟网卡我们在使用VMWARE的虚拟化软件时经常会发现它们能都能虚拟出一个网卡,貌似很神奇的技术,其实在Linux下很简单,有两种虚拟设 备,TUN时点对点的设备,tap表示以太网设备 ...

  6. Ehcache(06)——监听器

    http://haohaoxuexi.iteye.com/blog/2119353 监听器 Ehcache中监听器有两种,监听CacheManager的CacheManagerEventListene ...

  7. RFID开发利器 proxmark3

    Proxmark3 介绍 Proxmark3是由Jonathan Westhues设计并且开发的开源硬件,其主要用RFID的嗅探.读取以及克隆等的操作.其官方网站为:Jonathan Westhues ...

  8. 跨浏览器实现盒阴影(box-shadow)效果

    现在流行的设计里总是使用了大量的阴影,看看Vista.win7里夸张的box阴影,mac里的阴影比比皆是.CSS3的box-shadow属性可以让我们轻松实现图层阴影效果,使我们可以不再总是依赖于使用 ...

  9. EXchange2010配置

    DAG配置: 组织配置:如果见证服务器是DC不是exchange服务器,那么需要在AD用户和计算机里面,将exchange trusted subsystem 添加到 DC的本地管理员组(/built ...

  10. python批量GBK转UTF-8

    有时候编码问题在导入工程的时候很烦,所以还是让世界都是"UTF-8"吧. 抄来一段代码: #!/usr/env python # -*- coding: utf8 -*- impo ...