Jersey (软件框架)介绍
Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 & JSR 339) 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发。尽管相对年轻,它已经是一个产品级的 RESTful service 和 client 框架。与Struts类似,它同样可以和hibernate,spring框架整合。
jersey1.X使用的是sun的com.sun.jersey
jersey2.X使用的是glassfish的org.glassfish.jersey
由于Struts2+hibernate+spring整合在市场的占有率太高,所以很少一部分人去关注Jersey。所以网上有关于Jersey的介绍很少。但是它确实是一个非常不错的框架。对于请求式服务,对于GET,DELETE请求,你甚至只需要给出一个URI即可完成操作。
举个简单的例子:如果你想获得服务器数据库中的所有数据;那么你可以在浏览器或者利用Ajax的GET方法,将路径设置好;例如:localhost:8080/Student(项目名称)/studentinfo(项目服务总体前缀)/student(处理student对象的签注)/getStudentInfo(最后前缀)。这样就可以获取所有学生信息。你可以选择GET获取的数据的返回类型:JSON,XML,TEXT_HTML(String)..获取之后,你可以通过JS将这些数据塞到html或者jsp页面上。
下面是详解:
web.xml的设置:
<!--定义Jersey的拦截器 -->
<servlet>
<servlet-name>JerseyServlet</servlet-name>
<servlet-class>
com.sun.jersey.spi.spring.container.servlet.SpringServlet
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<!--服务类所在的文件夹 -->
<param-value>com.mirrors.action</param-value><!-- 之所以我定义为com.mirrors.action就是说明此包中类的作用类似于struts中action层类的作用--!>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>JerseyServlet</servlet-name>
<url-pattern>/new/*</url-pattern><!--项目服务总体前缀 -->
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>JerseyServlet</servlet-name>
<servlet-class>
com.sun.jersey.spi.spring.container.servlet.SpringServlet
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<!--服务类所在的文件夹 -->
<param-value>com.mirrors.action</param-value><!-- 之所以我定义为com.mirrors.action就是说明此包中类的作用类似于struts中action层类的作用--!>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>JerseyServlet</servlet-name>
<url-pattern>/new/*</url-pattern><!--项目服务总体前缀 -->
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
StudentAction.java一些代码:
@Component
@Path("/student")//处理student对象的签注
public class StudentAction
{
private StudentDao studentdao;
public void setStudentdaoStudentDao studentdao)
{
this.studentdao =studentdao;
}
@GET//获取方式
@Path("getStudentInfo")//最后前缀
@Path("/student")//处理student对象的签注
public class StudentAction
{
private StudentDao studentdao;
public void setStudentdaoStudentDao studentdao)
{
this.studentdao =studentdao;
}
@GET//获取方式
@Path("getStudentInfo")//最后前缀
@Produces({ MediaType.APPLICATION_JSON })//返回类型为一个Student对象的JSON数组
public List<Student> getTrade()
public List<Student> getTrade()
{
return studentdao.getStudent();
}
return studentdao.getStudent();
}
}
这样一个GET方式的处理就结束了,接下来就是前台提取方式,你可以通过JS控制JSON数组在页面的呈现方式。
Jersey共计有4中处理方式,即:@GET,@POST,@DELETE,@PUT。由于Jersey中文资料较少。想学习的可以通过官网API学习。
jersey常用注解解释:
Annotation | 作用 | 说明 |
@GET | 查询请求 | 相当于数据库的查询数据操作 |
@PUT | 更新请求 | 相当于数据库的更新数据操作 |
@POST | 插入请求 | 相当于数据库的插入数据操作 |
@DELETE | 删除请求 | 相当于数据的删除数据操作 |
@Path | uri路径 | 定义资源的访问路径,client通过这个路径访问资源。比如:@Path("user") |
@Produces | 指定返回MIME格式 | 资源按照那种数据格式返回,可取的值有:MediaType.APPLICATION_XXX。比如:@Produces(MediaType.APPLICATION_XML) |
@Consumes | 接受指定的MIME格式 | 只有符合这个参数设置的请求再能访问到这个资源。比如@Consumes("application/x-www-form-urlencoded") |
@PathParam | uri路径参数 | 写在方法的参数中,获得请求路径参数。比如:@PathParam("username") String userName |
@QueryParam | uri路径请求参数 | 写在方法的参数中,获得请求路径附带的参数。比如:@QueryParam("desc") String desc |
@DefaultValue | 设置@QueryParam参数的默认值 | 如果@QueryParam没有接收到值,就使用默认值。比如:@DefaultValue("description") @QueryParam("desc") String desc |
@FormParam | form传递的参数 | 接受form传递过来的参数。比如:@FormParam("name") String userName |
@BeanParam | 通过Bean的形式传递参数 | 接受client传递的bean类型的参数,同时这个bean可以在属性上配置@FormParam用以解决client的属性名称和bean的属性名称不一致的问题。比如:@BeanParam User user |
@Context | 获得一些系统环境信息 | 通过@Context可以获得以下信息:UriInfo、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等 |
@XmlRootElement | 将bean转换为xml |
如果要将bean以xml或json的格式返回,必须要这个注解。比如:
@XmlRootElement
public class User{...}
|
@XmlElements | ||
@XmlElement |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?