REST+Jersey学习笔记(一)----自定义资源

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);  
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值