一:代码结构

二:框架结果:

spring+springMvc+springJdbc

三:源代码

1:Ctrl 层

package com.todaytech.yth.gdsd.base.DataInfo.Controller;import java.io.IOException;
import java.util.List;import javax.annotation.Resource;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.todaytech.yth.gdsd.base.DataInfo.Model.ZbInfoVo;
import com.todaytech.yth.gdsd.base.DataInfo.Service.LoginInfoCheckService;
import com.todaytech.yth.gdsd.base.DataInfo.Service.ZbInfoService;
import com.todaytech.yth.gdsd.base.DataInfo.Util.GetIPUtil;
import com.todaytech.yth.gdsd.base.DataInfo.Util.JasonUtil;
import com.todaytech.yth.gdsd.base.DataInfo.Util.JsonResult;
import com.todaytech.yth.gdsd.base.DataInfo.Util.StatusCode;
import com.tt.pwp.framework.prefs.PrefsManager;/***  信息化接口:指标信息* @author admin**/
@SuppressWarnings("unused")
@Controller
@RequestMapping("/DataInfor")
public class ZbInfoCtrl {@Resourceprivate PrefsManager prefsManager;private ZbInfoService zbis;private LoginInfoCheckService loginCheck;public ZbInfoService getZbis() {return zbis;}public void setZbis(ZbInfoService zbis) {this.zbis = zbis;}public LoginInfoCheckService getLoginCheck() {return loginCheck;}public void setLoginCheck(LoginInfoCheckService loginCheck) {this.loginCheck = loginCheck;}/*** 测试调用地址:http://localhost:8081/gdsd-all/DataInfor/zbInfo.do?login_unitno=0001&login_name=MDAwMQ==&login_pass=MTIzNDU2* 一个正常的服务调用接口* 返回有状态位的jason串* @param request* @param response* @return* @throws IOException* @throws ServletException*/@RequestMapping( value = "/zbInfo.do",produces = "application/json;charset=UTF-8")@ResponseBodypublic JsonResult  queryZbInfo(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException{Object data = null;//获取入参String login_unitno = request.getParameter("login_unitno");//接口接入单位编码String login_name = request.getParameter("login_name");//接口登录用户信息String login_pass = request.getParameter("login_pass");//接口登录密码String  ip=GetIPUtil.getIP(request);//获取请求用户的ip信息//做登录信息的校验int flag=loginCheck.checkUserInfo(login_unitno,login_name,login_pass,ip);//获取返回信息String  message= StatusCode.returnMessage(flag);try {//如果登录信息正常,则通过接口文档的入参信息查询返回的结果信息if(flag==200){List<ZbInfoVo> zivList = zbis.query( );   //无查询条件的查询数据//查询的结果信息 Jason序列化转换data=  JasonUtil.serialize(zivList);//实现 jason 对象JsonResult jr = new JsonResult(flag, message,data );//返回jason 对象return jr;}else{return new JsonResult(flag,message, data);}} catch (Exception e) {e.printStackTrace();return new JsonResult(StatusCode.EXCEPTION.getCode(), StatusCode.EXCEPTION.getMessage(), data);}}/*** 返回一个jason串* @param request* @param response* @throws IOException* @throws ServletException*/@RequestMapping( value = "/zbInfotest.do",produces = "application/json;charset=UTF-8")@ResponseBodypublic void queryZbInfoTest(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{RequestDispatcher rd;try {List<ZbInfoVo> zivList = zbis.query( );   //response.setContentType("application/json; charset=UTF-8");response.getWriter().print(JasonUtil.serialize(zivList));} catch (Exception e) {e.printStackTrace();}}
}

2:Model 层

package com.todaytech.yth.gdsd.base.DataInfo.Model;import java.math.BigDecimal;
import java.sql.Date;/***  信息化接口:指标信息* @author admin**/
public class ZbInfoVo {private long    id             ;//指标账id                                                             private String  bdgyear          ;//年度                                                                 private long  unitid           ;//单位id                                                               private String  src_id           ;//资金来源                                                             private String  bdgt_id_type     ;//功能科目类型id                                                        private long  budgetid         ;//功能分类科目id                                                        private long  prj_id           ;//项目id                                                               private long  item_id          ;//经济分类科目id                                                        private BigDecimal   zb_amt           ;//总指标                                                               private BigDecimal  direct_amt       ;//直接支付指标                                                          private BigDecimal  accredit_amt     ;//授权支付指标                                                          private BigDecimal  direct_plan      ;//已报用款计划直接支付金额                                              private BigDecimal  accredit_plan    ;//已报用款计划授权支付金额                                              private String  tradition_amt    ;//一般支付指标                                                          private int  org_id           ;//负责科室关联pwp_org                                                   private String  adjlevel         ;//预算级次(0本级1上级)                                                  private String  yearbal_status   ;//是否已生成结转(0否;1是)                                               private String  zb_project_type  ;//项目类型(取项目预算的项目类型字段值)                                  private String  is_heding        ;//是否结转(0否;1是)                                                     private BigDecimal  early_amt        ;//年初指标                                                             private BigDecimal  early_change_amt ;//年初变动指标                                                          private BigDecimal  additional_amt   ;//追加变动指标                                                          private BigDecimal  tradition_num    ;//一般支付发生数                                                        private String  fundtype         ;//经费类型(1人员经费2公用经费3项目经费4区统筹经费5镇街经费)              private int  issue_num        ;//下达次数                                                             private String  bz               ;//备注                                                                 private String  is_unify         ;//是否统发工资(0否;1是)                                                 private String  is_freeze        ;//是否冻结(0不冻结;1冻结)                                               private String  origin_id        ;//经费来源id(对应ys_ryjfyssb_detail、ys_gyjfysgl_detail、ys_xmyssqb_detail的id) private String  entire_manage    ;//封套管理(0封套内,1封套外)                                             private String  send_status      ;//发送状态(0待确认,1待发送,2已发送)                                     private String  unitno           ;//单位编码(bs_bdg_unit)                                                private String  budgetno         ;//功能分类科目编码                                                      private String  itemno           ;//经济分类代码(bs_jjflyskm:econ_bdgid)                                  private String  prj_code         ;//项目代码(bs_xmk :prj_code)                                           private String  freeze_reason    ;//冻结原因                                                             private long  freeze_account   ;//冻结人                                                               private String  freeze_time      ;//冻结时间                                                             private String  unfreeze_account ;//解冻人                                                               private Date  unfreeze_time    ;//解冻时间                                                             private Date  create_Date      ;//指标下达时间                                                          private long  source_zb_id     ;//(被结转的)源指标                                                      private int  yearbal_no       ;//指标结转次数                                                          private String  is_toback        ;//是否收回(0否;1是)                                                     private Date  toback_Date      ;//收回时间                                                             private String  zb_issuedtype    ;//指标下达类型(0:年初预算下达1:调整预算下达2:年终指标结转下达3:跨年部分退款) private BigDecimal  toback_amt       ;//年终回收指标                                                          public long getId() {return id;}public void setId(long id) {this.id = id;}public String getBdgyear() {return bdgyear;}public void setBdgyear(String bdgyear) {this.bdgyear = bdgyear;}public long getUnitid() {return unitid;}public void setUnitid(long unitid) {this.unitid = unitid;}public String getSrc_id() {return src_id;}public void setSrc_id(String src_id) {this.src_id = src_id;}public String getBdgt_id_type() {return bdgt_id_type;}public void setBdgt_id_type(String bdgt_id_type) {this.bdgt_id_type = bdgt_id_type;}public long getBudgetid() {return budgetid;}public void setBudgetid(long budgetid) {this.budgetid = budgetid;}public long getPrj_id() {return prj_id;}public void setPrj_id(long prj_id) {this.prj_id = prj_id;}public long getItem_id() {return item_id;}public void setItem_id(long item_id) {this.item_id = item_id;}public BigDecimal getZb_amt() {return zb_amt;}public void setZb_amt(BigDecimal zb_amt) {this.zb_amt = zb_amt;}public BigDecimal getDirect_amt() {return direct_amt;}public void setDirect_amt(BigDecimal direct_amt) {this.direct_amt = direct_amt;}public BigDecimal getAccredit_amt() {return accredit_amt;}public void setAccredit_amt(BigDecimal accredit_amt) {this.accredit_amt = accredit_amt;}public BigDecimal getDirect_plan() {return direct_plan;}public void setDirect_plan(BigDecimal direct_plan) {this.direct_plan = direct_plan;}public BigDecimal getAccredit_plan() {return accredit_plan;}public void setAccredit_plan(BigDecimal accredit_plan) {this.accredit_plan = accredit_plan;}public String getTradition_amt() {return tradition_amt;}public void setTradition_amt(String tradition_amt) {this.tradition_amt = tradition_amt;}public int getOrg_id() {return org_id;}public void setOrg_id(int org_id) {this.org_id = org_id;}public String getAdjlevel() {return adjlevel;}public void setAdjlevel(String adjlevel) {this.adjlevel = adjlevel;}public String getYearbal_status() {return yearbal_status;}public void setYearbal_status(String yearbal_status) {this.yearbal_status = yearbal_status;}public String getZb_project_type() {return zb_project_type;}public void setZb_project_type(String zb_project_type) {this.zb_project_type = zb_project_type;}public String getIs_heding() {return is_heding;}public void setIs_heding(String is_heding) {this.is_heding = is_heding;}public BigDecimal getEarly_amt() {return early_amt;}public void setEarly_amt(BigDecimal early_amt) {this.early_amt = early_amt;}public BigDecimal getEarly_change_amt() {return early_change_amt;}public void setEarly_change_amt(BigDecimal early_change_amt) {this.early_change_amt = early_change_amt;}public BigDecimal getAdditional_amt() {return additional_amt;}public void setAdditional_amt(BigDecimal additional_amt) {this.additional_amt = additional_amt;}public BigDecimal getTradition_num() {return tradition_num;}public void setTradition_num(BigDecimal tradition_num) {this.tradition_num = tradition_num;}public String getFundtype() {return fundtype;}public void setFundtype(String fundtype) {this.fundtype = fundtype;}public int getIssue_num() {return issue_num;}public void setIssue_num(int issue_num) {this.issue_num = issue_num;}public String getBz() {return bz;}public void setBz(String bz) {this.bz = bz;}public String getIs_unify() {return is_unify;}public void setIs_unify(String is_unify) {this.is_unify = is_unify;}public String getIs_freeze() {return is_freeze;}public void setIs_freeze(String is_freeze) {this.is_freeze = is_freeze;}public String getOrigin_id() {return origin_id;}public void setOrigin_id(String origin_id) {this.origin_id = origin_id;}public String getEntire_manage() {return entire_manage;}public void setEntire_manage(String entire_manage) {this.entire_manage = entire_manage;}public String getSend_status() {return send_status;}public void setSend_status(String send_status) {this.send_status = send_status;}public String getUnitno() {return unitno;}public void setUnitno(String unitno) {this.unitno = unitno;}public String getBudgetno() {return budgetno;}public void setBudgetno(String budgetno) {this.budgetno = budgetno;}public String getItemno() {return itemno;}public void setItemno(String itemno) {this.itemno = itemno;}public String getPrj_code() {return prj_code;}public void setPrj_code(String prj_code) {this.prj_code = prj_code;}public String getFreeze_reason() {return freeze_reason;}public void setFreeze_reason(String freeze_reason) {this.freeze_reason = freeze_reason;}public long getFreeze_account() {return freeze_account;}public void setFreeze_account(long freeze_account) {this.freeze_account = freeze_account;}public String getFreeze_time() {return freeze_time;}public void setFreeze_time(String freeze_time) {this.freeze_time = freeze_time;}public String getUnfreeze_account() {return unfreeze_account;}public void setUnfreeze_account(String unfreeze_account) {this.unfreeze_account = unfreeze_account;}public Date getUnfreeze_time() {return unfreeze_time;}public void setUnfreeze_time(Date unfreeze_time) {this.unfreeze_time = unfreeze_time;}public Date getCreate_Date() {return create_Date;}public void setCreate_Date(Date create_Date) {this.create_Date = create_Date;}public long getSource_zb_id() {return source_zb_id;}public void setSource_zb_id(long source_zb_id) {this.source_zb_id = source_zb_id;}public int getYearbal_no() {return yearbal_no;}public void setYearbal_no(int yearbal_no) {this.yearbal_no = yearbal_no;}public String getIs_toback() {return is_toback;}public void setIs_toback(String is_toback) {this.is_toback = is_toback;}public Date getToback_Date() {return toback_Date;}public void setToback_Date(Date toback_Date) {this.toback_Date = toback_Date;}public String getZb_issuedtype() {return zb_issuedtype;}public void setZb_issuedtype(String zb_issuedtype) {this.zb_issuedtype = zb_issuedtype;}public BigDecimal getToback_amt() {return toback_amt;}public void setToback_amt(BigDecimal toback_amt) {this.toback_amt = toback_amt;}@Overridepublic String toString() {return "ZbInfoVo [id=" + id + ", bdgyear=" + bdgyear + ", unitid="+ unitid + ", src_id=" + src_id + ", bdgt_id_type="+ bdgt_id_type + ", budgetid=" + budgetid + ", prj_id="+ prj_id + ", item_id=" + item_id + ", zb_amt=" + zb_amt+ ", direct_amt=" + direct_amt + ", accredit_amt="+ accredit_amt + ", direct_plan=" + direct_plan+ ", accredit_plan=" + accredit_plan + ", tradition_amt="+ tradition_amt + ", org_id=" + org_id + ", adjlevel="+ adjlevel + ", yearbal_status=" + yearbal_status+ ", zb_project_type=" + zb_project_type + ", is_heding="+ is_heding + ", early_amt=" + early_amt+ ", early_change_amt=" + early_change_amt+ ", additional_amt=" + additional_amt + ", tradition_num="+ tradition_num + ", fundtype=" + fundtype + ", issue_num="+ issue_num + ", bz=" + bz + ", is_unify=" + is_unify+ ", is_freeze=" + is_freeze + ", origin_id=" + origin_id+ ", entire_manage=" + entire_manage + ", send_status="+ send_status + ", unitno=" + unitno + ", budgetno=" + budgetno+ ", itemno=" + itemno + ", prj_code=" + prj_code+ ", freeze_reason=" + freeze_reason + ", freeze_account="+ freeze_account + ", freeze_time=" + freeze_time+ ", unfreeze_account=" + unfreeze_account + ", unfreeze_time="+ unfreeze_time + ", create_Date=" + create_Date+ ", source_zb_id=" + source_zb_id + ", yearbal_no="+ yearbal_no + ", is_toback=" + is_toback + ", toback_Date="+ toback_Date + ", zb_issuedtype=" + zb_issuedtype+ ", toback_amt=" + toback_amt + "]";}}

package com.todaytech.yth.gdsd.base.DataInfo.Model;/*** 单位信息* @author admin**/
public class DataInfoUnitInfoVo {private String unitno; //单位编码private String login_name; //单位登录信息private String login_pass;//单位校验密码private String login_ipinfo ;//单位发送请求的ip信息public String getUnitno() {return unitno;}public void setUnitno(String unitno) {this.unitno = unitno;}public String getLogin_name() {return login_name;}public void setLogin_name(String login_name) {this.login_name = login_name;}public String getLogin_pass() {return login_pass;}public void setLogin_pass(String login_pass) {this.login_pass = login_pass;}public String getLogin_ipinfo() {return login_ipinfo;}public void setLogin_ipinfo(String login_ipinfo) {this.login_ipinfo = login_ipinfo;}@Overridepublic String toString() {return "DataInfoUnitInfoVo [unitno=" + unitno + ", login_name="+ login_name + ", login_pass=" + login_pass + ", login_ipinfo="+ login_ipinfo + "]";}}

3:RowMap 数据逻辑处理层

package com.todaytech.yth.gdsd.base.DataInfo.RowMap;import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;import org.springframework.jdbc.core.RowMapper;/** 文件名:LocalRowMapper.java* 版权:Copyright 2007-2017 517na Tech. Co. Ltd. All Rights Reserved.* 描述: LocalRowMapper.java* 修改人:xiaofan* 修改时间:2017年3月19日* 修改内容:新增*/public class LocalRowMapper<T> implements RowMapper<T> {/*** 添加字段注释.*/private Class<?> targetClazz;/*** 添加字段注释.*/private HashMap<String, Field> fieldMap;/*** 构造函数.** @param targetClazz*            .*/public LocalRowMapper(Class<?> targetClazz) {this.targetClazz = targetClazz;fieldMap = new HashMap<>();Field[] fields = targetClazz.getDeclaredFields();for (Field field : fields) {// 同时存入大小写,如果表中列名区分大小写且有列ID和列iD,则会出现异常。// 阿里开发公约,建议表名、字段名必须使用小写字母或数字;禁止出现数字开头,禁止两个下划线中间只出现数字。fieldMap.put(field.getName(), field);// fieldMap.put(getFieldNameUpper(field.getName()), field);}}/*** {@inheritDoc}.*/@SuppressWarnings("unchecked")@Overridepublic T mapRow(ResultSet rs, int arg1) throws SQLException {T obj = null;try {obj = (T) targetClazz.newInstance();final ResultSetMetaData metaData = rs.getMetaData();int columnLength = metaData.getColumnCount();String columnName = null;for (int i = 1; i <= columnLength; i++) {columnName = metaData.getColumnName(i);if(fieldMap.get(columnName.toLowerCase())!=null){  //刘军20190318修改Field field = fieldMap.get(columnName.toLowerCase());Class fieldClazz = fieldMap.get(columnName.toLowerCase()).getType() ;field.setAccessible(true);// fieldClazz == Character.class || fieldClazz == char.classif (fieldClazz == int.class || fieldClazz == Integer.class) { // intfield.set(obj, rs.getInt(columnName));} else if (fieldClazz == boolean.class || fieldClazz == Boolean.class) { // booleanfield.set(obj, rs.getBoolean(columnName));} else if (fieldClazz == String.class) { // stringfield.set(obj, rs.getString(columnName));} else if (fieldClazz == float.class) { // floatfield.set(obj, rs.getFloat(columnName));} else if (fieldClazz == double.class || fieldClazz == Double.class) { // doublefield.set(obj, rs.getDouble(columnName));} else if (fieldClazz == BigDecimal.class) { // bigdecimalfield.set(obj, rs.getBigDecimal(columnName));} else if (fieldClazz == short.class || fieldClazz == Short.class) { // shortfield.set(obj, rs.getShort(columnName));} else if (fieldClazz == Date.class) { // datefield.set(obj, rs.getDate(columnName));} else if (fieldClazz == Timestamp.class) { // timestampfield.set(obj, rs.getTimestamp(columnName));} else if (fieldClazz == Long.class || fieldClazz == long.class) { // longfield.set(obj, rs.getLong(columnName));}field.setAccessible(false);}}} catch (Exception e) {e.printStackTrace();}return obj;}/*** 方法首字母大写.** @param fieldName*            字段名.* @return 字段名首字母大写.*/private String getFieldNameUpper(String fieldName) {char[] cs = fieldName.toCharArray();cs[0] -= 32; // 方法首字母大写return String.valueOf(cs);}
}

4:Service 服务层

package com.todaytech.yth.gdsd.base.DataInfo.Service;import java.util.List;import com.todaytech.yth.gdsd.base.DataInfo.Model.ZbInfoVo;/***  信息化接口:指标信息* @author admin**/
public interface ZbInfoService {List<ZbInfoVo> query();}

package com.todaytech.yth.gdsd.base.DataInfo.Service;/*** 数据信息化接口登录校验* @author admin**/
public interface LoginInfoCheckService {/***  数据信息化接口登录校验* @param login_unitno* @param login_name* @param login_pass* @param ip* @return*/public int checkUserInfo (String login_unitno, String login_name, String login_pass, String ip);}

package com.todaytech.yth.gdsd.base.DataInfo.Service.imp;import java.util.List;import javax.annotation.Resource;import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import com.todaytech.yth.gdsd.base.DataInfo.Model.ZbInfoVo;
import com.todaytech.yth.gdsd.base.DataInfo.RowMap.LocalRowMapper;
import com.todaytech.yth.gdsd.base.DataInfo.Service.ZbInfoService;
import com.tt.pwp.framework.data.dao.Dao;
/***  信息化接口:指标信息* @author admin**/
@Service
@Transactional
public class ZbInfoServiceImp  implements ZbInfoService {@Resourceprivate Dao defaultDao;@SuppressWarnings("unchecked")@Overridepublic List<ZbInfoVo> query() {String sql="select *  from  zb_bal  z where  z.BDGYEAR=to_char(sysdate,'yyyy')";JdbcTemplate jdbcTemplate=defaultDao.getJdbcTemplate();List<ZbInfoVo> zivList =  jdbcTemplate.query(sql, new LocalRowMapper(ZbInfoVo.class)) ;return zivList ;}}

package com.todaytech.yth.gdsd.base.DataInfo.Model;/*** 单位信息* @author admin**/
public class DataInfoUnitInfoVo {private String unitno; //单位编码private String login_name; //单位登录信息private String login_pass;//单位校验密码private String login_ipinfo ;//单位发送请求的ip信息public String getUnitno() {return unitno;}public void setUnitno(String unitno) {this.unitno = unitno;}public String getLogin_name() {return login_name;}public void setLogin_name(String login_name) {this.login_name = login_name;}public String getLogin_pass() {return login_pass;}public void setLogin_pass(String login_pass) {this.login_pass = login_pass;}public String getLogin_ipinfo() {return login_ipinfo;}public void setLogin_ipinfo(String login_ipinfo) {this.login_ipinfo = login_ipinfo;}@Overridepublic String toString() {return "DataInfoUnitInfoVo [unitno=" + unitno + ", login_name="+ login_name + ", login_pass=" + login_pass + ", login_ipinfo="+ login_ipinfo + "]";}}

5:工具类层

package com.todaytech.yth.gdsd.base.DataInfo.Util;import java.io.UnsupportedEncodingException;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;/**** BASE64加密解密** @author YUANWEi*/
@SuppressWarnings("restriction")
public class BASE64Util {/*** BASE64解密* @param key* @return* @throws Exception*/public static byte[] decryptBASE64(String key) throws Exception {return (new BASE64Decoder()).decodeBuffer(key);}/*** BASE64加密* @param key* @return* @throws Exception*/public static String encryptBASE64(byte[] key) throws Exception {return (new BASE64Encoder()).encodeBuffer(key);}// 加密public static String getBase64(String str) {byte[] b = null;String s = null;try {b = str.getBytes("utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}if (b != null) {s = new BASE64Encoder().encode(b);}return s;}// 解密public static String getFromBase64(String s) {byte[] b = null;String result = null;if (s != null) {BASE64Decoder decoder = new BASE64Decoder();try {b = decoder.decodeBuffer(s);result = new String(b, "utf-8");} catch (Exception e) {e.printStackTrace();}}return result;}public static void main(String[] args) {String key="1234567890qwertyuiopasdfghjklzxcvbnm";System.out.println(getFromBase64(getBase64(key)));System.out.println(getBase64("0001"));}}

package com.todaytech.yth.gdsd.base.DataInfo.Util;import javax.servlet.http.HttpServletRequest;/*** 获取ip访客的ip信息* @author admin**/
public class GetIPUtil {public static String getIP(HttpServletRequest request){String ip = request.getHeader("x-forwarded-for");if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();/* if(ip.equals("127.0.0.1")){//根据网卡取本机配置的IPInetAddress inet=null;try {inet = InetAddress.getLocalHost();} catch (Exception e) {e.printStackTrace();}ip= inet.getHostAddress();} */}// 多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割  if(ip != null && ip.length() > 15){if(ip.indexOf(",")>0){ip = ip.substring(0,ip.indexOf(","));}}return ip;}}

package com.todaytech.yth.gdsd.base.DataInfo.Util;import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;import com.alibaba.fastjson.JSON;/**** @author admin**/
public class JasonUtil {private static final String DEFAULT_CHARSET_NAME = "UTF-8";// 获得请求的报文,并作简单的校验public String getInJson(HttpServletRequest request) throws IOException {byte buffer[] = new byte[64 * 1024];InputStream in = request.getInputStream();// 获取输入流对象int len = in.read(buffer);// 必须对数组长度进行判断,否则在new byte[len]会报NegativeArraySizeException异常if (len < 0) {throw new IOException("请求报文为空");}String encode = request.getCharacterEncoding();// 获取请求头编码// 必须对编码进行校验,否则在new String(data, encode);会报空指针异常if (null == encode || encode.trim().length() < 0) {throw new IOException("请求报文未指明请求编码");}byte data[] = new byte[len];// 把buffer数组的值复制到data数组System.arraycopy(buffer, 0, data, 0, len);// 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 StringString inJson = new String(data, encode);return inJson;}public String Object2Json(Object obj) {JSONObject json = JSONObject.fromObject(obj);// 将java对象转换为json对象String str = json.toString();// 将json对象转换为字符串return str;}/*** List集合转换成JSON对象* @author admin**/public static <T> String serialize(T object) {return JSON.toJSONString(object);}public static <T> T deserialize(String string, Class<T> clz) {return JSON.parseObject(string, clz);}public static <T> T load(Path path, Class<T> clz) throws IOException {return deserialize(new String(Files.readAllBytes(path),DEFAULT_CHARSET_NAME), clz);}public static <T> void save(Path path, T object) throws IOException {if (Files.notExists(path.getParent())) {Files.createDirectories(path.getParent());}Files.write(path, serialize(object).getBytes(DEFAULT_CHARSET_NAME),StandardOpenOption.WRITE, StandardOpenOption.CREATE,StandardOpenOption.TRUNCATE_EXISTING);}/**** 将List对象序列化为JSON文本*/public static <T> String toJSONString(List<T> list) {JSONArray jsonArray = JSONArray.fromObject(list);return jsonArray.toString();}/**** 将对象序列化为JSON文本** @param object* @return*/public static String toJSONString(Object object) {JSONArray jsonArray = JSONArray.fromObject(object);return jsonArray.toString();}/**** 将JSON对象数组序列化为JSON文本** @param jsonArray* @return*/public static String toJSONString(JSONArray jsonArray) {return jsonArray.toString();}/**** 将JSON对象序列化为JSON文本** @param jsonObject* @return*/public static String toJSONString(JSONObject jsonObject) {return jsonObject.toString();}/**** 将对象转换为List对象** @param object* @return*/@SuppressWarnings({ "rawtypes", "unchecked" })public static List toArrayList(Object object) {List arrayList = new ArrayList();JSONArray jsonArray = JSONArray.fromObject(object);Iterator it = jsonArray.iterator();while (it.hasNext()) {JSONObject jsonObject = (JSONObject) it.next();Iterator keys = jsonObject.keys();while (keys.hasNext()) {Object key = keys.next();Object value = jsonObject.get(key);arrayList.add(value);}}return arrayList;}/**** 将对象转换为Collection对象** @param object* @return*/@SuppressWarnings("rawtypes")public static Collection toCollection(Object object) {@SuppressWarnings("unused")JSONArray jsonArray = JSONArray.fromObject(object);return null;}/**** 将对象转换为JSON对象数组** @param object* @return*/public static JSONArray toJSONArray(Object object) {return JSONArray.fromObject(object);}/**** 将对象转换为JSON对象** @param object* @return*/public static JSONObject toJSONObject(Object object) {return JSONObject.fromObject(object);}/**** 将对象转换为HashMap** @param object* @return*/public static HashMap toHashMap(Object object) {HashMap<String, Object> data = new HashMap<String, Object>();JSONObject jsonObject = JSONObject.fromObject(object);Iterator it = jsonObject.keys();while (it.hasNext()) {String key = String.valueOf(it.next());Object value = jsonObject.get(key);data.put(key, value);}return data;}/**** 将对象转换为List>** @param object* @return*/// 返回非实体类型(Map)的Listpublic static List<Map<String, Object>> toList(Object object) {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();JSONArray jsonArray = JSONArray.fromObject(object);for (Object obj : jsonArray) {JSONObject jsonObject = (JSONObject) obj;Map<String, Object> map = new HashMap<String, Object>();Iterator it = jsonObject.keys();while (it.hasNext()) {String key = (String) it.next();Object value = jsonObject.get(key);map.put((String) key, value);}list.add(map);}return list;}}

package com.todaytech.yth.gdsd.base.DataInfo.Util;
/*** 功能:输出的json字段的值是StatusCode类决定*      就是说返回状态的值是成功200还是失败400还是错误404,这些值*      是StatusCode这个类定义的。*/
public enum  StatusCode {/** 成功 */SUCCESS(200, "成功"),/** 没有登录 */NOT_LOGIN(400, "登录异常"),/*** 没有授权*/NOT_PRIVILEGE(500,"没有授权"),/*** IP请求信息异常*/IP_INFO_EXCEPTION(501,"IP请求信息异常"),/***请求用户名信息错误*/LOGIN_NAME_EXCEPTION(502,"请求用户名信息错误"),/*** 请求密码信息错误*/LOGIN_PASS_EXCEPTION(503,"请求密码信息错误"),/** 发生异常 */EXCEPTION(401, "发生异常"),/** 系统错误 */SYS_ERROR(402, "系统错误"),/** 参数错误 */PARAMS_ERROR(403, "参数错误 "),/** 不支持或已经废弃 */NOT_SUPPORTED(410, "不支持或已经废弃"),/** AuthCode错误 */INVALID_AUTHCODE(444, "无效的AuthCode"),/** 太频繁的调用 */TOO_FREQUENT(445, "太频繁的调用"),/** 未知的错误 */UNKNOWN_ERROR(499, "未知错误");private int code;private String message;StatusCode(int code, String message) {this.code = code;this.message = message;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}/**** @param code* @return*/public static String  returnMessage(int code){String message="";switch (code) {case 200:message="成功";break;case 400:message="异常";break;case 500:message="没有授权";break;case 501:message="IP请求信息异常";break;case 502:message="请求用户名信息错误";break;case 503:message="请求密码信息错误";break;case 401:message="发生异常";break;case 402:message="系统错误";break;case 403:message="参数错误";break;case 410:message="不支持或已经废弃";break;default:break;}return message;}}

package com.todaytech.yth.gdsd.base.DataInfo.Util;/*** 这个类定义了返回的json格式,即json含有哪些字段*/
public class JsonResult {private int code;private String message;private Object data;public JsonResult(int code, String message, Object data) {this.code = code;this.message = message;this.data = data ;}public int getCode() {return code;}public String getMessage() {return message;}public Object getData() {return data;}
}

6:白盒测试层

package com.todaytech.yth.gdsd.base.DataInfo.test;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;import sun.misc.BASE64Decoder;public class decodeUtil {@SuppressWarnings("restriction")public static String decode(String toDecodeContent) throws UnsupportedEncodingException {if (toDecodeContent == null) {return null;}toDecodeContent = URLDecoder.decode(toDecodeContent, "UTF-8").replaceAll(" ", "+");byte[] buf = null;String result = null;try {buf = new BASE64Decoder().decodeBuffer(toDecodeContent);result = new String(buf, "UTF-8");} catch (IOException e) {e.printStackTrace();} finally {}return result;}
}

package com.todaytech.yth.gdsd.base.DataInfo.test;import java.io.Serializable;public class Person implements Serializable{private static final long serialVersionUID = 1L;private String name;private int age;private String address;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}}

package com.todaytech.yth.gdsd.base.DataInfo.test;import java.util.ArrayList;
import java.util.List;import com.todaytech.yth.gdsd.base.DataInfo.Util.JasonUtil;public class Test_ListObjectToJason {public static void main(String[] args) {Person person1 = new Person();person1.setAddress("address");person1.setAge(11);person1.setName("amao");Person person2 = new Person();person2.setAddress("address");person2.setAge(11);person2.setName("amao");List<Person> lp = new ArrayList<Person>();lp.add(person1);lp.add(person2);System.out.println(JasonUtil.serialize(lp));}
}

package com.todaytech.yth.gdsd.base.DataInfo.test;import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.annotation.Resource;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import com.tt.pwp.framework.data.dao.Dao;
import com.tt.pwp.framework.prefs.PrefsManager;import sxf.Student;@Controller
@RequestMapping("/DataInfor")
public class Test_User {@Resourceprivate Dao defaultDao;@Resourceprivate PrefsManager prefsManager;@RequestMapping( value = "/Test.do",produces = "application/json;charset=UTF-8")public void TestRequest(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{String inJson = null;// 保存HTTP客户端请求报文String outJson = null;// 保存HTTP服务端输出报文// 获得输人报文然后打印出来inJson = getInJson(request);System.out.println("\nauthor<pantp>===========服务端日志----POST方式接收HTTP请求,HTTP服务端收到的请求报文如下:==========\n");System.out.println(inJson);System.out.println("\nauthor<pantp>=================================================================\n");JSONArray result=new JSONArray();RequestDispatcher rd;String keyid = "1";   //request.getParameter("keyid").trim(); try {if(keyid !=null){String sql="select t.account_code,t.account_name,g.org_name from pwp_account t,pwp_org g where g.org_id=t.org_id and t.account_status=1 and t.account_deleted=0 and t.account_id=?";JdbcTemplate jdbcTemplate=defaultDao.getJdbcTemplate();List<Map<String, Object>> accountList=jdbcTemplate.queryForList(sql,new Object[]{keyid});if(accountList.size()>0){for(int i=0;i<accountList.size();i++){JSONObject json=new JSONObject();Map<String,Object> account=accountList.get(i);json.put("account_code", account.get("account_code").toString());json.put("account_name", account.get("account_name").toString());json.put("org_name", account.get("org_name").toString());result.add(json);}}// 下面部分是输出部分的处理response.setContentType("application/json; charset=UTF-8");response.getWriter().print(result);}else{// 下面部分是输出部分的处理JSONObject json=new JSONObject();json.put("code", "0");json.put("message", "成功");json.put("data", "12345");result.add(json);response.setContentType("application/json; charset=UTF-8");response.getWriter().print(result);}} catch (Exception e) {e.printStackTrace();}}// 获得请求的报文,并作简单的校验public String getInJson(HttpServletRequest request) throws IOException {byte buffer[] = new byte[64 * 1024];InputStream in = request.getInputStream();// 获取输入流对象int len = in.read(buffer);// 必须对数组长度进行判断,否则在new byte[len]会报NegativeArraySizeException异常if (len < 0) {throw new IOException("请求报文为空");}String encode = request.getCharacterEncoding();// 获取请求头编码// 必须对编码进行校验,否则在new String(data, encode);会报空指针异常if (null == encode || encode.trim().length() < 0) {throw new IOException("请求报文未指明请求编码");}byte data[] = new byte[len];// 把buffer数组的值复制到data数组System.arraycopy(buffer, 0, data, 0, len);// 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 StringString inJson = new String(data, encode);return inJson;}/*** http://localhost:8081/gdsd-all/DataInfor/addstudent.do?username=liudehua&age=60* @param username* @param age* @return*/@RequestMapping(value = "/addstudent.do", produces = "application/json;charset=UTF-8")@ResponseBodypublic Object addstudent(String username, int age) {// 返回数组List<Student> studentList = new ArrayList<Student>();Student stu = new Student();stu.setName(username);stu.setAge(age);studentList.add(stu);stu = new Student();stu.setName("wushan");stu.setAge(20);studentList.add(stu);Map<String, List<Student>> map = new HashMap<String, List<Student>>();map.put("studentList", studentList);return map;}/*** http://localhost:8081/gdsd-all/DataInfor/addstudentHttp.do?username=liudehua&age=60** @param request* @return*/// 通过HttpServletRequest接收,post方式和get方式都可以。@RequestMapping(value = "/addstudentHttp.do", produces = "application/json;charset=UTF-8")@ResponseBodypublic Object addstudent(HttpServletRequest request) {String username = request.getParameter("username");int age = Integer.valueOf(request.getParameter("age"));Student student = new Student();student.setName(username);student.setAge(age);return student;}/*** http://localhost:8081/gdsd-all/DataInfor/addstudentBeen.do?username=liudehua&age=60* username和age必须和Student的类的成员变量名称完全一致** @param student* @return*/// 通过一个bean来接收,post方式和get方式都可以@RequestMapping("/addstudentBeen.do")@ResponseBodypublic Object addstudent(Student student) {Map<String, Object> map = new HashMap<String, Object>();map.put("student", student);return map;}/*** http://localhost:8081/gdsd-all/DataInfor/addstudentVariable?username=liudehua&age=60* @param username* @param age* @return*/// 通过@PathVariable获取路径中的参数@RequestMapping("/addstudentVariable/{username}/{age}")@ResponseBodypublic Object addstudentVariable(@PathVariable String username,@PathVariable int age) {Student student = new Student();student.setName(username);student.setAge(age);return student;}/*** http://localhost:8081/gdsd-all/DataInfor/addstudentParam.do?username=liudehua&age=60* @param username* @param age* @return*/// 用注解@RequestParam绑定请求参数到方法入参@RequestMapping("/addstudentParam.do")@ResponseBodypublic Object addstudentParam(@RequestParam("username") String username,@RequestParam("age") int age) {Student student = new Student();student.setName(username);student.setAge(age);return student;}}

jar 包 maven配置文件

  <!-- 模拟HTTP的调用,写的一个只处理POST请求的http服务 start --><dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency><!-- 模拟HTTP的调用,写的一个只处理POST请求的http服务 end -->

package com.todaytech.yth.gdsd.base.DataInfo.test;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.security.Principal;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/** PostHttpServer.java 服务端* ********************************************************* 模拟的一个Http服务,处理客户端的post请求*********************************************************** ---@author [zt_zoro1272@163.com    ]*********************************************************** ---@version*********************************************************** ---@since 2014-8-28** <!-- 模拟HTTP的调用,写的一个只处理POST请求的http服务 start -->*   <servlet>*       <servlet-name>PostHttpServer</servlet-name>*       <servlet-class>com.todaytech.yth.gdsd.base.httpsPost.test6.PostHttpServer</servlet-class>*   </servlet>*   <servlet-mapping>*       <servlet-name>PostHttpServer</servlet-name>*       <url-pattern>/postHttpServer</url-pattern>*   </servlet-mapping><!-- 模拟HTTP的调用,写的一个只处理POST请求的http服务 end -->*/
@SuppressWarnings("unused")
@Controller
public class PostHttpServer extends HttpServlet {private static final long serialVersionUID = 1L;/** 代码逻辑分以下三部分:* 1.获得请求报文* 2.根据请求报文的信息去做业务逻辑,然后封装返回报文* 3.输出相应报文*/protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {String inJson = null;// 保存HTTP客户端请求报文String outJson = null;// 保存HTTP服务端输出报文// 获得输人报文然后打印出来inJson = getInJson(request);System.out.println("\nauthor<pantp>===========服务端日志----POST方式接收HTTP请求,HTTP服务端收到的请求报文如下:==========\n");System.out.println(inJson);System.out.println("\nauthor<pantp>=================================================================\n");// 以下代码部分获得请求报文,然后去做校验,转换以及其他的调用其他的业务逻辑等,这里就不管它// ........................................................................// 下面部分是输出部分的处理// outJson = "{\"Response\": {\"code\": \"0\",\"message\": \"成功\",\"data\": \"12345\"}}";// 输出不部分也以JSON格式的字符串输出,这里我就写死JSONArray result=new JSONArray();JSONObject json=new JSONObject();json.put("code", "0");json.put("message", "成功");json.put("data", "66666");result.add(json);response.setContentType("application/json; charset=UTF-8");response.getWriter().print(result);}// 获得请求的报文,并作简单的校验public String getInJson(HttpServletRequest request) throws IOException {byte buffer[] = new byte[64 * 1024];InputStream in = request.getInputStream();// 获取输入流对象int len = in.read(buffer);// 必须对数组长度进行判断,否则在new byte[len]会报NegativeArraySizeException异常if (len < 0) {throw new IOException("请求报文为空");}String encode = request.getCharacterEncoding();// 获取请求头编码// 必须对编码进行校验,否则在new String(data, encode);会报空指针异常if (null == encode || encode.trim().length() < 0) {throw new IOException("请求报文未指明请求编码");}byte data[] = new byte[len];// 把buffer数组的值复制到data数组System.arraycopy(buffer, 0, data, 0, len);// 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 StringString inJson = new String(data, encode);return inJson;}// 不提供get的处理方式protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/*  String inJson = null;// 保存HTTP客户端请求报文String outJson = null;// 保存HTTP服务端输出报文// 获得输人报文然后打印出来inJson = getInJson(request);System.out.println("\nauthor<pantp>===========服务端日志----POST方式接收HTTP请求,HTTP服务端收到的请求报文如下:==========\n");System.out.println(inJson);System.out.println("\nauthor<pantp>=================================================================\n");// 以下代码部分获得请求报文,然后去做校验,转换以及其他的调用其他的业务逻辑等,这里就不管它// ........................................................................// 下面部分是输出部分的处理outJson = "{\"Response\": {\"code\": \"0\",\"message\": \"成功\",\"data\": \"12345\"}}";// 输出不部分也以JSON格式的字符串输出,这里我就写死response.setContentType("application/json; charset=UTF-8");response.getWriter().print(outJson);*/}}

package com.todaytech.yth.gdsd.base.DataInfo.test;import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;import com.todaytech.yth.gdsd.base.DataInfo.Model.ZbInfoVo;/**PostHttpClient.java 客户端* *********************************************************  采用httpclient插件的post方式发送流二进制流数据到HTTP服务端*********************************************************** ---@author [zt_zoro1272@163.com    ]*********************************************************** ---@version*********************************************************** ---@since 2014-8-28*/
public class PostHttpClient {/*** ********************************************************* ---功能描述:         发送post请求,客户端采用二进制流发送,服务端采用二进制流介绍*********************************************************** ---@param json    入参的json格式的报文* ---@param url     http服务器的地址* ---@return       返回响应信息*********************************************************** ---@author  [zt_zoro1272@163.com    ]*********************************************************** ---@since 2014-8-28*********************************************************** ---@update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]************************************************************/public static String postHttpReq(String json,String url) {HttpClient httpClient = new HttpClient();byte b[] = json.getBytes();//把字符串转换为二进制数据RequestEntity requestEntity = new ByteArrayRequestEntity(b);EntityEnclosingMethod postMethod = new PostMethod();postMethod.setRequestEntity(requestEntity);// 设置数据postMethod.setPath(url);// 设置服务的urlpostMethod.setRequestHeader("Content-Type", "text/html;charset=GBK");// 设置请求头编码// 设置连接超时httpClient.getHttpConnectionManager().getParams().setConnectionTimeout( 5 * 1000);// 设置读取超时httpClient.getHttpConnectionManager().getParams().setSoTimeout(20 * 1000);String responseMsg = "";int statusCode = 0;try {statusCode = httpClient.executeMethod(postMethod);// 发送请求responseMsg = postMethod.getResponseBodyAsString();// 获取返回值} catch (HttpException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {postMethod.releaseConnection();// 释放连接}if (statusCode != HttpStatus.SC_OK) {System.out.println("HTTP服务异常" + statusCode);}return responseMsg;}/*** 测试 使用springMvc的风格传递Jason串和返回jason串。*/public static void requestUrl(){String json = "{\"PubInfo\": {\"clinet\": \"127.0.0.1\",\"company\": \"月月鸟0820\"},\"Request\": {\"strBillId\": \"18221075148\",\"strCcsOpId\": \"1234\",\"account_id\": \"1\"}}";// String url = "http://localhost:8081/gdsd-all/postHttpServer";String url = "http://localhost:8081/gdsd-all/DataInfor/Test.do";String outPackage = null;System.out.println("客户端日志----POST方式调用HTTP,请求报文为:" + json);outPackage = postHttpReq(json, url);System.out.println("\nauthor<pantp>===========客户端日志----POST方式调用HTTP服务,HTTP服务端响应报文如下:=============\n");System.out.println(outPackage);System.out.println("\nauthor<pantp>================================================================\n");}/****/public static void requestObject(){ZbInfoVo ziv =new ZbInfoVo();String json = "{\"PubInfo\": {\"clinet\": \"127.0.0.1\",\"company\": \"月月鸟0820\"},\"Request\": {\"strBillId\": \"18221075148\",\"strCcsOpId\": \"1234\",\"account_id\": \"1\"}}";String url = "http://localhost:8081/gdsd-all/DataInfor/zbInfo.do";String outPackage = null;System.out.println("客户端日志----POST方式调用HTTP,请求报文为:" + json);outPackage = postHttpReq(json, url);System.out.println("\nauthor<pantp>===========客户端日志----POST方式调用HTTP服务,HTTP服务端响应报文如下:=============\n");System.out.println(outPackage);System.out.println("\nauthor<pantp>================================================================\n");}//POST方式发送HTTP请求public static void main(String[] args) {requestObject();}}

7:xml文件配置

     <bean id="zbCtrl" class="com.todaytech.yth.gdsd.base.DataInfo.Controller.ZbInfoCtrl"><!--(1)依赖注入,配置当前类中相应的属性--><property name="zbis" ref="zbis"></property><property name="loginCheck" ref="loginCheck"></property></bean><bean name="zbis" class="com.todaytech.yth.gdsd.base.DataInfo.Service.imp.ZbInfoServiceImp"></bean><bean name="loginCheck" class="com.todaytech.yth.gdsd.base.DataInfo.Service.imp.LoginInfoCheckServiceImp"></bean>

转载于:https://www.cnblogs.com/ios9/p/10562926.html

基于Https协议返回Jason字符串相关推荐

  1. 二、基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式

    一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现-- ...

  2. 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享

    一.基于HTTPS协议的12306抢票软件设计与实现--实现效果  二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现- ...

  3. 一、基于HTTPS协议的12306抢票软件设计与实现--实现效果

    一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现-- ...

  4. 基于https协议访问SeaTable

    老苏之前写过 在线协同表格SeaTable(安装篇) 在线协同表格SeaTable(设置篇) 但是还有一个遗留问题,按之前的设置,在使用 https 协议时,登录成功后会出现跨域问题,因为老苏有个朋友 ...

  5. nginx--基于openssl自颁发SSL证书实现HTTPS协议安全访问网站

    学习背景 大家在nginx安装(nginx安装教程)后,启动nginx,访问静态页面时,一般都是直接通过HTTP协议进行访问页面,如下图所示: 但实际应用中,有很多网站基于安全方面上的考虑,都有自己的 ...

  6. HTTPS协议是如何实现“秘密交互”的?

    你知道HTTP访问的交互过程吗? 如题,可能有很多人并不了解,本文将简单地介绍一下当你访问某网站时你的电脑与网站之间的数据交互过程. 大家都知道去访问网站都是使用浏览器,在地址栏中输入你想访问的链接, ...

  7. .NET Core微服务之路:基于Ocelot的API网关实现--http/https协议篇

    前言 最近一直在忙公司和私下的兼职,白天十个小时,晚上四个小时,感觉每天都是打了鸡血似的,精神满满的,连自己那已经学打酱油的娃都很少关心,也有很长一段时间没有更新博客了,特别抱歉,小伙伴们都等得想取关 ...

  8. NET Core微服务之路:基于Ocelot的API网关实现--http/https协议篇

    前言 最近一直在忙公司和私下的兼职,白天十个小时,晚上四个小时,感觉每天都是打了鸡血似的,精神满满的,连自己那已经学打酱油的娃都很少关心,也有很长一段时间没有更新博客了,特别抱歉,小伙伴们都等得想取关 ...

  9. 阿里云个人站点基于nginx代理搭建https协议支持

    阿里云个人站点基于nginx代理搭建https协议支持 准备工作 购买免费个人版dv证书 配置nginx 开放防火墙端口 检测是否成功 准备工作 1.个人服务器 2.安装了ssl_moudle的ngi ...

最新文章

  1. python使用matplotlib可视化3D直方图(3D histogram、三维直方图、包含三个坐标轴x、y、z)、3D直方图可视化多个维度数据的区别和联系
  2. Java Mybatis Xml写法 查询语句的动态设计总结
  3. SharePoint designer 文件--新建中没有工作流
  4. [SQL实战]之从titles表获取按照title进行分组
  5. 编译原理中:短语,直接短语,句柄
  6. 从零开始学安全(七)●Linux基础命令学习笔记
  7. android 通讯录恢复,通讯录恢复
  8. 台电幻彩(t4jn)系列u盘量产修复工具
  9. 模拟电路实验 05 - | 集成运算放大器
  10. [转载] 白酒基础知识
  11. 如何在PPT中对文字进行错位排版
  12. matlab9级标度法,satty 标度法
  13. ListView控件和Adapter
  14. ant调用cmd命令行
  15. 区块链应用_供应链金融
  16. 《自己动手写框架8》:高屋建瓴,理念先行
  17. R 返回元素在数据框或者向量中的位置?
  18. 主题 10:如何将工作中的创新点转化为专利
  19. mysql不可重复读是锁的表吗_Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)...
  20. 一个能永久存储网页快照的网站

热门文章

  1. php class ziparchive not found,php Class 'ZipArchive' not found解决办法(php安装zip扩展)
  2. 更加美化输入框的方法
  3. 【图像去噪】中值滤波和均值滤波matlab源码
  4. oracle停监听服务,ORACLE监听服务启动后又停止了的解决
  5. 量子计算机相干性,量子计算机面世不遥远,量子计算机面世不遥远 量子 计算机 相干性 固态 动力学 - 滚动新闻 - 温州网...
  6. Java毕设项目便利店库存管理计算机(附源码+系统+数据库+LW)
  7. WinCC 使用VBS脚本操作变量、控件总结
  8. Linux中使用iOStream头文件,在Linux中使用gcc链接iostream.h
  9. Jeesite框架实用 如何实现本公司内数据权限功能使用
  10. 51单片机学习-5定时器与中断