maven-compiler-plugin
maven-war-plugin
WebContent
false
org.jboss.spec.javax.ws.rs
jboss-jaxrs-api_2.0_spec
provided
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
,PUT
和DELETE
,分别用来更新,获取,新增和删除。 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
/*
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
web浏览器中的javascript
- 客户端javascript
- 在html里嵌入javascript
- javascript程序的执行
- 兼容性和互用性
- 可访问性
- 安全性
- 客户端框架
- CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
window对象
-
计时器
-
浏览器定位和导航
-
浏览历史
-
浏览器和屏幕信息
-
对话框
-
错误处理
-
作为window对象属性的文档元素
javascript程序的执行
- 兼容性和互用性
- 可访问性
- 安全性
- 客户端框架
- CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
window对象
-
计时器
-
浏览器定位和导航
-
浏览历史
-
浏览器和屏幕信息
-
对话框
-
错误处理
-
作为window对象属性的文档元素