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.第二种方 ...
随机推荐
- activity启动模式之singleInstance
activity启动模式之singleInstance 一.简介 Log.d("C2", getTaskId()+"");里面的getTaskId()可以获取a ...
- TCP/UDP编程步骤和区别
一. 概念解析 套接字:一种特殊的文件描述符.一头指向套接字地址(用户),一头指向套接字结构(内核). 套接字结构:由内核维持的一种数据结构,可通过套接字来操作. 套接字地址:ip和port. 二. ...
- 【spark】【问题】textFile找不到文件
2018/5/9 关于textFile读取文件的问题 问题描述: 今天第一次使用spark-shell来读取文件,我在本地建立了一个text.txt文件,然后用textFile读取生成rdd. 但是执 ...
- Win7系统搭建WiFi热点详细攻略
(转自:http://blog.csdn.net/gisredevelopment/article/details/16113889) 一.如果你之前没有在笔记本上搭建过WiFi,那么恭喜你,你的笔记 ...
- C#在winform中操作数据库,实现数据增删改查
1.前言: 运行环境:VS2013+SQL2008+Windows10 程序界面预览: 使用的主要控件:dataGridview和menuStrip等. 2.功能具体介绍: 1.首先,我们要先实现基本 ...
- Elasticsearch Painless语言(实现搜索打分基础)
With the release of Elasticsearch 5.x came Painless, Elasticsearch's answer to safe, secure, and per ...
- Week03-Java学习笔记第三次作业
Week03-面向对象入门 1.本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系. ...
- Arcgis Android API开发之离线地图
最近一直在倒腾Arcgis Android API等相关的东西,想把自己的做的图放到地图上去,也就是离线地图,穷人一般是没有钱的,一个月好几十的流量是开不起的,所以就左捉摸,右思考,看着API里面有离 ...
- 修改CentOS7网卡名称为传统名称eth0格式
1.调整网卡名称 进入网卡目录```[root@tools]# cd/etc/sysconfig/network-scripts/``` 修改名称```[root@network-scripts]# ...
- (十)js获取日期
//将日期转换成字符串格式输出 function formatDateToString(){ // 先获取对象日期 var oDate = new Date(); // 从该对象中分别拿出所需要的 年 ...