Before Getting Started 开始之前
因为项目是通过Maven进行管理的,所以开始之前最好了解Maven的有关知识。最起码知道Maven是个用来做什么的工具,怎么进行Maven的安装配置,使用Maven构建项目能带来什么便利,还有几个常用的Maven命令。后期会写Maven相关详细的学习笔记。
First REST
将一个 Maven 管理的应用项目打包成 WAR,执行:
mvn clean package
或者是采用上一篇博文中的右击项目的方式进行构建。
打包成功后,打包的 WAR(位于./hd_test_web/target/hd_test_web-1.0-SNAPSHOT.war)可以将它部署到 Servlet 容器,比如 上篇博文中配置的Tomee中。
注意:
部署 Jersey 项目,Servlet 容器版本应该是不低于2.5,若想支持更高的特性(比如 JAX-RS 2.0 Async Support) ,Servlet容器版本应该是不低于3.0。
由 Jersey 提供 Maven archetype 用来创建的 web 项目,在项目里面随意调整 pom.xml 内的 groupId,包号和版本号就可以成为一个新的项目。
在 src/main/webapp/WEB-INF 下,它包含了标准的JavaEE Web 应用的 web.xml 部署描述符。
观察 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<listener>
<listener-class>
net.huadong.idev.tpl.privilege.listener.OnlineUserListener
</listener-class>
</listener>
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<!-- 配置JerseyServlet,将所有的REST请求发送到Jersey容器 -->
<servlet>
<servlet-name>Jersey.REST.Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- 配置自己定义的资源加载类来加载资源 ,使用自己的资源加载器需要给出自定义的资源加载器位置。另一种方式是使用默认的资源加载器,需要给出资源所在的package-->
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>net.huadong.idev.config.ApplicationConfig</param-value>
</init-param>
<!-- 配置自己的资源加载器完毕 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey.REST.Service</servlet-name>
<url-pattern>/webresources/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
其中标签可以定义资源加载类来加载资源。如果配置属性无需设置,要部署应用程序只包括存储在特定的包的资源和提供者,那么可以指示 Jersey 自动扫描这些包,这样就能自动注册找到的任何资源和提供者,这样就能找到了 项目包下的 Resource 资源并且注册
自定义配置
当需要更多的配置,可以重写 Application 类。
package net.huadong.idev.config;
import java.util.Set;
import javax.ws.rs.core.Application;
import org.glassfish.jersey.jackson.JacksonFeature;
/** * 自定义的资源加载器 * 将各种资源加载进来,暴露给client。 * 自定义资源加载器可控性强,除了加载业务资源外还可以加载其它一些工具资源,也可以隐藏package下某些不想被暴露的资源 */
//@javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
addRestResourceClasses(resources);
resources.add(JacksonFeature.class);
return resources;
}
}
为了规范,建立package net.huadong.idev.tpl.privilege.lhy.resources包,用来专门放资源来。然后把资源放进来:
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
addRestResourceClasses(resources);
resources.add(JacksonFeature.class);
return resources;
}
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(net.huadong.idev.tpl.privilege.lhy.resources.CadetsResource.class);
}
}