1.建一个maven web项目

新建一个maven项目,next,第一个框不要勾选

选择maven-archetype-webapp,建一个web项目

键入项目组织id与项目id

一般此时搭建的只是最基本的骨架,还缺了很多东西,我们可以自己按需求去增加。

右键项目,build path,编辑jre,选择默认

web项目的基本构造就出来了

再新建目录,在main和test下面新建resources,然后再build path里的source添加关联

最后再增加服务器jboss的包,整个web项目框架就基本没有报错的搭建起来了

2.最基本的讲完了,现在开始做一个resteasy的简单实例。

2.1首先,配置pom.xml,为项目添加下载resteasy的jar,下面给出jar的配置版本(可去网上查看最新版本)

  <dependencies>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>2.2.1.GA</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
</dependencies>

lombok是一个用来简化代码的工具,后面给出的代码有用到,也可以不用,但要自己写set,get及类的初始化

ps1:此时可能出现的错误,提示缺少依赖包,如下图,解决办法:右键maven---update project 一下,使新的包在本地生效,一般就能解决问题。

ps2:如果update项目后报JavaServer Faces 2.0 requires Dynamic Web Module 2.5 or newer之类的错误,就是你的web版本太旧,此时项目右键properties—project facets—Dynamic Web Module,修改为3.0的版本,一般就能解决。

ps3:如果在面版不能修改,此时,你就需要去底层修改web的版本了,首先更改maven生成的web.xml的web-app标签内容,再去项目底层demo\.settings路径下,修改org.eclipse.wst.common.project.facet.core.xml文件的配置,将其都改为3.0的版本。下面分别为旧的web.xml,新的web.xml,以及.core.xml的配置

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"> </web-app>

2.2配置web.xml,注册resources的模式有三种:

2.2.1手动注册resources的模式

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 1. 使用手动注册resources的模式,必须启动ResteasyBootstrap监听 -->
<!-- 要发布成resteasy服务的资源类 -->
<context-param>
<param-name>resteasy.resources</param-name>
<param-value>com.fengyuan.restapi.UserService</param-value>
</context-param> <!-- 对应<servlet-mapping>的url,必须设置prefix做初始过滤,访问例子:http://localhost:8080/demo/service/userservice/users -->
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/service</param-value>
</context-param> <!-- 启动服务监听器,初始化resteasy核心组件 -->
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener> <!-- url服务请求的分发控制器 -->
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping> </web-app>

2.2.2手动指定Application的模式

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 方法2:不启用手动注册resources的模式和ResteasyBootstrap监听,创建一个类并且继承javax.ws.rs.core.Application,并且手动增加REST服务 --> <!-- 对应<servlet-mapping>的url,必须设置prefix做初始过滤,访问例子:http://localhost:8080/demo/service/userservice/users -->
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/service</param-value>
</context-param>
<!-- url服务请求的分发控制器 -->
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.mk.rest.RestApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping> </web-app>

2.2.3自动Scan的模式,我使用这种模式,启动项目时,会报类似下面的错误

::, ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/demo]] (MSC service thread -) Exception sending context initialized event to listener instance of class org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap: java.lang.RuntimeException: Unable to find a public constructor for class org.jboss.resteasy.core.AsynchronousDispatcher
at org.jboss.resteasy.plugins.server.resourcefactory.POJOResourceFactory.registered(POJOResourceFactory.java:) [resteasy-jaxrs-2.3..Final.jar:]
at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:) [resteasy-jaxrs-2.3..Final.jar:]
at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:) [resteasy-jaxrs-2.3..Final.jar:]
at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:) [resteasy-jaxrs-2.3..Final.jar:]
at org.jboss.resteasy.core.ResourceMethodRegistry.addPerRequestResource(ResourceMethodRegistry.java:) [resteasy-jaxrs-2.3..Final.jar:]
at org.jboss.resteasy.spi.ResteasyDeployment.registration(ResteasyDeployment.java:) [resteasy-jaxrs-2.3..Final.jar:]
at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:) [resteasy-jaxrs-2.3..Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap.contextInitialized(ResteasyBootstrap.java:) [resteasy-jaxrs-2.3..Final.jar:]
at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:) [jbossweb-7.0..Final.jar:]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:) [jbossweb-7.0..Final.jar:]
at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:) [jboss-as-web-7.1..Final.jar:7.1..Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:) [rt.jar:1.7.0_80]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:) [rt.jar:1.7.0_80]
at java.lang.Thread.run(Thread.java:) [rt.jar:1.7.0_80] ::, ERROR [org.apache.catalina.core.StandardContext] (MSC service thread -) Error listenerStart
::, ERROR [org.apache.catalina.core.StandardContext] (MSC service thread -) Context [/demo] startup failed due to previous errors
::, ERROR [org.jboss.msc.service.fail] (MSC service thread -) MSC00001: Failed to start service jboss.web.deployment.default-host./demo: org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./demo: JBAS018040: Failed to start context
at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:) [jboss-msc-1.0..GA.jar:1.0..GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:) [jboss-msc-1.0..GA.jar:1.0..GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:) [rt.jar:1.7.0_80]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:) [rt.jar:1.7.0_80]
at java.lang.Thread.run(Thread.java:) [rt.jar:1.7.0_80] ::, INFO [org.jboss.as.server] (DeploymentScanner-threads - ) JBAS015870: Deploy of deployment "demo.war" was rolled back with failure message {"JBAS014671: Failed services" => {"jboss.web.deployment.default-host./demo" => "org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./demo: JBAS018040: Failed to start context"}}
::, INFO [org.jboss.as.server.deployment] (MSC service thread -) JBAS015877: Stopped deployment demo.war in 59ms
::, INFO [org.jboss.as.controller] (DeploymentScanner-threads - ) JBAS014774: Service status report
JBAS014777: Services which failed to start: service jboss.web.deployment.default-host./demo: org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./demo: JBAS018040: Failed to start context ::, ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - ) {"JBAS014653: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"JBAS014671: Failed services" => {"jboss.web.deployment.default-host./demo" => "org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./demo: JBAS018040: Failed to start context"}}}}

原因不明,下面我的自动扫描配置,希望有大神能指点下

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 方法3: 使用自动Scan的模式,必须启动ResteasyBootstrap监听,报错,原因不明 -->
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param> <!-- 对应<servlet-mapping>的url,必须设置prefix做初始过滤,访问例子:http://localhost:8080/wang/service/userservice/users -->
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/service</param-value>
</context-param> <!-- 启动服务监听器,初始化resteasy核心组件 -->
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener> <!-- url服务请求的分发控制器 -->
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping> </web-app>

2.3下面给出简单的java类

新建一个简单的User类,使用了lombok插件注解(可以简化代码,自动生成set,get等方法),lombok的安装方法自行百度,安装后还要在pxm.xml里配置,见上文

package com.fengyuan.domain;

import lombok.AllArgsConstructor;
import lombok.Data; @Data
@AllArgsConstructor
public class User {
private String name;
private int age;
private String tel;
}

要发布的资源类UserService

package com.fengyuan.restapi;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import com.fengyuan.domain.User; @Path("userservice") // 服务路径
public class UserService {
/**
* 初始化三个用户数据,存入map中,key为用户id,value为用户对象
*/
static Map<Integer, User> userMap = new HashMap<>(); static {
User user1 = new User("Lee", 24, "138***");
userMap.put(1, user1);
User user2 = new User("Cathy", 25, "188***");
userMap.put(2, user2);
User user3 = new User("Aaron", 26, "186***");
userMap.put(3, user3);
} /**
* 获取指定id的用户
*
* @param id
* @return
*/
@GET
@Path("user/{id}") // 具体服务的路径, id是入参
@Produces("application/json") // 返回的格式
public User getById(@PathParam("id") Integer id) {
return (User) userMap.get(id);
} /**
* 以json格式返回所有用户
*
* @return
*/
@GET
@Path("users")
@Produces("application/json")
public List<User> getUsers() {
List<User> userList = new ArrayList<User>();
for (Entry<Integer, User> user : userMap.entrySet()) {
userList.add(user.getValue());
}
return userList;
}
}

测试结果

下面给出Application的模式的代码

package com.mk.rest;

import java.util.HashSet;
import java.util.Set;
import com.fengyuan.restapi.UserService; public class RestApplication extends javax.ws.rs.core.Application{ private Set<Object> singletons = new HashSet<Object>();
/*在这里增加资源类*/
public RestApplication () {
singletons.add(new MessageRestService());
singletons.add(new UserService());
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}

后续会边学习边给出resteasy的其他复杂实例,欢迎随时指正~~~~

resteasy简单实例的更多相关文章

  1. Hibernate(二)__简单实例入门

    首先我们进一步理解什么是对象关系映射模型? 它将对数据库中数据的处理转化为对对象的处理.如下图所示: 入门简单实例: hiberante 可以用在 j2se 项目,也可以用在 j2ee (web项目中 ...

  2. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

  3. 修改js confirm alert 提示框文字的简单实例

    修改js confirm alert 提示框文字的简单实例: <!DOCTYPE html> <html> <head lang="en"> & ...

  4. 利用navicat创建存储过程、触发器和使用游标的简单实例

    利用navicat创建存储过程.触发器和使用游标的简单实例 标签: navicat存储过程触发器mysql游标 2013-08-03 21:34 15516人阅读 评论(1) 收藏 举报  分类: 数 ...

  5. 【转】Android Https服务器端和客户端简单实例

    转载地址:http://blog.csdn.net/gf771115/article/details/7827233 AndroidHttps服务器端和客户端简单实例 工具介绍 Eclipse3.7 ...

  6. Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例

    目录 [TOC] 1.环境准备 ​ 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...

  7. vue路由的简单实例

    vue2.0 和 vue1.0 路由的语法还是有点稍微的差别,下面介绍一下vue-router 2的简单实例: <!DOCTYPE html> <html lang="en ...

  8. Flume概述和简单实例

    Flume概述 Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方( ...

  9. jsoup解析HTML及简单实例

    jsoup 中文参考文献    http://www.open-open.com/jsoup/ 本文将利用jsoup,简单实现网络抓取的功能,并给出一个小实例,该实例效果为:获取作者本人在博客园写的所 ...

随机推荐

  1. Spring Aop中,获取被代理类的工具

    在实际应用中,顺着过去就是一个类被代理.反过来,可能需要逆向进行,拿到被代理的类,实际工作中碰到了,就拿出来分享下. /** * 获取被代理类的Object * @author Monkey */ p ...

  2. 初识java——运算符和表达式以及注释

    java中有不同的运算符,并且在运算中有着优先级的排序计算,其中++和——的优先级最高,最先计算 运算符注意:1,增量和减量运算符++,——. int a=1++; int b=++1; 其中1++表 ...

  3. JavaScript中对象数组 根据某个属性值进行排序

    将下列对象数组,通过工资属性,由高到低排序 var BaiduUsers = [], WechatUsers = []; var User = function(id, name, phone, ge ...

  4. Day2_and_Day3 文件操作

    文件修改操作: 文件的修改操作:文件并没有修改操作,实际是将一个编写的新文件覆盖了原有的文件 替换文件中的某个内容: with open('old.txt','r',encoding='utf-8') ...

  5. mac os x 10.9.3 升级到10.10.4 记录

    昨天终于忍不住,将mac pro 的操作系统从 os x 10.9.3 升级到10.10.4,因为网络不给力,500k/s,光系统包都要5.6G,所以整整下来了一个工作白天,等下班的时候开始安装,不过 ...

  6. C 上传文件到服务器(含接收端源码)

    本文demo下载地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1067 实例向大家展示了如何用Visua ...

  7. 微信小程序之获取用户位置权限(拒绝后提醒)

    微信小程序获取用户当前位置有三个方式: 1. wx.getLocation(多与wx.openLocation一起用) 获取当前的精度.纬度.速度.不需要授权.当type设置为gcj02 返回可用于w ...

  8. 解决vue在ios或android中用webview打开H5链接时#号后面的参数被忽略问题angular同样适用

    在ios或android如果直接用webview在打开H5链接例如: 打开:http://localhost:8080/#/answer?id=1509335039582001 会变成 http:// ...

  9. 2017阿里Java编程题第2题

    题意是给一组数字+符号(自增1:^,相乘*,相加+)和一个长度为16的stack.栈空取数返回-1,栈满推数返回-2. 输入样例是1 1 + 2 ^ 3 * 这样子,做的时候紧张忽略了空格,用char ...

  10. 【转】javascript 浮点数运算问题

    大多数语言在处理浮点数的时候都会遇到精度问题,但是在JS里似乎特别严重,来看一个例子 alert(45.6*13); 结果居然是592.800000000001,当然加法之类的也会有这个问题 那这是j ...