Rest之路 - 第一个Rest程序
在 Eclipse 里新建一个 Dynamic project
将 Jersey 的 jar 包,拷贝到 WebContent -> WEB-INF -> lib 文件夹
Add jars to "build path"
根据业务层次编写程序
User
- package com.example.tuo.rest.entity;
- import javax.xml.bind.annotation.XmlRootElement;
- @XmlRootElement(name="user")
- public class User {
- private int id;
- private String name;
- private String profession;
- public int getId() {
- return id;
- }
- //@XmlElement
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- //@XmlElement
- public void setName(String name) {
- this.name = name;
- }
- public String getProfession() {
- return profession;
- }
- //@XmlElement
- public void setProfession(String profession) {
- this.profession = profession;
- }
- public User() {
- super();
- // TODO Auto-generated constructor stub
- }
- public User(int id, String name, String profession) {
- super();
- this.id = id;
- this.name = name;
- this.profession = profession;
- }
- }
P.S 由于后面使用XML格式进行数据展现,在这里使用了@XMLRootElement和@XMLElement 注解。
UserDao
- package com.example.tuo.rest.dao;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.util.ArrayList;
- import java.util.List;
- import com.example.tuo.rest.entity.User;
- public class UserDao {
- private final String CONFIG_FILE = "D:/User.dat";
- public List<User> getAllUsers()
- {
- List<User> uList = null;
- File file = new File(CONFIG_FILE);
- if(!file.exists()){
- User u = new User(1,"tuo","software engineer");
- uList= new ArrayList<User>();
- uList.add(u);
- saveUserList(uList);
- }
- else{
- FileInputStream in = null;
- ObjectInputStream oin = null;
- try {
- in = new FileInputStream(file);
- oin = new ObjectInputStream(in);
- uList=(List<User>) oin.readObject();
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- finally{
- try {
- if(oin != null)
- oin.close();
- if(in != null)
- in.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- return uList;
- }
- private void saveUserList(List<User> userList){
- try {
- File file = new File(CONFIG_FILE);
- FileOutputStream fos;
- fos = new FileOutputStream(file);
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- oos.writeObject(userList);
- oos.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
在这里,使用了一个在磁盘上的文件作模拟数据库的存储
UserService
- package com.example.tuo.rest.service;
- import java.util.List;
- import javax.ws.rs.GET;
- import javax.ws.rs.Path;
- import javax.ws.rs.Produces;
- import javax.ws.rs.core.MediaType;
- import com.example.tuo.rest.dao.UserDao;
- import com.example.tuo.rest.entity.User;
- @Path("/UserService")
- public class UserService {
- private UserDao userDao = new UserDao();
- @GET
- @Path("/users")
- @Produces(MediaType.APPLICATION_XML)
- public List<User> getAllUsers(){
- return userDao.getAllUsers();
- }
- }
使用 @Path 注解,制定了 Rest 的路径(完整路径为:project/class/method)
使用 @GET 注解,标识 Rest 方法的类型
使用 @Produces(MediaType.APPLICATION_XML) 注解,标识数据表现的格式为 XML
修改 Web.xml configuration File
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
- <display-name>FirstHeadRestfulWebService</display-name>
- <servlet>
- <servlet-name>My Jersey restful service</servlet-name>
- <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
- <init-param>
- <param-name>jersey.config.server.provider.packages</param-name>
- <param-value>com.example.tuo.rest.service</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>My Jersey restful service</servlet-name>
- <url-pattern>/rest/*</url-pattern>
- </servlet-mapping>
- </web-app>
注: 橙色部分表明需要扫描的包, 即 service 所在的 package
启动Rest服务并且验证
输入rest 服务地址 http://localhost:8080/FirstHeadRestfulWebService/rest/UserService/users
FirstHeadRestfulWebService - 项目目录(名称)
rest - web.xml配置的根目录
UserService/users - Class 路径 + Method 路径
Rest之路 - 第一个Rest程序的更多相关文章
- 0~5年一个Java程序员的晋升之路
在程序界流行着一种默认的说法叫“黄金5年”,也就是一个程序员从入职的时候算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向,如何走好这5年,彻底从一个刚入行的菜鸟蜕变成可以以不变应万变 ...
- 一个JAVA程序员成长之路分享
我搞JAVA也有些日子了, 因为我比较贪玩,上进心不那么强, 总是逼不得已为了高薪跳槽才去学习, 所以也没混成什么大牛, 但好在现在也已经成家立业, 小日子过的还算滋润, 起码顶得住一月近万元的吃喝拉 ...
- Java 学习之路(1)第一个Java程序
Hello World程序 在编程语言的世界里,第一个编程语言估计就是输出Hello World了吧. /** * 编写第一个Java程序,输出Hello World! * @author LJS * ...
- Coding girl一个老程序员谈到的一个女程序员的故事
因为有人说我给一个女程序员的建议不靠谱,我不服,因为我的工作经历中的一些女程序员都很不错,比那些男程序员都强,所以,我在新浪微博和twitter上征集女程序员的故事和想法,这两天来,我收到了好几封邮件 ...
- 我的VSTO之路(二):VSTO程序基本知识
原文:我的VSTO之路(二):VSTO程序基本知识 开始之前,首先我介绍一下我的开发环境:VS2010 + Office 2010,是基于.Net framework 4.0和VSTO 4.0.以下的 ...
- 手把手教你优雅的编写第一个SpringMVC程序
可能之前写的文章走进SpringMVC世界,从SpringMVC入门到SpringMVC架构中的第一个springMVC入门程序讲解的不是那么优雅.细致.精巧,因此特地写这篇稍微优雅.细致.精巧一些的 ...
- 【拥抱元宇宙】创建你的第一个Unity程序HelloWorld,并发布
第一个Unity程序--Hello World. 1.需要先下载一个Unity Hub,以及安装Unity编辑器.Unity Hub需要登陆,激活码可以选择个人用户,免费的.免费的无法改变启动画面,其 ...
- DirectX游戏编程(一):创建一个Direct3D程序
一.环境 Visual Studio 2012,DirectX SDK (June 2010) 二.准备 1.环境变量(如没有配置请添加) 变量名:DXSDK_DIR 变量值:D:\Software\ ...
- 第一个python程序
一个python程序的两种执行方式: 1.第一种方式是通过python解释器: cmd->python->进入python解释器->编写python代码->回车. 2.第二种方 ...
随机推荐
- Java泛型中的标记符含义
Java泛型中的标记符含义: E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number ...
- Shell 双括号概述
1. 比较两个数的大小 #!/bin/bash ## 定义变量 a= b= ## 方法1,一个方括号,需要转义 if [ $a \> $b ];then echo "方法1:yes&q ...
- 不要忘了 :focus 和 :active!
很多人在给页面元素设计样式时忽略了它们的状态,只考虑了用户使用鼠标操作,忘记了用户也许是用键盘操作.请用 :focus 和 :active 标明它们的状态: a:hover, a:active, a: ...
- 0 与 “0" 与 '\0' 与 '0'相互之间的区别
1. '\0'和‘0’都是字符,对应的ASCII值分别是0和48. 2. 0表示一个数字.也可以表示ASCII值,对应字符'\0'. 3. “0”表示字符串,第一个字符是'0'.
- Linux CentOS服务启动
Linux CentOS下如何确认MySQL服务已经启动 Linux CentOS一般做为服务器使用,因此,MySQL服务应该随开机自动启动的.正常情况下,查看开机自动启动的服务使用chkconf ...
- 转:Hive性能优化之ORC索引–Row Group Index vs Bloom Filter Index
之前的文章<更高的压缩比,更好的性能–使用ORC文件格式优化Hive>中介绍了Hive的ORC文件格式,它不但有着很高的压缩比,节省存储和计算资源之外,还通过一个内置的轻量级索引,提升查询 ...
- 011——VUE中使用object与array控制class
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- win8 商店应用 概观
外观: 1,适应性好.可以在各种外形规格和显示大小上正确的展示数据. 2,磁贴. 交互方式: 1,应用栏.使用应用栏可以向用户显示命令和工具.默认情况下,应用栏会被隐藏,当用户使用手指从屏幕的底部边缘 ...
- 抓https包
一.charles抓https 1.打开charles,打开Help--SSL Proxy--Install Charles Root Certificate,charles安装证书,傻瓜式安装即可 ...
- Sublime Text 3打开gbk编码的文件中文乱码的问题
正在开发Wordpress主题,网上下载了一个博客模板,打开之后,发现里面的中文全是乱码 毕竟这玩意是外国人的东西,gbk是中文专用的编码,不支持很正常. 网上查了一下资料,需要安装一个Convert ...