上海企业建站推荐,邯郸教育行业网站建设,南京移动网站设计,wordpress主题helpdeskrestful web我已经讨论了有关体系结构考虑事项 link 的早期文章#xff0c;以成为可在我的系统/机器上使用的分布式环境上的RESTful系统。 本文我们将讨论如何基于REST体系结构考虑来构建Web服务。 本教程说明了如何使用Tomcat 6#xff0c;Eclipse和Jersey … restful web 我已经讨论了有关体系结构考虑事项 link 的早期文章以成为可在我的系统/机器上使用的分布式环境上的RESTful系统。 本文我们将讨论如何基于REST体系结构考虑来构建Web服务。 本教程说明了如何使用Tomcat 6Eclipse和Jersey JAX-RSJSR 311参考实现在Java中开发RESTful Web服务。 简而言之RESTful Web服务是使用HTTP on REST原理的机器之间的通信它具有以下要点 每个资源代表唯一的URI以通过HTTP协议进行通信 HTTP方法支持的每个资源操作POSTGETPUT和DELETE JSONXML和各种MIME类型例如图像字节流等支持的请求和响应。 JAX-RS JAX-RS是基于注释的API用于在Java中基于HTTP实现RESTful Web服务。 本质上类和方法用信息注释这些信息使运行时可以将它们公开为资源。 在考虑到URI请求和接受的内容类型以及HTTP方法的情况下实现JAX-RS的运行时在HTTP协议和Java类之间进行中介。 Jersey框架实现了JSR-RSJSR-311参考API。 除了Jersey之外还有其他各种实现例如RetletJBOSS RESTeasyApache CXF等。 球衣 泽西岛包含以下主要部分 核心服务器要基于注释构建RESTful Web服务请包含诸如jersey-core.jarjersey-server.jarjsr311-api.jarasm.jar之类的关键库。 核心客户端Jersey客户端API可帮助您轻松与REST服务进行通信包括libabry ersey-client.jar JAXB支持在高级示例中使用jaxb-impl.jarjaxb-api.jaractivation.jarstax-api.jarwstx-asl.jar JSON支持在高级示例中使用jersey-json.jar 集成Jersey还提供了可以轻松与SpringGuiceApache Abdera等集成的库。 获取工具 软件 下载 Java JDK-6 http://www.oracle.com/ Eclipse –印度 http://www.eclipse.org/ Tomcat的Apache -6 http://tomcat.apache.org/ H2-数据库 http://www.h2database.com/ 注意 您可以在此处下载完整的演示应用程序包括H2和Jersey库link 使用Jersey的RESTful Web服务实现 我们将为用户管理构建一个小型应用程序以对用户进行CRUD操作。 然后我们将使用列用户名和密码创建一个小的User表并使用Jersey注释对Web服务使用POJO类公开操作进行CRUD操作。 以下是开始RESTful Web服务开发之前的设计注意事项。 资源具有用户名和密码属性的用户 资源类 UsersResource.java URI http// localhost8080 / UserManagement / users 表示形式 XML 应用程序开发文件夹结构 我们的应用程序的目录结构如下所示 以下是所需的应用程序库列表 应用配置 在开始开发之前我们需要将Jersey servlet添加到web.xml中以将整个请求定向到jersey以进行资源标识和操作过程POSTGETPUT和DELETE。 包含jersey servlet之后Web.xml将如下所示 ?xml version1.0 encodingUTF-8?
web-app xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlnshttp://java.sun.com/xml/ns/javaee xmlns:webhttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd xsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd idWebApp_ID version2.5display-nameUserManagement/display-nameservletservlet-nameJersey REST Service/servlet-nameservlet-classcom.sun.jersey.spi.container.servlet.ServletContainer/servlet-classinit-paramparam-namecom.sun.jersey.config.property.packages/param-nameparam-valueresource.com.users.java/param-value/init-paramload-on-startup1/load-on-startup/servletservlet-mappingservlet-nameJersey REST Service/servlet-nameurl-pattern/*/url-pattern/servlet-mapping
/web-app资源资源 资源是指可通过网络寻址和操纵的任何东西。 Jersey资源是带有Path注释的纯Java对象POJO将由HTTP方法POSTGETPUT和DELETE进行操纵。 资源还具有子资源。 在示例应用程序Users Users的UsersResource中Java bean是Resources。 用户是具有属性名称和密码的简单POJO UsersResource.java
Path(/users)
public class UsersResource implements IUsersResource{
Context
UriInfo uriInfo;
GET
Produces (application/xml)
public ListUser getUsersAll() {
ListUser alsnull;
try {
als UserService.getInstance().getUserAll();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return als;
}POST
Consumes (application/xml)
Produces (application/xml)
public User createUser(User user){
URI uri uriInfo.getAbsolutePathBuilder().path(user.getUserName()).build();
Response resResponse.created(uri).build();
try {
UserService.getInstance().CreateUser(user);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return user;
}Path(/user/{username})
GET
Produces (application/xml)public ListUser getUser(PathParam(username) String username) {
ListUser aslnull;
try {
asl UserService.getInstance().getUser(username);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return asl;
} 以下是对JAX-RS注释的简要说明 Path与根路径结合的路径提供URI来标识资源。 例如在给定的示例URI中将为http// localhost8080 / UserManagement / users Path“ / user / {username}”我们也可以在方法上使用子路径来公开子资源此示例URI将为http// localhost8080 / UserManagement / users / user / john Context上下文用于注入上下文对象例如RequestResponseUriInfoServletContext等。 PathParam此批注与Path一起使用并与GETPOSTPUT和DELETE结合使用。 其他可用的注释是 FormParam QueryParam等。 Produces“ application / xml”支持多种MIME类型的响应。 在这种情况下application / xml将是默认的MIME类型。 Consumes“ application / xml”输入请求有效负载将以xml格式发送。 GET由GETPOSTPUT和DELET方法之一操纵的资源通过HTTP标头传递 JAXB – Java POJO XML绑定 泽西岛支持JAXB实习生将POJO转换为XML反之亦然。 为了使POJO具备支持XML的资格我们必须声明XmlRootElement注释如下所示 不要忘记在转换过程中根据需要添加空的构造函数。 XmlRootElement
public class User {
private String userName;
private String userPasswd;
public User(String userName, String userPasswd) {
this.userName userName;
this.userPasswd userPasswd;
}
public User() {
super();
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName userName;
}
public String getUserPasswd() {
return userPasswd;
}
public void setUserPasswd(String userPasswd) {
this.userPasswd userPasswd;
}
} 我们将在H2数据库的User表中创建执行CRUD操作的服务类。 UserService.javapublic class UserService{
public static UserService userService new UserService();
public static final String GET_USERSELECT * FROM USER;
public static final String INSERT_USERInsert into user ;
public ListUser getUserAll() throws ClassNotFoundException, SQLException {
ListUser ls new ArrayList();
lsDataServiceHelper.getInstance().executeQuery(GET_USER);
return ls;
}public ListUser getUser(String name) throws ClassNotFoundException, SQLException{
String SQL_WHERE_CAS where namename;
ListUser alsDataServiceHelper.getInstance().executeQuery(GET_USERSQL_WHERE_CAS);
return als;
}public void CreateUser(User user) throws SQLException, ClassNotFoundException {
String SQL_WHERE_CASE VALUES( user.getUserName() , user.getUserPasswd() );
DataServiceHelper.getInstance().executeUpdateQuery(INSERT_USERSQL_WHERE_CASE);
}
public static UserService getInstance() {
return userService;
}
}助手类 我们必须创建更多的类来与DB在本例中为H2进行交互并执行CRUD操作。 DaraServiceHelper.javapublic class DataServiceHelper {
public static DataServiceHelper dataServiceHelper null;
private Connection con null;
DataSource dataSource null;
InitialContext initialContext null;
public static final String DB_URL jdbc:h2:tcp://localhost/~/test;
public static final String DRIVER_NAME org.h2.Driver;
/*** This method is used to create an object for the given DAO class name.
*/public Connection getConnection() throws ClassNotFoundException,
SQLException {
Class.forName(DRIVER_NAME);
con DriverManager.getConnection(DB_URL, sa, );
return con;
}public void closeConnection() throws SQLException {
if (isConnectionOpen()) {
con.close();
con null;
}
}
public boolean isConnectionOpen() {
return (con ! null);
}public static DataServiceHelper getInstance() {
if (dataServiceHelper null) {
dataServiceHelper new DataServiceHelper();
}
return dataServiceHelper;
}public void executeUpdateQuery(String query) throws SQLException,
ClassNotFoundException {
Connection con getConnection();
Statement stmt con.createStatement();
stmt.execute(query);
closeConnection();
}public ListUser executeQuery(String query) throws ClassNotFoundException,
SQLException {
Connection con getConnection();
Statement stmt con.createStatement();
ResultSet rs stmt.executeQuery(query);
ListUser als convertPojoList(rs);
closeConnection();
return als;
}private ListUser convertPojoList(ResultSet rs) throws SQLException {
ListUser asl new ArrayListUser();
while (rs.next()) {
User user new User(rs.getString(name), rs.getString(password));
asl.add(user);
}
return asl;
}public static void main(String[] args) throws ClassNotFoundException,
SQLException {
String query Select * from user where namenitin;
ListUser als DataServiceHelper.getInstance().executeQuery(query);
System.out.println(List als);
}
} 注意为简单起见我将所有代码都包含在一个类中 泽西岛客户测试 泽西岛提供客户端来测试RESTful Web服务它有助于与服务器进行通信并测试服务。 该库是一个通用实现可以与任何基于HTTP / HTTPS的Web服务配合使用。 public class UserResourceSample {
public static final String USER_URIhttp://localhost:8080/UserManagement/users;
public String testGetUsersAll() {
ClientConfig config new DefaultClientConfig();
Client client Client.create(config);
WebResource resource client.resource(ForumConstant.USER_URI);
ClientResponse response resource.type(MediaType.APPLICATION_XML).get(
ClientResponse.class);
String en response.getEntity(String.class);
return en;
}public String testGetUsers() {
ClientConfig config new DefaultClientConfig();
Client client Client.create(config);
WebResource resource client.resource(ForumConstant.USER_URI);
ClientResponse response resource.type(MediaType.APPLICATION_XML).get(
ClientResponse.class);
String en response.getEntity(String.class);
return en;
}public User testCreateUser() {
User user new User(John, john);
Client client Client.create();
WebResource r client.resource(ForumConstant.USER_URI);
ClientResponse response r.accept(MediaType.APPLICATION_XML).post(
ClientResponse.class, user);
return user;
}
}使用浏览器运行 在Eclipse中运行Web应用程序并在以下位置测试REST服务的可用性 http// localhost8080 / UserManagement / users8221;。 您应该看到用户项目的XML表示形式 对于子资源 注意 在运行应用程序之前请不要忘记运行H2数据库并将记录插入到User表中 结论 这个例子讨论了Apache tomcat与Jersey的基本用法。 我们将在以后讨论一些JAX-RS的高级用法。 您也可以将完整的代码下载到此链接下面的 资源 http://en.wikipedia.org/wiki/Representational_state_transfer https://jersey.java.net/ 参考 Tech My Talk博客上的JCG合作伙伴 Nitin Kumar提供的RESTful Webservices with Jersey 。 翻译自: https://www.javacodegeeks.com/2013/07/restful-webservices-with-jersey.htmlrestful web