restful java demo_java通过servlet实现restful接口示例

参考原文https://blog.csdn.net/a249130/article/details/81302123

项目结构:

57a2d7f970fd524cce430f6406576287.png

JsonServlet接口:

package com.demo;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.json.JSONException;

import org.json.JSONObject;

public class JsonServlet extends HttpServlet{

private static final long serialVersionUID = 1L;

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String page = req.getParameter("page");

// 将数据添加到数组

List newslist = new ArrayList();

if (page == null || page.equals("0")) {

newslist.add("1");

newslist.add("2");

newslist.add("3");

newslist.add("4");

newslist.add("5");

newslist.add("6");

}else {

newslist.add("01");

newslist.add("001");

newslist.add("0001");

newslist.add("00001");

newslist.add("000001");

newslist.add("00000001");

}

// 调用json.jar工具封装json

JSONObject object = new JSONObject();

for(String str : newslist){

try {

object.put(str, str+":"+page);

}catch (JSONException e) {

e.printStackTrace();

}

}

String json = object.toString();

// 输出到界面

System.out.println(json);

resp.setContentType("text/plain");

resp.setCharacterEncoding("gb2312");

PrintWriter out = new PrintWriter(resp.getOutputStream());

out.print(json);

out.flush();

// 更多Json转换使用请看JsonTest类

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

this.doGet(req, resp);

}

}

index.jsp:

pageEncoding="utf-8"%>

Insert title here

web.xml:

JsonTest

index.jsp

JsonServlet

com.demo.JsonServlet

JsonServlet

/getJson

tomcat中启动访问

f58b31c33e69a8e6d6b459818cbf014c.png

a51d0de1887e10880d01f178b1146bc0.png

————————————————

版权声明:本文为CSDN博主「景恩」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/niejingen/article/details/102742841

(1)项目简介 这个demo很简单,是一个记账小工程。用户可以注册、修改密码,可以记账、查找记账记录等。 (2)接口介绍 用户操作相关: post /users 用户注册 post /users/login 用户登录(这里我把login当成一个名词) put /users/pwd?userId=xxx&sign=xxx 用户修改密码 delete /users?uerId=xxx&sign=xxx 删除用户 记账记录操作相关: post /records?userId=xxx&sign=xxx 增加一条记账记录 get /records/:id?userId=xxx&sign=xxx 查询一条记账记录详情 put /records/:id?userId=xxx&sign=xxx 修改一条记账记录详情 get /records?查询参数&userId=xxx&sign=xxx 分页查询记账记录 delete /records/:id?userId=xxx&sign=xxx 删除一条记账记录 其中url中带sign参数的表示该接口需要鉴权,sign必须是url中最后一个参数。具体的鉴权方法是:用户登录后,服务器生成返回一个token,然后客户端要注意保存这个token,需要鉴权的接口加上sign签名,sign=MD5(url+token),这样可以避免直接传token从而泄露了token。这里我觉得接口最好还带一个时间戳参数timestamp,然后可以在服务端比较时间差,从而避免重放攻击。而且这样还有一个好处,就是如果有人截获了我们的请求,他想伪造我们的请求则不得不改时间戳参数(因为我们在服务器端会比较时间),这样一来sign势必会改变,他是无法得知这个sign的。如果我们没有加时间戳参数的话,那么,他截获了请求url,再重发这个请求势必又是一次合法的请求。我在这里为了简单一些,就不加时间戳了,因为这在开发测试阶段实在是太麻烦了。 (3)关于redis和数据库的说明 服务端在用户登录后,生成token,并将token保存到redis中。后面在接口鉴权的时候会取出token计算签名MD5(除sign外的url+token),进行比对。 这个demo搭建了一个redis主从复制,具体可以参考:http://download.csdn.net/detail/zhutulang/9585010 数据库使用mysql,脚本在 src/main/resources/accounting.sql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值