IT兄弟连 JavaWeb教程 AJAX以及JSON字符串经典案例

2019-06-08

关键词:经典案例,字符串,字符,案例,兄弟

魅族16Xs安兔兔跑分从安兔兔跑分来看,魅族16Xs跑分为182876分,超越47%的用户,将这个性能放在千元机阵列里,已经是出类拔萃。具体各个方面来看,CPU跑分82192分,GPU跑分36491分,UX跑分49955分,MEM跑分14229分,表现出色。除了以上几个方面的体验评测外,我们也为大家体验了一下魅族16Xs的屏幕指纹解锁体验,从实际体验来看,解锁速度相当快,已经和实体指纹解锁速度不相上下,而且其识别准确率也相当高,在笔者的几次识别测试中,它都能够第一时间准确解锁。魅族16Xs屏幕指纹解锁速度总结魅族16Xs作为魅族首款三摄手机,外观设计延续了魅族16s的对称美感,配合G3曲率超大R角设计,在兼顾视觉观感的同时也能够为用户带来绝佳的手感。而且具体拍照实力上,由于4800万像素主摄加入,使其解析力更强,成片率更高,超广角镜头的使用则是可以给用户更大的发挥空间,凭借着景色以及自己的创意,可以随手拍出更多的“大片”。总体来说,魅族16Xs在诸多元素之间做了一个很好的平衡,为我们带来出色的视觉效果时也带来了绝佳的用户体验。

案例需求:客户端发送AJAX请求服务器端获取用户信息的数据。

案例实现:

在服务器端要将Java对象转换成JSON字符串,如果使用拼接JSON字符串的方式非常繁琐,并且非常容易出错,所以一般会借助第三方Jar包来辅助我们把Java对象编程JSON字符串。

在服务器端将单个Java对象转换成JSON字符串使用JSONObject类的静态方法:formObject (Object object),该方法返回一个JSONObject对象,调用该对象的toString()方法即可完成转换。

在客户端将JSON字符串转换为JavaScript对象,常用的方法有如下几种:

●  使用eval函数:

var jsonStr = '{"id":1,"name":"张三"}';

var obj = eval( " ( " + str + " ) " );

●  使用JSON.parse函数

var jsonStr = '{"id":1,"name":"张三"}';

var obj = JSON.parse(str);

可以发现使用JSON.parse函数可以更方便的将JSON字符串转换为JavaScript对象,这也是推荐的方式。

下面的案例将演示如何使用Ajax从服务器端查询一个用户信息并使用json-lib.jar工具包将用户对象转换为JSON字符串然后返回到客户端。

首先新建一个动态的Web工程,工程名为xdl_ajax_demo,项目构建成功后在lib目录下添加json-lib.jar以及它的依赖包:

●  commons-beanutils.jar

●  commons-collections.jar

●  common-logging.jar

●  common-lang.jar

●  ezmorph.jar

●  json-lib.jar

然后再新建com.xdl.bean包并在包下定义一个User类,用来封装用户数据,包括以下属性:

name:姓名

age:年龄

gender:性别

salary:薪水

User类的详细代码如下:

package com.xdl.bean;

public class User {

private String name;     //姓名

private int age;             //年龄

private String gender;      //性别

private double salary;      //薪水

/**

* 构造器

* @param name

* @param age

* @param gender

* @param salary

*/

public User(String name, int age, String gender, double salary) {

this.name = name;

this.age = age;

this.gender = gender;

this.salary = salary;

}

/**

* 无参构造器

*/

public User(){

}

//Get and Set方法

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 getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

public double getSalary() {

return salary;

考虑到肯定会有机友不堪忍受 iOS 13 开发版的 Bug,小雷友情附赠一个降级教程。但答应我,在 iOS 13 版本期间,千万不要再用 iTunes 备份了!

}

public void setSalary(double salary) {

this.salary = salary;

}

}

接下来新建com.xdl.servlet包并在包下定义一个GetUserInfoServlet类,可以返回User对象的JSON字符串数据。详细代码如下:

package com.xdl.servlet;

import com.xdl.bean.User;

import net.sf.json.JSONObject;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/getUserInfo")

public class GetUserInfoServlet extends HttpServlet {

@Override规范管理:车辆驶入停车位,按照程序做,打印驶入凭证,驶入凭证上会记录此用户停车欠费的信息,避免管理人员私吞、造假等情况的出现,规范收费行为。监管高效:对云停车平台数据深度挖掘的空间无限。通过对车位分布、停车结构等进行智能的科学分析,制定分时段、分地段的收费政策,通过价格和管理手段合理分配城市停车资源。对停车收费进行有效的管理、规划和调节,为制定政策提供决策依据。信息共享:云停车平台收费管理系统可以提供全市停车位动态信息。借此建立全市范围的城市停车诱导发布系统,通过后端管理平台可以展示停车位动态数据,及时了解各停车场停车位空闲状态,充分体现平台的社会价值。大数据管理:城市规划、交通管理等部门可获得城市停车数据的共享。可以整治全市的交通违章现象。有利于提高城市生活环境和文明程度,进一步提升城市的综合竞争能力。

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

User user = new User("三十画生",26,"男",5000.0);

String jsonStr = JSONObject.fromObject(user).toString();

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

response.getWriter().write(jsonStr);

}

@Override

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

doGet(request,response);

}

}

编写HTML页面user.html,使用Ajax发送请求,把返回的用户信息JSON字符串经过解析后显示到页面上。详细代码如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Title</title>

<script type="text/javascript">

function getUserInfo(){

var xhr = window.XMLHttpRequest ?

new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp");

xhr.open('get','getUserInfo',true);

xhr.onreadystatechange = function(){

if(xhr.readyState == 4 && xhr.status == 200){

var userInfo = xhr.responseText;

userInfo = JSON.parse(userInfo);

document.getElementById("name").innerHTML =

'name:' + userInfo.name;

document.getElementById("age").innerHTML =

'age:' + userInfo.age;

document.getElementById("gender").innerHTML =

'gender:' + userInfo.gender;

document.getElementById("salary").innerHTML =

'salary:' + userInfo.salary;

}

};

xhr.send(null);

}

</script>

</head>

<body>

<button type="button" onclick="getUserInfo()">获取用户信息</button>

<h2 id="name"></h2>

<h2 id="age"></h2>

<h2 id="gender"></h2>

<h2 id="salary"></h2>

</body>

</html>

最后启动Tomcat服务器,然后打开浏览器并输入http://localhost:8080/xdl_ajax_ demo/user.html,浏览器将显示如图4所示的页面。

此时点击获取用户信息按钮,网页将发送Ajax请求获取用户信息,最后浏览器将显示如图5所示的页面,表示浏览器已经获取到服务器端返回的JSON格式的用户数据,并且已经成功解析。

图4  user.html

图5  页面成功接收并解析服务端返回的用户信息

案例需求:在上一个案例中,是客户端发送AJAX请求,服务端返回所有用户信息。

案例实现:

在服务器端将Java集合转换为JSON字符串需要使用JSONArray类的静态方法:formObject(Object object),该方法返回一个JSONArray对象,调用该对象的toString()方法即可完成转换。

下面将在之前xdl_ajax_demo项目的基础上进行,演示了如何使用Ajax从服务器端查询一个用户信息列表并使用json-lib.jar工具包将用户列表对象转换为JSON字符串然后返回到客户端。

首先在com.xdl.servlet包下定义GetUserInfoListServlet类,可以返回User对象集合的JSON字符串数据。详细代码如下:

package com.xdl.servlet;

import com.xdl.bean.User;

import net.sf.json.JSONArray;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

userInfo = JSON.parse(userInfo);

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

@WebServlet("/getUserInfoList")

public class GetUserInfoListServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

User user1 = new User("三十画生",26,"男",5000.0);

User user2 = new User("二十画生",24,"女",15000.0);

List<User> userList = new ArrayList<>();

userList.add(user1);

userList.add(user2);

String jsonStr = JSONArray.fromObject(userList).toString();

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

response.getWriter().write(jsonStr);

}

@Override

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

doGet(request,response);

}

}

编写HTML页面userlist.html,使用Ajax发送请求,把返回的用户信息列表的JSON字符串经过解析后显示到页面上。详细代码如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Title</title>

<script type="text/javascript">

function getUserInfoList(){

var xhr = window.XMLHttpRequest ?

new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp");

xhr.open('get','getUserInfoList',true);

xhr.onreadystatechange = function(){

if(xhr.readyState == 4 && xhr.status == 200){

var userInfoList = xhr.responseText;

userInfoList = JSON.parse(userInfoList);

var userInfoListTable =

document.getElementById("userInfo List");

userInfoListTable.innerText = '';

var rowHead = userInfoListTable.insertRow();

rowHead.insertCell().innerHTML = 'NAME';

rowHead.insertCell().innerHTML = 'AGE';

rowHead.insertCell().innerHTML = 'GENDER';

rowHead.insertCell().innerHTML = 'SALARY';

for(var i = 0;i<userInfoList.length;i++){

var userInfo = userInfoList[i];

var row = userInfoListTable.insertRow();

row.insertCell().innerHTML = userInfo.name;

row.insertCell().innerHTML = userInfo.age;

row.insertCell().innerHTML = userInfo.gender;

row.insertCell().innerHTML = userInfo.salary;

}

}

}

xhr.send(null);

}

</script>

</head>

<body>

<button type="button" onclick="getUserInfoList()">获取用户信息列表</button>

<table id="userInfoList"></table>

</body>

</html>

最后启动Tomcat服务器,然后打开浏览器并输入http://localhost:8080/xdl_ajax_ demo/userlist.html,浏览器将显示如图6所示的页面。

此时点击获取用户信息列表按钮,网页将发送Ajax请求获取用户信息列表,最后浏览器将显示如下图7所示的页面,表示浏览器已经获取到服务器端返回的JSON格式的用户列表数据,并且已经成功解析。

图6  userlist.html

图7  页面成功接收并解析服务端返回的用户信息列表

目前手机销量冠军仍然是三星,不过从数据上分析,三星和苹果市场份额均在下跌,国产品牌华为份额涨幅最大,vivo和OPPO等其他品牌的份额也在上涨,这也侧面反映出,国产手机已经被外界所认可,因此才能取得这么好的成绩。小编认为,这几年国产手机通过自主研发和创新,实力越来越强大,每次华为发布旗舰新品,外界给予的关注度已经不小于苹果,并且海外消费者为买华为手机排长队的情景也是屡见不鲜的,从这些都可以看出,国产手机在国际上的影响力已经越来越高,得到了越来越多消费者的认可。大家认为怎么样?欢迎留言评论。一直以来,苹果手机的拍照强悍还是得到不少人认同的,同时在提供编辑工具方面也是做了很大的努力,所以,iOS 13系统在图片编辑,甚至视频编辑方面会做更多的交互尝试,确保用户可以获得更多好玩的体验。按照苹果的计划,2019年WWDC大会将在6月4日凌晨一点正式开始,举行WWDC 2019大会,届时苹果将会为用户带去最新的iOS 13系统。也就是说iOS 13 马上就要与我们见面了,而且说不定到时候还有更意外的惊喜,你期待吗?

分享到:
文章评论 · 所有评论
评论请遵守当地法律法规
点击加载更多
精彩图片
© 2019 南阳新闻网http://www.247couplecams.com 中国互联网举报中心 科普新闻网 京公网安备 11010802020116号
违法和不良信息举报:jb@www.247couplecams.com