从零开始学JAVA(06)-WebService_Jersey_Restful


由于项目上需要写一个简单的评价系统,像银行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。代码如下
    从零开始学JAVA(06)-WebService_Jersey_Restful
    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;
        }    
    }
    从零开始学JAVA(06)-WebService_Jersey_Restful
  5. 修改web.xml,可以看到使用com.rest.text做为参数,把这个包下面的所有类都做为服务使用,当然格式必须像hello类一样编写
    从零开始学JAVA(06)-WebService_Jersey_Restful
    <?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>
    从零开始学JAVA(06)-WebService_Jersey_Restful
  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,布布扣,bubuko.com

从零开始学JAVA(06)-WebService_Jersey_Restful

上一篇:Javascript Image Slider 插件注册机


下一篇:react脚手架抽离webpack报错解决