jersey可以通过spring连接spring 数据库连接池吗

4182人阅读
Jersey介绍
Jersey是JAX-RS的参考实现,它包含三个主要部分,它可以帮助您实现RESTful Web服务.核心服务器(Core Server):通过提供JSR 311中标准化的注释和API标准化,可以用直观的方式开发RESTful Web服务.核心客户端(Core Client):Jersey客户端API可以让我们与REST服务轻松通信.集成(Integration):Jersey还提供可以轻松集成Spring,Guice,Apache Abdera的库.
Jersey spring整合
Web集成:在web.xml中加入servlet,见配置
123456789&&&&&!-- Jersey Servlet 配置 --&&&&&&servlet&&&&&&&&&&servlet-name&JerseyServlet&/servlet-name&&&&&&&&&&servlet-class&com.sun.jersey.spi.spring.container.servlet.SpringServlet&/servlet-class&&&&&&/servlet&&&&&&servlet-mapping&&&&&&&&&&servlet-name&JerseyServlet&/servlet-name&&&&&&&&&&url-pattern&/rest/*&/url-pattern&&&&&&/servlet-mapping&spring集成:将所需要的jar增加至classpath中,见maven pom.xml配置XHTML
&&&&&&&&&!--
rest begin --&
&&&&&&&&&dependency&
&&&&&&&&&&&&&groupId&com.sun.jersey&/groupId&
&&&&&&&&&&&&&artifactId&jersey-server&/artifactId&
&&&&&&&&&&&&&version&${version.jersey}&/version&
&&&&&&&&&/dependency&
&&&&&&&&&dependency&
&&&&&&&&&&&&&groupId&com.sun.jersey&/groupId&
&&&&&&&&&&&&&artifactId&jersey-client&/artifactId&
&&&&&&&&&&&&&version&${version.jersey}&/version&
&&&&&&&&&/dependency&
&&&&&&&&&dependency&
&&&&&&&&&&&&&groupId&com.sun.jersey.contribs&/groupId&
&&&&&&&&&&&&&artifactId&jersey-spring&/artifactId&
&&&&&&&&&&&&&version&${version.jersey}&/version&
&&&&&&&&&&&&&!--
去除自带的spring版本 --&
&&&&&&&&&&&&&exclusions&
&&&&&&&&&&&&&&&&&exclusion&
&&&&&&&&&&&&&&&&&&&&&groupId&org.springframework&/groupId&
&&&&&&&&&&&&&&&&&&&&&artifactId&spring-aop&/artifactId&
&&&&&&&&&&&&&&&&&/exclusion&
&&&&&&&&&&&&&&&&&exclusion&
&&&&&&&&&&&&&&&&&&&&&groupId&org.springframework&/groupId&
&&&&&&&&&&&&&&&&&&&&&artifactId&spring-context&/artifactId&
&&&&&&&&&&&&&&&&&/exclusion&
&&&&&&&&&&&&&&&&&exclusion&
&&&&&&&&&&&&&&&&&&&&&groupId&org.springframework&/groupId&
&&&&&&&&&&&&&&&&&&&&&artifactId&spring-beans&/artifactId&
&&&&&&&&&&&&&&&&&/exclusion&
&&&&&&&&&&&&&&&&&exclusion&
&&&&&&&&&&&&&&&&&&&&&groupId&org.springframework&/groupId&
&&&&&&&&&&&&&&&&&&&&&artifactId&spring-core&/artifactId&
&&&&&&&&&&&&&&&&&/exclusion&
&&&&&&&&&&&&&&&&&exclusion&
&&&&&&&&&&&&&&&&&&&&&artifactId&spring-web&/artifactId&
&&&&&&&&&&&&&&&&&&&&&groupId&org.springframework&/groupId&
&&&&&&&&&&&&&&&&&/exclusion&
&&&&&&&&&&&&&/exclusions&
&&&&&&&&&/dependency&
&&&&&&&&&!--
rest end --&
先看一个最简单的例子
123456789101112@Component@Path(&/user&)public class UserResource {&&&&&@Path(&/users/{username}&)&&&&@GET&&&&@Produces(MediaType.TEXT_PLAIN)&&&&public String getUser(@PathParam(&username&) String username) {&&&&&&&&log.debug(&username:{}&, username);&&&&&&&&return username;&&&&}}@Component注解定义此类为spring组件,即bean类.@Path注解的值是一个相对的URI路径,值得注意的是你仍然可以在URI中嵌入变量,方法如下@Path(“/users/{username}”).如果需要对userName进行规则匹配,可以自定义的正则表达式,它将覆盖默认的正则表达式”[^/]+”.例如@Path(“users/{username: [a-zA-Z][a-zA-Z_0-9]}*”),这里username将只匹配一个大写或小写字母和零个或多个字母数字字符和下划线开头,如果给定参数不匹配,将出现404错误.@Path中定义的URL前后是否有”/”,都不会有影响,但如果你启用了重定向机制,则上面的规则无效.@GET注解是请求方法指示符,这个指示符注解的Java方法会处理HTTP GET请求.@Produces注解用于指定MIME类型,通常与MediaType联用,可定义在方法区或者类定义上.若方法区上与类定义上都指定了@Produces,那么方法区上的@Produces会覆盖掉类定义上的@Produces.@QueryParam注解用于从请求的URL中提取查询参数,且只能在get请求中使用,@QueryParameter可以转换任何有以String为参数的构造函数类.@DefaultValue注解表示如果url中参数不存在,则会按DefaultValue给定值赋值,如果url中给定值不是给定类型,则会报404错误.Java
&&&&@Path(&save&)
&&&&@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
&&&&publicvoidsaveUser(@FormParam(&id&)Stringid,
&&&&&&&&&&&&&&&&&&&&&&&&@FormParam(&username&)Stringusername,@ContextHttpServletRequestrequest,
&&&&&&&&&&&&&&&&&&&&&&&&@ContextHttpServletResponseresponse){
&&&&&&&&log.debug(&id:{},
username:{}&,id,username);
&&&&&&&&log.debug(&request:{},
response:{}&,request,response);
@Consumes注解指定了客户端发送的MIME媒体类型,与@Produces一样,通常与MediaType联用,并且可定义在方法区或者类定义上.@POST注解是请求方法指示符,这个指示符注解的Java方法会处理HTTP POST请求.@Context注解是注入上下文对象,如Request,Response,UriInfo,Servlet,Context等.@FormParam注解用于POST请求,@QueryParam用于GET请求,作用与@QueryParam一样.
直接返回对象,用@Produces控制输出的格式为Html/Xml/JSON等.返回Response对象,根据不同的输入参数,决定返回Xml/JSON.
当然,你也可以选择使用JAXB,它可以很方便将其序列化为XML,JSON,当然如果选择使用JSON,你需要使用jackson.
123456789101112131415161718@XmlRootElementpublic class User {&&&&&private int id;&&&&&private String username;&&&&&public User() {&&&&}&&&&&public User(int id, String username) {&&&&&&&&this.id = id;&&&&&&&&this.username = username;&&&&}&&&&&// setter getter //&&&&...}异常处理最简单的抛一个干净的500错误,throw new WebApplicationException();如果需要自定义错误返回码和错误信息,可以使用如下方法Java
newWebApplicationException(Response.status(status).entity(message).type(MediaType.TEXT_PLAIN).build());
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5006647次
积分:46811
积分:46811
排名:第55名
原创:227篇
转载:2368篇
评论:525条
(12)(7)(74)(67)(96)(177)(114)(86)(40)(43)(73)(15)(10)(17)(12)(6)(20)(27)(54)(71)(97)(74)(32)(2)(24)(21)(62)(60)(36)(23)(27)(46)(34)(76)(63)(121)(142)(74)(54)(120)(77)(42)(4)(12)(19)(1)(9)(15)(19)(18)(16)(31)(79)(68)java-web(3)
Android(50)
因为是一个独立的项目,所以不准备使用Spring、SpringMVC、JPA、Hibernate那样重型的框架,想要一个轻便好用的restful webservice。所以使用的框架选择了jersey。
jersey介绍
Jersey是由Sun开发的产品级质量的JSR 311: JAX-RS: The Java API for RESTful Web Services的参考实现。Jersey实现了JSR-311中对标注的支持,这使得开发人员使用Java开发RESTfulWeb服务更加容易。除此以外,Jersey还增加了JSR以外的附加特性
摘自维基百科
可以看到的是,jersey是一个基于JSR 331标准的实现框架,简要说一下JSR 331 表述的就是一个RESTful Web Services的Api。需要了解更多请查看JSR文档:。
使用maven搭建jersey
执行以下mvn 命令即可在当前路径下创建一个新的jersey项目。这也是官方推荐的创建方式。
mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \
-DarchetypeVersion=2.23.1
其中-DgroupId,-DartifactId,-Dpackage 请替换成自己的项目groupId,artifactId和package名
当前版本是2.23.1。
创建好之后,请将项目引入IDE,本人使用的是Eclipse mars2。
导入成功后,如果项目没有包含src\test\java,则需要创建src\test\java目录。
创建成功后的项目即可使用tomcat运行,在浏览器输入项目名/webapi/myresource
即可看到jersey运行的结果。
使用Servlet3 容器,配置jersery
使用maven 骨架创建的项目是基于Servlet2.x版本的,当前的如tomcat,jetty等web容器都支持servlet3的标准,那么在配置上会略有不同。
maven pom 文件
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&
&com.xxxxxx&
&1.0-SNAPSHOT&
&xxxxxx.api&
&iguyuan.api&
&org.apache.maven.plugins&
&maven-compiler-plugin&
&org.apache.maven.plugins&
&maven-war-plugin&
&org.eclipse.jetty&
&jetty-maven-plugin&
implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"&
&src/main/webapp&
&src/main/webapp/WEB-INF/web.xml&
&automatic&
&org.mortbay.util.URI.charset&
&org.glassfish.jersey&
&jersey-bom&
&${jersey.version}&
&org.glassfish.jersey.containers&
&jersey-container-servlet&
&org.glassfish.jersey.media&
&jersey-media-multipart&
&com.google.guava&
&${guava.version}&
&com.colobu&
&fastjson-jaxrs-json-provider&
&org.glassfish&
&javax.servlet&
&10.0-b28&
&provided&
&com.microsoft.sqlserver&
&sqljdbc4&
&${sqlserver.version}&
&commons-dbutils&
&commons-dbutils&
&com.alibaba&
&org.slf4j&
&slf4j-log4j12&
&${slf4j.version}&
&${junit.version}&
setp1 继承ResourceConfig 扩展Jersey自带的Application
public class JerseyApplication extends ResourceConfig {
public JerseyApplication() {
packages("com.drawthink.iguyuan.api");
register(LoggingFeature.class);
register(MultiPartFeature.class);
register(FastJsonFeature.class);
register(ExceptionMappingResource.class);
register(new InjectComponent());
register(AuthorizationRequestFilter.class);
step2 修改Web.xml
version="3.0" xmlns="/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&
&packageName.JerseyApplication&
&packageName.JerseyApplication&
packageName 需替换成自己项目的包名
此处的url-pattern即是你拦截的请求名
以文件上传为例演示POST 代码如下
import java.io.F
import java.io.FileOutputS
import java.io.IOE
import java.io.InputS
import java.io.OutputS
import java.util.C
import javax.servlet.http.HttpServletR
import javax.ws.rs.C
import javax.ws.rs.POST;
import javax.ws.rs.P
import javax.ws.rs.P
import javax.ws.rs.core.C
import javax.ws.rs.core.MediaT
import org.apache.log4j.L
import org.glassfish.jersey.media.multipart.FormDataContentD
import org.glassfish.jersey.media.multipart.FormDataP
import com.drawthink.iguyuan.config.ConfigV
import com.drawthink.iguyuan.exceptions.BaseE
import com.drawthink.iguyuan.exceptions.ExceptionK
import com.drawthink.iguyuan.vo.BaseR
import mon.base.S
import mon.io.ByteS
import mon.io.F
@Path("file")
public class FileService {
Logger logger = Logger.getLogger(FileService.class);
HttpServletR
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public BaseResponse&String& upload(@FormDataParam("file") InputStream fis,
@FormDataParam("file") FormDataContentDisposition disposition){
String localPath = request.getSession().getServletContext().getRealPath("");
if(Strings.isNullOrEmpty(disposition.getFileName())){
throw new WebApplicationException(400);
String refileName = Calendar.getInstance().getTimeInMillis() + "." +
Files.getFileExtension(disposition.getFileName());
String saveFilePath = ConfigVar.getUploadImageStoreDir(localPath)
+File.separator
File imageFloder = new File(ConfigVar.getUploadImageStoreDir(localPath));
if(!imageFloder.exists()){
imageFloder.mkdirs();
File file = new File(saveFilePath);
os = new FileOutputStream(file);
ByteStreams.copy(fis, os);
BaseResponse&String& response = new BaseResponse&&(ConfigVar.getUplaodImageURL()+refileName);
} catch (IOException e) {
e.printStackTrace();
throw new WebApplicationException(500);
以图片展示为例演示GET用法
import javax.servlet.http.HttpServletR
import javax.ws.rs.GET;
import javax.ws.rs.P
import javax.ws.rs.PathP
import javax.ws.rs.P
import javax.ws.rs.core.C
import javax.ws.rs.core.R
import com.drawthink.iguyuan.config.ConfigV
import com.drawthink.iguyuan.exceptions.BaseE
import com.drawthink.iguyuan.exceptions.ExceptionK
@Path("/images/{image}")
public class ImageService {
HttpServletR
@Produces({"image/jpeg","image/gif ","image/png"})
public Response getImage(@PathParam("image") String image) {
String localPath = request.getSession().getServletContext().getRealPath("");
String filePath = ConfigVar.getUploadImageStoreDir(localPath)+File.separator+
File f = new File(filePath);
if (!f.exists()) {
throw new BaseException(ExceptionKeys.IMAGE_FILE_NOT_FOUND,404);
return Response.ok(f).header("Accept-Ranges", "bytes").build();
关于依赖注入
不使用Spring是不是就不可以依赖注入?
答案是否定的,在J2EE EJB3中就已经定义了依赖注入的实现,以下代码即可实现依赖注入。
需要注入的类
AreaManager areaM
被注入的类
public class AdvertisementManagerImpl implements AdvertisementManager{
注入管理类
public class InjectComponent extends AbstractBinder{
protected void configure() {
bind(AdvertisementManagerImpl.class).to(AdvertisementManager.class);
在jersey中注册管理类(完整代码在 step1中)
//@Inject @Resource DI注入
register(new InjectComponent());
这样就完成了DI
遗憾的是,之前用JAP+hibernate 做为持久层,但是无法使用@PersistenceContext注解注入,遂放弃(求大神解答疑惑),当前使用的是DbUtils+Durid。
留下一个种子项目(文中全部代码均包含在内)
执行 mvn clean jetty:run
在浏览器中输入
即可看到 GO IT!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:62114次
积分:1291
积分:1291
排名:千里之外
原创:62篇
评论:52条
(2)(4)(4)(2)(6)(1)(8)(3)(2)(2)(4)(3)(3)(1)(2)(2)(1)(3)(1)(3)(4)(3)(2)(1)JAVA+Spring+Hibernate使用Jersey开发Rest WEB SERVICES_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
JAVA+Spring+Hibernate使用Jersey开发Rest WEB SERVICES
上传于|0|0|文档简介
&&JAVA+Spring+Hibernate使用Jersey开发Rest WEB SERVICES
服务器tomcat
数据库oracle11g
我个人学习jersey过程中的搭建记录,比较详细
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩15页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢1004人阅读
jersey所需要的开发包下载:,
解压jaxrs-ri-2.22.1文件,得到以下目录
将解压文件夹lib目录的jar文件复制到项目的WEB-INF/lib目录中,ext目录中的jar包根据自己所需 &或者console报错 引入
这是我的项目的lib目录
配置web.xml
&!-- REST配置 --&
&servlet-name&jerseyServlet&/servlet-name&
&servlet-class&org.glassfish.jersey.servlet.ServletContainer&/servlet-class&
&init-param&
&param-name&javax.ws.rs.Application&/param-name&
&param-value&com.znie.mypro.service.RestApp&/param-value&
&/init-param&
&load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&jerseyServlet&/servlet-name&
&url-pattern&/service/*&/url-pattern&
&/servlet-mapping&
&!-- REST配置 结束 --&
com.znie.mypro.service.RestApp文件 &指定服务类所在的包
package com.znie.mypro.
import javax.ws.rs.ApplicationP
import org.glassfish.jersey.server.ResourceC
@ApplicationPath(&/&)
public class RestApp
extends ResourceConfig{
public RestApp(){
// 服务类所在的包路径
packages(&com.znie.mypro.service&);
3.编写测试
编写hello测试
package com.znie.mypro.
import java.util.HashM
import java.util.M
import javax.ws.rs.C
import javax.ws.rs.GET;
import javax.ws.rs.P
import javax.ws.rs.P
import javax.ws.rs.QueryP
import javax.ws.rs.core.MediaT
import com.alibaba.fastjson.JSON;
@Path(&/hello&)
public class HelloService {
@Path(&/index&)
@Produces(MediaType.APPLICATION_JSON)
public String hello() {
Map m = new HashMap();
m.put(&hello&,&world&);
m.put(&hello2&,&world&);
return JSON.toJSONString(m);
@Path(&/post&)
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String post(@QueryParam(&test&)String test) {
Map&String,String& m = new HashMap&String,String&();
m.put(&test&,test);
m.put(&hello2&,&world&);
return JSON.toJSONString(m);
package com.znie.mypro.
import javax.ws.rs.client.C
import javax.ws.rs.client.ClientB
import javax.ws.rs.client.E
import javax.ws.rs.client.WebT
import javax.ws.rs.core.R
public class HelloClient {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
WebTarget target = client
.target(&http://localhost:8081/mypro/service/hello&)
.path(&/post&).queryParam(&test&, &111&);
Response res = target.request().accept(&application/json&).get();
if (res.getStatus() != 200) {
throw new RuntimeException(&Failed : HTTP error code : &
+ res.getStatus());
String output = res.readEntity(String.class);
System.out.println(res.getStatus() + &\n……Output from Server……&);
System.out.println(output);
} catch (Exception e) {
e.printStackTrace();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:10640次
排名:千里之外
原创:12篇
(2)(3)(1)(3)(1)(1)(2)(2)(1)

我要回帖

更多关于 spring获取数据库连接 的文章

 

随机推荐