Java EE开发系列教程 - Web Service

javax.enterprise

cdi-api

provided

org.jboss.spec.javax.ejb

jboss-ejb-api_3.2_spec

provided

com.zxuqian

notebookService

ejb

此处引用了新的依赖: org.jboss.spec.javax.ws.rs - 这是JAX-RS规范的JBOSS实现,包含了所有的Web service功能。另外,notebookService 模块也被引用进来,用来添加和获取用户数据供新的RESTful web service模块调用。

编码

==

notebookRESTful 模块中,创建一个Java类 UserResource 位于 com.zxuqian.notebook.webservice 包中。

@Path(“/user”)

public class UserResource {

private static final Logger logger = Logger.getLogger(UserResource.class.getCanonicalName());

@EJB

private IUserServiceLocal userService;

@GET

@Path(“/{id}”)

@Produces({MediaType.APPLICATION_JSON})

public User getUserById(@PathParam(“id”) Long id) {

User user = this.userService.getUserById(id);

return user;

}

@PUT

@Consumes(MediaType.APPLICATION_JSON)

public Response createUser(User user) {

this.userService.addUser(user);

return Response.ok().build();

}

@DELETE

@Path(“/{id}”)

public Response deleteUser(@PathParam(“id”) Long id) {

logger.severe("The id is: " + id);

User user = this.userService.getUserById(id);

logger.severe("The user is: " + user);

this.userService.deleteUser(user);

return Response.ok().build();

}

}

  • @Path 类级注解定义了访问UserResource的根路径,例如,如果访问Web Service的路径为 http://localhost:8080/notebook-rest,那么访问User资源的URI就会以 http://localhost:8080/notebook-rest/user 开头。 @Path 方法级注解定义了对资源进行操作的具体路径,如果要根据id查询某一特定用户,则相应的URI为 http://localhost:8080/notebook-rest/user/1 ,然后就会匹配到 getUserById 方法。 @Path("/{id}"} 中的{id}为通用匹配符,它会取URI最后一段的值,例如上述URI中的 1,然后它的值会赋给用 @PathParam("id") 参数级注解标记的 id 参数。

  • Web service对资源的操作用HTTP动词来标记,在Web Service中共有7种,常用的为 POST, GET, PUTDELETE,分别用来更新,获取,新增和删除。 Java中使用同名的注解来使用这些动词。

  • @Consume@Produce 分别表示接收什么类型的数据和生成什么样的数据。getUserbyId() 方法生成json格式的数据,而createUser() 方法需要接收 json 类型的数据。

  • 注意,deleteUser() 方法是先根据id查询出user对象然后再删除。但是这样会有问题,因为通过 getUserById() 查询出来的user为detached(脱管)对象,不能直接使用JPA的API进行删除。因而,在 notebookDomain 模块的 deleteUser() 方法第一行添加 user = this.entityManager.merge(user); 来把脱管的对象变为持久对象:

public void deleteUser(User user) {

user = this.entityManager.merge(user);

this.entityManager.remove(user);

}

UserResource 中各个方法中的代码都很简单明了,无非查询和添加数据,然后返回HTTP响应码。Response.ok() 返回 200 表示成功。当然更正确的做法应该在 @PUT 方法中返回 201 并返回新创建的资源的URI。

JAXB


JAXB 是Java XML绑定API,可以把普通Java对象(POJO)自动映射为XML或者JSON。使用此API需要转换 notebookDomain 模块中的User 类为JAXB类。只需要简单的添加一个类级注解 @XmlRootElement 即可,所有的成员变量的名字将作为XML的标签或JSON的key。

User.java

@Entity

// ‘from’ unexpected error. Add JPA facet by project structure, then specify the persistent.xml and provider.

@NamedQuery(name = “getAllUsersQuery”, query = “from User u”)

@XmlRootElement

public class User implements Serializable {

配置模块

====

现在,在 WebContent/WEB-INF 文件夹下创建 web.xml 文件,内容为:

<?xml version="1.0" encoding="UTF-8"?>

javax.ws.rs.core.Application

/*

javax.ws.rs.core.Application 是负责映射URL到Web Service资源的servlet。/* 代表所有访问此模块的URL都会映射到web serivce资源的URI。

最后在 notebookEAR 模块中的 pom.xml 文件中配置web service模块的上下文路径(此处为关键代码,全文请参考github源码):

com.zxuqian

notebookRESTful

/notebook-rest

运行程序

====

notebookRoot 模块执行Maven install 然后在 notebookEAR 模块中执行 wildfly:run 来启动wildfly server并部署EAR文件。

这里我用了一个叫 Postman 的工具来测试Web Service,可在这里下载: https://www.getpostman.com/ 打开后工具界面如下:

image.png

在工具右侧,可选择HTTP动词,输入Web Service URI,定义HTTP headers。然后点击 Send 就会发起HTTP请求到Web Service。 例如访问id为 1 的用户,可以看到返回的JSON数据(为了测试目的,用户的密码明文返回到了这里,在生产环境中应坚决避免)。

新增一个用户:

image.png

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

资料领取方式:点击这里免费领取前端全套学习资料

css源码pdf

JavaScript知识点
重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

资料领取方式:点击这里免费领取前端全套学习资料

[外链图片转存中…(img-npy0Hm34-1713496974078)]

[外链图片转存中…(img-rdXGJKMx-1713496974078)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值