在开发的过程中,有时候我们需要设计一个数据接口。有时候呢,数据接口和Web服务器又不在一起,所以就有跨域访问的问题。

第一步:简单的设计一个数据接口。

数据接口,听起来高大上,其实呢就是一个简单的Serlvlet,在有get的请求的时候,返回我们要提供的数据就可以。现在JSON数据格式已经很普遍,因为很方便,所以我们做一个json数据的接口。直接看代码

先建立一个实体类,就是包装我们的数据的

bean/kapian.java

package bean;

public class kapian {

//头像路进

public String imgurl;

public String getImgurl() {

return imgurl;

}

public void setImgurl(String imgurl) {

this.imgurl = imgurl;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getMoney() {

return money;

}

public void setMoney(String money) {

this.money = money;

}

public String getStyle() {

return style;

}

public void setStyle(String style) {

this.style = style;

}

public String getNum() {

return num;

}

public void setNum(String num) {

this.num = num;

}

public String getRevenue() {

return revenue;

}

public void setRevenue(String revenue) {

this.revenue = revenue;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

//名字

public String name;

//金额

public String money;

//交易风格

public String style;

//订阅人数

public String num;

//收益率

public String revenue;

//标记

public String id;

public kapian(String imgurl,String name,String money,String style,String num,String revenue,String id){

this.imgurl=imgurl;

this.name=name;

this.money=money;

this.style=style;

this.num=num;

this.revenue=revenue;

this.id=id;

}

}

Serlvet 类:

bean/message.java

package bean;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.json.JSONObject;

import org.json.JSONArray;

import java.util.ArrayList;

import bean.kapian;

import java.util.List;

public class message extends HttpServlet {

/**

* Constructor of the object.

*/

public message() {

super();

}

/**

* Destruction of the servlet.

*/

public void destroy() {

super.destroy(); // Just puts "destroy" string in log

// Put your code here

}

/**

* The doGet method of the servlet.

*

* This method is called when a form has its tag value method equals to get.

*

* @param request the request send by the client to the server

* @param response the response send by the server to the client

* @throws ServletException if an error occurred

* @throws IOException if an error occurred

*/

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setHeader("Content-type", "text/html;charset=UTF-8");

response.setContentType("text/html;charset=utf-8");

List li = new ArrayList();

li.add(new kapian("1.jpg","陈永康","2345323","牛逼","10234323","200%","周"));

li.add(new kapian("1.jpg","唐露露","123143","稳健","1234234","190%","周"));

li.add(new kapian("1.jpg","宋豪杰","2345323","牛逼","10234323","200%","周"));

li.add(new kapian("1.jpg","小斌","2345323","牛逼","10234323","200%","周"));

li.add(new kapian("1.jpg","李研","2345323","厉害","234235","2000%","周"));

li.add(new kapian("1.jpg","陈永康","2345323","牛逼","10234323","200%","月"));

li.add(new kapian("1.jpg","唐露露","123143","稳健","1234234","190%","月"));

li.add(new kapian("1.jpg","宋豪杰","2345323","牛逼","10234323","200%","月"));

li.add(new kapian("1.jpg","小斌","2345323","牛逼","10234323","200%","月"));

li.add(new kapian("1.jpg","李研","2345323","厉害","234235","2000%","月"));

li.add(new kapian("1.jpg","陈永康","2345323","牛逼","10234323","200%","年"));

li.add(new kapian("1.jpg","唐露露","123143","稳健","1234234","190%","年"));

li.add(new kapian("1.jpg","宋豪杰","2345323","牛逼","10234323","200%","年"));

li.add(new kapian("1.jpg","小斌","2345323","牛逼","10234323","200%","年"));

li.add(new kapian("1.jpg","李研","2345323","厉害","234235","2000%","年"));

li.add(new kapian("1.jpg","陈永康","2345323","牛逼","10234323","200%","总"));

li.add(new kapian("1.jpg","唐露露","123143","稳健","1234234","190%","总"));

li.add(new kapian("1.jpg","宋豪杰","2345323","牛逼","10234323","200%","总"));

li.add(new kapian("1.jpg","小斌","2345323","牛逼","10234323","200%","总"));

li.add(new kapian("1.jpg","李研","2345323","厉害","234235","2000%","总"));

try{

JSONArray json = new JSONArray();

for(kapian a :li){

JSONObject obj = new JSONObject();

obj.put("imgurl",a.getImgurl());

obj.put("name",a.getName());

obj.put("money",a.getMoney());

obj.put("style",a.getStyle());

obj.put("num",a.getNum());

obj.put("revenue",a.getRevenue());

obj.put("id",a.getId());

json.put(obj);

}

JSONObject js =new JSONObject();

response.getWriter().print(json.toString());

}

catch(Exception e){

e.printStackTrace();

}

}

/**

* The doPost method of the servlet.

*

* This method is called when a form has its tag value method equals to post.

*

* @param request the request send by the client to the server

* @param response the response send by the server to the client

* @throws ServletException if an error occurred

* @throws IOException if an error occurred

*/

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println(""-//W3C//DTD HTML 4.01 Transitional//EN\">");

out.println("");

out.println("

A Servlet");

out.println("

");

out.print(" This is ");

out.print(this.getClass());

out.println(", using the POST method");

out.println(" ");

out.println("");

out.flush();

out.close();

}

/**

* Initialization of the servlet.

*

* @throws ServletException if an error occurs

*/

public void init() throws ServletException {

// Put your code here

}

}

使用Json的时候,我们要导入JSON包,org.json包,可以网上下载

然后用将设计好的List转换成json格式

我们用到两个json对象,一个是JSONObject,一个是JSONArray。顾名思义,前者就是一个json对象,后者是一个json数组。

这里扩展一下:

最后我们用response.getWrite()和print(),返回数据。也可以用response.getOututStream.write()

write和print的区别

write():仅支持输出字符类型数据,字符、字符数组、字符串等

print():可以将各种类型(包括Object)的数据通过默认编码转换成bytes字节形式,这些字节都通过write(int c)方法被输出

response.getWriter()和response.getOutputStream的区别:前者是字符流,后者是字节流

response.getOutputStream().write(data.getBytes("UTF-8"));

response.getWriter().write(data);

回到正题:

这是项目的文件接口,然后浏览器中输入

http://192.168.3.60:8089/Data/servlet/message

现在如果我们在另外一台电脑上使用ajax, 来获取数据

$.ajax({

url:'http://localhost:8089/Data/servlet/message',

method:'get',

dataType:'json',

success:function(data){

$.each(data,function(i,term){

alert(term.name);

});

},

error:function(XMLHttpRequest,textStatus,errorThrown){

alert(XMLHttpRequest.status);

alert(XMLHttpRequest.readyState);

alert(textStatus);

}

});

这个时候回到error的回调函数,XMLHtppRequset.status=0;readyState=0; 都是0。 0表示请求根本没有建立。这是因为,另一个电脑和我的数据接口

不在一个服务器上,当然,如果你在自己的电脑上写ajax也不可以,必须写到项目里,才可以访问。所以,跨域问题必须要解决。网上的办法很简单,

新建一个Filter类:

Filter是一个过滤器。对你设定的请求地址进行拦截,然后设置。

package Filter;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletResponse;

public class HeaderFilter implements Filter

{

public void doFilter(ServletRequest request, ServletResponse resp, FilterChain chain) throws IOException, ServletException

{

HttpServletResponse response = (HttpServletResponse) resp; response.setHeader("Access-Control-Allow-Origin", "*"); //解决跨域访问报错

response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");

response.setHeader("Access-Control-Max-Age", "3600"); //设置过期时间

response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization");

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // 支持HTTP 1.1.

response.setHeader("Pragma", "no-cache"); // 支持HTTP 1.0. response.setHeader("Expires", "0");

chain.doFilter(request, resp);

}

public void init(FilterConfig filterConfig) {}

public void destroy() {}

}

在web.xml中配置:

HeaderFilter

Filter.HeaderFilter

HeaderFilter

/*

然后,ajax在任何地方就都可以访问了。

还有一点就是,ajax在处理json数据的时候:

有两种方式,一种数据格式不声明为json,直接是文本,然后传过来,需要解析一下,用eval() 或者JSON.parse()

还有一种,是声明为json,直接可以用

后端和前端,如果有一个声明为json,那么格式就是json.

java跨域解析json数据_java后台设计简单的json数据接口,设置可跨域访问,前端ajax获取json数据...相关推荐

  1. ajax获取json数据为undefined--原因解析

    解决办法:var dataObj=eval("("+data+")");//转换为json对象 问题: 1. 碰到一个问题ajax成功获取json数据后,取值显 ...

  2. Ajax 获取 JSON数据

    文章目录 Ajax获取JSON数据 Ajax获取JSON数据 Ajax 全称"Asynchronous JavaScript and XML",译为"异步 JavaScr ...

  3. java接口返回map集合数据;前端ajax获取,遍历时无序

    因业务需求,在同一张表格中,将地区.全国业务数据 按年份分组统计,将相同年份的数据组装成一条数据在表格中对比显示.效果图如下: 当前地区 全国 年度 季度 成交额 净利润 成交额 净利润 2019 1 ...

  4. AngularJS学习笔记(3)——通过Ajax获取JSON数据

    通过Ajax获取JSON数据 以我之前写的与用户交互的动态清单列表为例,使用JSON前todo.html代码如下: <!DOCTYPE html> <html ng-app=&quo ...

  5. highcharts ajax 数据格式,Highcharts ajax获取json对象动态生成报表生成 .

    最近做个项目,项目经理想做一个统计报表,在网上查看些资料就选用Highchars 这里和大家分享下使用心得. 重点说明此代码是针对一个报表显示多个项对比显示. 直接贴代码:web端 $(documen ...

  6. 八十六、推荐组件的redux-thunk异步解决方案、Ajax获取推荐数据

    2020/11/22. 周日.今天又是奋斗的一天. @Author:Runsen 今天我们来看一个 Redux 官方出品的 middleware 库:redux-thunk. Redux官方实现的异步 ...

  7. java 请求url 返回数据_java后台发起get请求获取响应数据|chu

    本文实例为大家分享了java后台发起get请求获取响应数据,供大家参考,具体内容如下 学习记录: 话不多说直接上代码: package com.jl.chromeTest; import java.i ...

  8. ajax获取json数据解析为undefined

    解决办法1.使用eval()函数,把获取的数据转换为json对象. var dataObj=eval("("+data+")");//转换为json对象 然后在 ...

  9. jQuery AJAX获取JSON数据解析多种方式示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

最新文章

  1. Dubbo 2.7.1 踩坑记
  2. iOS开发-关于自定义控件很值得一看的文章(一)
  3. 分享一道阿里Java并发面试题 (详细分析篇)
  4. php如何对数据类型检测 有哪些方法,php检测数据类型的几种方法汇总
  5. 一个方法多个return_用这个方法可以快速、准确地记住一个单词的多个词义
  6. Lanstar v2.2.0跨年版 三栏简约的typecho主题
  7. (学习笔记)laravel 中间件
  8. Python进阶:如何将字符串常量转化为变量? 1
  9. js的浅拷贝与深拷贝
  10. MyBatis多参数传递之默认命名方式示例——MyBatis学习笔记之十二
  11. 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(1) ambushaa [翻译] [转]
  12. C语言怎么实现熊猫上香中的系统错误提示,熊猫烧香的病毒是用什么程序语言编写的 原理是什么...
  13. java exchange类,JAVA5---Exchange使用
  14. Free校园小程序 开源发布,一款集合表白墙、失物招领、兼职和闲置二手买卖的云开发微信小程序
  15. java shp文件_java发布shp数据
  16. 《Java程序设计》第二周学习总结
  17. [T-ARA][남주긴 아까워][给别人可惜了]
  18. 设计模式-工厂模式(简单工厂,工厂模式,抽象工厂)
  19. Kotlin中also与apply的区别
  20. 一招搞定GitHub下载加速!

热门文章

  1. <Rasa实战>第五章实例运行
  2. 迅为LS2k1000龙芯国产双核开发板烧写系统到 U 盘
  3. Maven 加入高德地图,类推百度地图
  4. 首家中国精品店!英国当代珠宝品牌Stephen Webster入驻北京SKP购物中心
  5. 2021年中国内燃机曲轴行业现状及竞争格局分析,高壁垒塑造曲轴行业高集中度,新能源汽车带动行业发展「图」
  6. SOFAJRaft 在同程旅游中的实践
  7. 系统安全及应用(一)
  8. 2. 认识O(logN)的排序
  9. 首域金融BOSCTIME_关于首域金融BOSCTIME|首域金融资料
  10. hexo 博客小功能添加-评论、萌妹纸、相册、字数统计...