一个实例演示jersey框架实现RESTful风格的Webservice,并发布到Tomcat,以及客户端调用示范
来源:互联网 发布:linux 保存退出命令 编辑:程序博客网 时间:2024/05/21 08:03
通过一个实例演示jersey框架实现RESTful风格的Webservice,并发布到Tomcat,以及客户端调用示范
1.环境和工具
操作系统:windows 7操作系统
IDE:Eclipse Java EE IDE
JDK版本:jdk1.6.0_30
Web容器:Tomcat 7.0.68
2.工具安装
Eclipse Java EE 和Tomcat 7.0.68都是开源项目,且免安装,所以可以从官网下载解压,JDK也从官网下载,但是需要安装。
三个基础软件安装完成后,需要对JDK和Tomcat进行环境变量的设置
1.新建变量名CATALINA_HOME,设置为Tomcat的解压后路径,如C:\apache-tomcat-7.0.68
2.新建变量名JAVA_HOME,设置为JDK的安装后路径,如C:\Program Files\Java\jdk1.6.0_30,并将JAVA_HOME加入变量Path中
至此,环境准备完成。
3.新建一个Dynamic Web Project工程
工程目录下
以下是UserInfo.java源码:
package com.luo.restfullws;
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;
import org.apache.log4j.Logger;
// @Path表示类资源的相对URI路径
@Path("UserInfoService")
public class UserInfo {
static Logger logger = Logger.getLogger(UserInfo.class);
// @GET表示userName方法处理HTTP GET请求
@GET
// @Path表示方法资源在类中的相对URI路径
@Path("/name/{name}")
// 方法资源的返回类型
@Produces(MediaType.TEXT_XML)
// @PathParam表示和@Path对应的方法参数
public String userName(@PathParam("name") String name) {
logger.info("userName Param:" + name);
return "<User>" + "<Name>" + name + "</Name>" + "</User>";
}
@GET
@Path("/age/{age}")
@Produces(MediaType.TEXT_XML)
public String userAge(@PathParam("age") int age) {
return "<User>" + "<Age>" + age + "</Age>" + "</User>";
}
}
因为源码中使用了log4j日志,所以必须增加一个log4j的配置文件
由于是web项目,且使用了框架,需要指定框架支持者即jersey,web.xml配置如下
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>RESTfulWS</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.luo.restfullws</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
log4j.properties如下,定义了三个输出方式,分别是标准输出,文件输出,和网络日志输出
log4j.rootLogger=INFO, stdout,SYSLOG,logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.SyslogHost=127.0.0.1
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=[%d{ABSOLUTE},%c{1}] %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=D\:/logs/fdoAssign.log
log4j.appender.logfile.MaxFileSize=10240KB
log4j.appender.logfile.MaxBackupIndex=5
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
通过右键将工程导出为war包RESTfulWS.war
将RESTfulWS.war拷贝到Tomcat的webapps路径下C:\apache-tomcat-7.0.68\webapps,完成部署动作(部署很简单)
由于该war中需要日志服务,需要将log4j-1.2.16.jar复制到Tomcat的jar库目录下C:\apache-tomcat-7.0.68\lib
对于多个项目需要部署到Tomcat时,各项目会用到同样的jar,所以可以将公共jar都复制到Tomcat的jar库目录下
这样为每个项目打包时的war就不需要包含这些jar了,文件也就小很多
打包时可以将工程目录WebContent/WEB-INF/lib下的jar都删除再打包成war包
剩下的就是要启动Tomcat,在Tomcat路径下C:\apache-tomcat-7.0.68\bin,执行批处理startup.bat启动Tomcat,部署的war包随之启动
服务启动后,可以通过浏览器键入URL验证服务是否正常
比如输入地址http://localhost:8080/RESTfulWS/rest/UserInfoService/name/abc
在浏览器上将显示一串服务端返回的字符串,说明服务正常
下面新建一个普通工程,从客户端来访问RESTful服务
jersey相关的jar该加的都加上,最好全加上,就是这么糙
源码如下:
package webservice;
import java.util.Date;
import javax.ws.rs.core.MediaType;
import org.apache.log4j.Logger;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
public class UserInfoClient {
// http://localhost:8080/RESTfulWS/rest/UserInfoService/name/
static Logger logger = Logger.getLogger(UserInfoClient.class);
public static final String BASE_URI = "http://localhost:8080/RESTfulWS";
public static final String PATH_NAME = "/UserInfoService/name/";
public static final String PATH_AGE = "/UserInfoService/age/";
public static void main(String[] args) {
int count = 1 * 100;
int i = 0;
String name = "abc";
int age = 18;
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource resource = client.resource(BASE_URI);
logger.info(new Date());
while (i++ < count) {
WebResource nameResource = resource.path("rest").path(
PATH_NAME + name);
logger.info("Client Response " + getClientResponse(nameResource));
getResponse(nameResource);
logger.info("Response:" + getResponse(nameResource));
WebResource ageResource = resource.path("rest")
.path(PATH_AGE + age);
logger.info("Client Response " + getClientResponse(ageResource));
getResponse(ageResource);
logger.info("Response:" + getResponse(ageResource));
}
logger.info(new Date());
}
/**
* 针对客户端的请求, 服务端给出的一个应答状态
*
* @param service
* @return
*/
private static String getClientResponse(WebResource resource) {
return resource.accept(MediaType.TEXT_XML).get(ClientResponse.class)
.toString();
}
/**
* 针对客户端的请求, 服务端给出XML格式的返回
*
* @param service
* @return
*/
private static String getResponse(WebResource resource) {
return resource.accept(MediaType.TEXT_XML).get(String.class);
}
}
运行客户端main方法,打印服务端返回的字符串,演示完成。
演示过程中碰到的幺蛾子
1.浏览器输入http://localhost:8080登陆Tomcat时,发现没有权限,进入不了管理页面
按照提示,找到用户权限配置文件,在指定位置<tomcat-users>和</tomcat-users>中间增加如下两行配置即可,用户权限配置文件路径为C:\apache-tomcat-7.0.68\conf
<role rolename="manager-gui"/>
<user username="tomcat" password="123" roles="manager-gui"/>
该方法适用于版本为Tomcat 7.0.68
2.增加log4j日志服务后,访问服务失败
将log4j-1.2.16.jar复制到Tomcat的jar库目录下C:\apache-tomcat-7.0.68\lib
重启服务后,访问即正常
3.浏览器输入http://localhost:8080登陆Tomcat时,发现不能访问
需要修改环境变量,将环境变量名CATALINA_HOME,设置为Tomcat的解压后路径,如C:\apache-tomcat-7.0.68
4.server.xml配置对Tomcat运行影响
server.xml中<Host>标签下的<Context>中的docBase指定了上下文
docBase="C:\apache-tomcat-7.0.68\wtpwebapps\RESTfulWS" path="/RESTfulWS"
这个路径需要指定为一个已部署的项目,项目中包含log4j日志配置
新增一个项目时,只需要将项目复制到webapps路径下即可
如果不这样做,发现Tomcat会启动失败
- 一个实例演示jersey框架实现RESTful风格的Webservice,并发布到Tomcat,以及客户端调用示范
- webservice-restful风格: Jersey框架一
- 通过Jersey客户端API调用RestFul风格的Web服务
- 通过Jersey客户端API调用RestFul风格的Web服务
- 使用Jersey创建RESTful风格的WebService
- Spring整合CXF,发布RSETful 风格WebService--编写客户端代码,调用RESTful WebService
- Jersey 极致简单的Restful WebService实现
- 基于jersey搭建RESTful风格的WebService接口
- Jersey调用Webservice Restful接口
- Jersey RESTful WebService框架简介
- tomcat发布基于jersey的WebService
- 基于CXF 发布 restful风格的webservice
- Android客户端访问使用Jersey开发RESTful的webservice服务器
- sping+Jersey实现RESTful webservice
- ubuntu 下面通过maven搭建restful风格的jersey框架
- Jersey框架Restful实例(服务端)
- Jersey构建RESTful服务4--通过jersey-client客户端调用Jersey的Web服务模拟CURD
- Spring + Jersey构建发布Restful WebService
- msm8916 dt选用规则
- 文章标题
- APP适配IOS8,iPhone6和Plus截图简要说明
- 0025-crudDatagrid
- QT 窗口大小的设计及显示常用函数
- 一个实例演示jersey框架实现RESTful风格的Webservice,并发布到Tomcat,以及客户端调用示范
- POJ_P2774 Long Long Message/Codevs_P3160 最长公共子串(后缀数组)
- iOS Swift和OC混编
- RelativeLayout,LinearLayout,FrameLayout的各个属性
- CodeForces 319B-Psychos in a Line(单调队列)
- 细述Telnet与SSH两大协议的区别
- Date、Calender、DateFormat
- 机器视觉中工业相机常用参数
- eclipse使用SVN插件 不显示提交人 不显示修改后的*号 解决方法