wildfly php,Wildfly9下resteasy的简单应用实例

通过下面的实例可以看出,resteasy 3.0.11之后创建一个restful应用是多么的简单!

环境准备

本案例用到的工具及其版本号如下:

wildfly 9.0.2,其中默认自带的resteasy版本是3.0.11,本案例没有升级resteasy的版本。

eclipse Mars,安装了JBoss Tools 4.0。

创建项目

在Eclipse中通过new->Web->Dynamic Web Project创建新项目helloRest:

c5007c99461202d3d46114ebdb0518d1.png

注意在最后一步要选中创建web.xml文件:

0b0663a8c4ae93c254f6d10e31148c3e.png

编写web.xml

打开创建的文件,在WebContent/WEB-INF目录找到web.xml文件。由于wildfly9已经紧密集成了resteasy,不再需要在web.xml中配置任何内容了!

如果熟悉JSF,Servlet技术,会记得一般需要在web.xml中配置哪个servlet负责响应和分发用户的请求,比如以前版本的wildfly要使用resteasy的配置选项如下:

Resteasy

org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher

javax.ws.rs.Application

sample.HelloWorldApplication

Resteasy

/*

但是请记住,wildfly 9之后,再使用resteasy就不需要这个选项了,道理参见下面代码的@ApplicationPath注解。

编写服务器端接口

首先需要编写一个程序的入口,即编写一个带有@ApplicationPath注解的类,这个类是Application的子类,通过ApplicationPath注解告诉wildfly整个应用程序的入口url是什么。目前这个类可以是空的。

注意,Application类的全称是javax.ws.rs.core.Application,不要选错了。

516df8ff9e9cf9619108ed943a5e9b0d.png

package helloRest;

import javax.ws.rs.ApplicationPath;

import javax.ws.rs.core.Application;

@ApplicationPath("/rest")

public class MyApplication extends Application

{

}

接着定义一个服务接口如下:

package helloRest;

import javax.ws.rs.GET;

import javax.ws.rs.Path;

import javax.ws.rs.QueryParam;

@Path("hello")

public interface HelloService

{

@GET

@Path("sayHello")

public String sayHello(@QueryParam("name") String name);

}

编写一个HelloService的实现类如下:

package helloRest;

public class Hello implements HelloService

{

@Override

public String sayHello(String name)

{

// TODO Auto-generated method stub

return "hello " + name ;

}

}

测试一下

首先build project(不要忘记了这一步,尤其是关闭了Build Automatically),然后在servers view中添加wildfly9(如果已经添加了wildfly9跳过此步):

ae34488fa00c0501a7dfb15363492c00.png

将restHello部署到wildfly:

525c5d675f1163325ab2d616f545e9f1.png

然后启动wildfly,打开浏览器访问http://localhost:8080/restHello/rest/hello/sayHello?name=subaochen,见证奇迹的时刻:

56dd2b231c60c9ca702684550ba5c7d1.png

尝试改变?name=后面的字符串看看效果如何?

进一步的解释

下面我们看看奇迹是如何发生的。restHello:我们的restful应用的包名,或者说项目名

rest:这就是@ApplicationPath("/rest")的作用,ApplicationPath定义了@Path注解中的目录的起始路径。也就是说,如果@Path("/test"),那么真实的路径应该是rest/test。@ApplicationPath的作用类似于Apache配置文件中的DocumentRoot。要注意的是,最终的路径是三个部分组成的:项目名+ApplicationPath+Path。

hello:就是@Path("hello")或者@Path("/hello")中定义的。一般的,每一个模块都会使用一个@Path以决定这个模块的起始路径。要注意两点:第一,@Path注解的路径是相对的,用/开头没有必要,实际上会被忽略掉。第二,在类或者接口上定义的@Path指定了该模块的起始路径(相对于ApplicationPath),在方法上定义的@Path是相对于包含这个方法的类或者接口的Path的。

sayHello:

?name=subaochen

如果我们想把项目放到根目录,也就是希望用http://localhost:8080/rest/hello/sayHello?name=subaochen 访问,只需要在WEB-INF放一个jboss-web.xml文件即可:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.jboss.com/xml/ns/javaee

http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">

/

方法的@Path的几种变化

@Path("sayHello")

@Path("{name}")

方法参数中的注解

@QueryParam

@PathParam

默认响应方法

我们可以定义一个只有@GET注解的方法,表示默认的响应方法。也就是说,如果访问http://localhost:8080/rest/hello/时(注意,已经在 jboss-web.xml中将context-root设置为/),由saySomething这个方法来响应请求。

package helloRest;

import javax.ws.rs.GET;

import javax.ws.rs.Path;

import javax.ws.rs.QueryParam;

@Path("/hello")

public interface HelloService

{

@GET

public String saySomething();

@GET

@Path("sayHello")

public String sayHello(@QueryParam("name") String name);

}

基于Maven的项目生成和部署

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值