博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
根据URL获取参数值得出json结果集,对外给一个接口让别人调用
阅读量:6904 次
发布时间:2019-06-27

本文共 8415 字,大约阅读时间需要 28 分钟。

背景:测试接口的时候,经常都是后端get\post请求直接返回json结果集,很想知道实现方式,虽然心中也大概了解如何实现,但还不如自己来一遍踏实!

先来看一下结果吧:

以下对一个web的get接口进行解析:

一、分层架构图:因都是老生常谈,具体不详解,我的层级分的很清楚,数据读mysql库,理论上有基础的都看得懂

二、代码展示

(1)工具类-数据源连接

package util;import java.io.IOException;import java.io.InputStream;import java.util.Properties;/* * DAO层的工具类-读取数据库文件生成实例 */public class ConfigManager {	private static ConfigManager configManager;	private static Properties properties = null;	//构造方法私有化,用单例模式,一生成实例,就加载data.properties	private  ConfigManager(){		properties = new Properties();		InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream("data.properties");		try {			properties.load(is);		} catch (IOException e) {			e.printStackTrace();		}finally{			try {				is.close();			} catch (IOException e) {				e.printStackTrace();			}		}	}	//生成实例	public static ConfigManager getInstance(){		if(configManager==null){			configManager = new ConfigManager();		}		return configManager;		}	//得到属性值的方法	public static String getValue(String key){		return properties.getProperty(key);			}}

 ConfigManager只是为了读取data.properties文件中的各个数据源配置的值

jdbc.driver_class=com.mysql.jdbc.Driverjdbc.connection.url=jdbc\:mysql\://127.0.0.1\:3306/test?characterEncoding\=UTF-8jdbc.connection.username=rootjdbc.connection.password=root

 

package util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/* * 基类:获取数据库连接及关闭连接、数据库增删改和查询  工具类 * 对数据库的基本操作 */public class BaseDao {	private Connection connection=null;	private PreparedStatement pstm =null;	private ResultSet resultset = null;	//获取数据库连接	public boolean getconnection(){		boolean flag =false;		String driver = ConfigManager.getInstance().getValue("jdbc.driver_class");		String url =  ConfigManager.getInstance().getValue("jdbc.connection.url");		String username =  ConfigManager.getInstance().getValue("jdbc.connection.username");		String password =  ConfigManager.getInstance().getValue("jdbc.connection.password");		try {			Class.forName(driver);			connection = DriverManager.getConnection(url, username, password);			flag = true;		} catch (ClassNotFoundException e) {			e.printStackTrace();		} catch (SQLException e) {			e.printStackTrace();		}				return flag;			}	//增、删、改操作	public int executeUpdate(String sql,Object[] params){		int update = 0;		try {			//预加载sql			pstm = connection.prepareStatement(sql);			for(int i=0;i

 真正获取数据库连接,把增删除改查的方法集成工具类的,还得看BaseDao,你也可以一个java一锅炖,获取data.properties值,然后用到什么写什么

(2)dao和dao.impl

package dao;import java.util.List;import entity.News;/** * new表实现接口 * @author 0 * */public interface NewsDao {	public List
getrows(String where); }----------------------------package dao.impl;import java.sql.ResultSet;import java.sql.Timestamp;import java.util.ArrayList;import java.util.List;import util.BaseDao;import dao.NewsDao;import entity.News;/** * dao实现类 * @author 0 * */public class NewsDaoImpl extends BaseDao implements NewsDao { @Override public List
getrows(String where) { List
listnews=new ArrayList
(); News news=null; String sql="select id,title,createdate,createby,url from news where 1=1 "+where; Object[] params={}; System.out.println("sql==="+sql); if(this.getconnection()){ ResultSet rs = this.executeQuery(sql, params); try { while(rs.next()) { news = new News(); int id = rs.getInt("id"); String title = rs.getString("title"); Timestamp createdate = rs.getTimestamp("createdate"); String createby=rs.getString("createby"); String url=rs.getString("url"); news.setId(id); news.setTitle(title); news.setCreatedate(createdate); news.setCreateby(createby); news.setUrl(url); listnews.add(news); } } catch (Exception e) { e.printStackTrace(); } } return listnews; }}

 备注:这里要注意的是select最好写自己想要的字段,而不要写*

(3)service与service.impl

package service;import java.util.List;import entity.News;public interface NewsService {	public List
getrows(String where); }-------------------------------------------------------------package service.impl;import java.util.List;import dao.NewsDao;import dao.impl.NewsDaoImpl;import entity.News;import service.NewsService;public class NewsServiceImpl implements NewsService { private NewsDao newsdao=new NewsDaoImpl(); @Override public List
getrows(String where) { return newsdao.getrows(where); }}

 备注:可要可不要,我这没什么逻辑,所以可以不用。

(4)json字段

package util;import java.util.List;import entity.News;/** * 新建分页测试类NewTotal,主要用于Json分页显示 * @author 0 * */public class NewTotal {	private int totle;//总数	private List
rows;//新闻列表 public NewTotal() { } public NewTotal(int totle, List
rows) { this.totle = totle; this.rows = rows; } public int getTotle() { return totle; } public void setTotle(int totle) { this.totle = totle; } public List
getRows() { return rows; } public void setRows(List
rows) { this.rows = rows; } }

 备注:其实这里的2个字段定义,就是页面中出现的2个

(5)servlet

package servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.google.gson.Gson;import entity.News;import service.NewsService;import service.impl.NewsServiceImpl;import util.NewTotal;public class NewsInfoServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		NewsService newsService=new NewsServiceImpl();		String createby=request.getParameter("createby");		String page = request.getParameter("page");		String pageSize=request.getParameter("pageSize");		int pageNo=0;//页码		int pageS=0;//页码量		StringBuffer where=new StringBuffer();//where条件查询拼接字符串		//判断页码值或参数存不存在		if(page!=null &&!"".equals(page)){			pageNo=Integer.parseInt(page);		}else{//如果当前页码为空,则默认出第1页			pageNo=1;		}		if(pageSize!=null &&!"".equals(pageSize)){			 pageS=Integer.parseInt(pageSize);		}else{//如果页码容量为空,则默认出一页10条			pageS=10;		}		//判断创建者参数是否为空,并拼接字符串查询		if(createby!=null &&!"".equals(createby)){			where.append(" and createby like '%"+createby+"%'");		}		//如果页码值存在,页码容量不存在		if(pageNo>0 &&(pageSize==null &&"".equals(pageSize))){			where.append(" limit "+(pageNo-1)*10+",10");			System.out.println("第1");		}		//如果页码值存在,页码容量存在:实际上完全为空的情况已经排除掉了,如果都存在肯定则可能输入默认的情况		if(pageNo>0 && pageS>0){			where.append(" limit "+(pageNo-1)*pageS+","+pageS);				System.out.println("第2");		}		//如果页码值不存在,页码容量存在		if((page==null &&"".equals(page)) && pageS>0 ){			where.append(" limit 1,"+pageS);			System.out.println("第3");		}		System.out.println(where.toString());		List
listn=newsService.getrows(where.toString()); int totalCount=listn.size();//总量 //新数据封装到新闻总计类中 NewTotal nt=new NewTotal(totalCount, listn); //调用Gson Gson gson=new Gson(); String json=gson.toJson(nt); //输出到界面 System.out.println(json); response.setCharacterEncoding("text/plain"); response.setCharacterEncoding("utf-8"); PrintWriter out =new PrintWriter(response.getOutputStream()); out.print(json); out.flush(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

 备注:就这个想了一下,因为条件会比较多,各样条件,也有可能不是太充分有考虑,遇到bug再加吧~~~(我们这的开发都是这样的水平,哈哈)

(6)jsp页面与web.xml

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>              My JSP 'index.jsp' starting page	
This is my JSP page.

 

This is the description of my J2EE component
This is the display name of my J2EE component
NewsInfoServlet
servlet.NewsInfoServlet
NewsInfoServlet
/newsInfoServlet
index.jsp
JsonServlet
servlet.NewsInfoServlet
JsonServlet
/getJson

 

其实上面这个例子非常之简单,有一段时间没有碰代码了,写起来费了点时间,不过很多都是找旧代码拷过来的。

常时间不写代码就是这么生疏!!

ps:我的servlet写的都挺顺手,但是框架不行~框架不行~框架不行~~~

 

转载地址:http://brldl.baihongyu.com/

你可能感兴趣的文章
Ubuntu下Wine使用教程
查看>>
Java知多少(32)instanceof
查看>>
【LeetCode】187. Repeated DNA Sequences
查看>>
JS高级前端开发群加群说明及如何晋级
查看>>
Spring 3.1 Environment Profiles--转载
查看>>
Python 的三目运算
查看>>
继承、复写、重载等总结
查看>>
SQL 语句转换格式函数Cast、Convert
查看>>
其实,SSL也不是配通了就什么都不管的~~
查看>>
请不要用SECONDS_BEHIND_MASTER来衡量MYSQL主备的延迟时间【转】
查看>>
10个强大的Javascript表单验证插件推荐
查看>>
北邮iptv用WindowsMediaplayer打不开的解决的方法
查看>>
软件发布版本区别介绍-Alpha,Beta,RC,Release
查看>>
cdoj 1143 传输数据 最大流
查看>>
loadrunner 学习笔记--AJAX
查看>>
a5调试
查看>>
cocoa 的大招(KVC的几点强大应用记录)
查看>>
IOS7 导航栏适配二
查看>>
第1章 游戏之乐——NIM(3)两堆石头的游戏
查看>>
eclipse中新建python项目报错:Project interpreter not specified
查看>>