客户端与服务器常用数据交换格式xml、json、html
移动端(安卓、IOS)通讯方式采用http协议+JSON格式 走restful风格。
很多互联网项目都采用Http协议+JSON
因为xml比较重WebService服务采用http+xml格式 银行项目使用比较多
什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过JSON来进行交换。
样例:
{"sites": [{"name": "小红","url": "www"},{"name": "小米","url": "http/"}]
}
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON的形式是用大括号“{}”包围起来的项目列表,每一个项目间用逗号(,)分隔,而项目就是用冒号(:)分隔的属性名和属性值。这是典型的字典表示形式,也再次表明javascript里的对象就是字典结构。不管多么复杂的对象,都可以用一句JSON代码来创建并赋值。在JSON中,名称 / 值对包括字段名称(在双引号中),后面写一个冒号,然后是值
fastjson(阿里)、gson(谷歌)、jackson(SpringMVC自带)
添加jar fastjson-1.1.43 或引入maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.43</version>
</dependency>
使用fastjson api
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。
static String jsonStr = "{"sites":[{"name":"小红","url":"www"},{"name":"小米","url":"http/"}]}";public static void main(String[] args) {JSONObject jsonObject = new JSONObject();// 将json字符串转为jsonbjectJSONObject jsonStrObject = jsonObject.parseObject(jsonStr);JSONArray jsonArray = JSONArray("sites");for (Object object : jsonArray) {JSONObject stObject = (JSONObject) object;String name = String("name");String url = String("url");System.out.println(name + "---" + url);}}
JSONObject jsonObject = new JSONObject();JSONArray jsonArray = new JSONArray();JSONObject stObject = new JSONObject();stObject.put("name", "小米·");stObject.put("url", "");jsonArray.add(stObject);jsonObject.put("sites", jsonArray);System.out.JSONString());
它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言。
XML 全称为可扩展的标记语言。主要用于描述数据和用作配置文件。
XML 文档在逻辑上主要由一下 5 个部分组成:
XML 声明:指明所用 XML 的版本、文档的编码、文档的独立性信息
文档类型声明:指出 XML 文档所用的 DTD
元素:由开始标签、元素内容和结束标签构成
注释:以结束,用于对文档中的内容起一个说明作用
处理指令:通过处理指令来通知其他应用程序来处理非 XML 格式的数据,格式为
XML 文档的根元素被称为文档元素,它和在其外部出现的处理指令、注释等作为文档实体的子节点,根元素本身和其内部的子元素也是一棵树。
<?xml version="1.0" encoding="UTF-8"?>
<students> <student1 id="001"> <微信公众号>@残缺的孤独</微信公众号> <学号>20140101</学号> <地址>北京海淀区</地址> <座右铭>要么强大,要么听话</座右铭> </student1> <student2 id="002"> <新浪微博>@残缺的孤独</新浪微博> <学号>20140102</学号> <地址>北京朝阳区</地址> <座右铭>在哭泣中学会坚强</座右铭> </student2>
</students>
Dom4j、Sax、Pull
dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml,也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性,所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j。
解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来,有三种方式
1.自己创建Document对象
Document document = ateDocument();
Element root = document.addElement("students");
2.自己创建Document对象
// 创建SAXReader对象
SAXReader reader = new SAXReader();
// 读取文件 转换成Document
Document document = ad(new File(l"));
3.读取XML文本内容获取Document对象
String xmlStr = "<students>......</students>";
Document document = DocumentHelper.parseText(xmlStr);
public static void main(String[] args) throws DocumentException {SAXReader saxReader = new SAXReader();Document read = ad(new File("E://work//spring-ioc//src//main//resources//l"));// 获取根节点Element rootElement = RootElement();getNodes(rootElement);}static public void getNodes(Element rootElement) {System.out.println("当前节点名称:" + Name());// 获取属性IDList<Attribute> attributes = rootElement.attributes();for (Attribute attribute : attributes) {System.out.println("属性:" + Name() + "---" + Text());}if (!TextTrim().equals("")) {System.out.Name() + "--" + Text());}// 使用迭代器遍历Iterator<Element> elementIterator = rootElement.elementIterator();while (elementIterator.hasNext()) {Element next = ();getNodes(next);}}
Xml是重量级数据交换格式,占宽带比较大。
JSON是轻量级交换格式,xml占宽带小。
所有很多互联网公司都会使用json作为数据交换格式
很多银行项目,大多数还是在使用xml。
什么是Java反射
就是正在运行,动态获取这个类的所有信息。
反射机制的作用
1,反编译:.class–>.java
2.通过反射机制访问java对象的属性,方法,构造方法等;
Jdbc 加载驱动-----
Spring ioc
框架
//第一种方式: Classc1 = Class.forName("Employee"); //第二种方式: //java中每个类型都有class 属性. Classc2 = Employee.class; //第三种方式: //java语言中任何一个java对象都有getClass 方法 Employeee = new Employee(); Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)
Class<?> forName = Class.forName("ity.User");// 创建此Class 对象所表示的类的一个新实例 调用了User的无参数构造方法.Object newInstance = wInstance();
实例化有参构造函数
Class<?> forName = Class.forName("ity.User");Constructor<?> constructor = Constructor(String.class, String.class);User newInstance = (User) wInstance("123", "123");
方法名称 作用
getDeclaredMethods [] 获取该类的所有方法
getReturnType() 获取该类的返回值
getParameterTypes() 获取传入参数
getDeclaredFields() 获取该类的所有字段
setAccessible 允许访问私有成员
// 获取当前类class地址Class<?> forName = Class.forName("ity.User");// 使用反射实例化对象 无参数构造函数Object newInstance = wInstance();// 获取当前类的 userId字段Field declaredField = DeclaredField("userId");// 允许操作私有成员declaredField.setAccessible(true);// 设置值declaredField.set(newInstance, "123");User user = (User) newInstance;System.out.UserId());
什么是SpringIOC
什么是SpringIOC,就是把每一个bean(实体类)与bean(实体了)之间的关系交给第三方容器进行管理。
Xml配置:
<beans><bean id="user1" class="ity.UserEntity"><property name="userId" value="0001"></property><property name="userName" value="王麻醉"></property></bean><bean id="user2" class="ity.UserEntity"><property name="userId" value="0002"></property><property name="userName" value="张三"></property></bean>
</beans>
Java代码:
//1.读取springxml配置ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(l");//2.获取bean对象TestService testService = (TestService) Bean("testService");System.out.st());
1.读取bean的XML配置文件
2.使用beanId查找bean配置,并获取配置文件中class地址。
3.使用Java反射技术实例化对象
4.获取属性配置,使用反射技术进行赋值。
详细步骤
1.利用传入的参数获取xml文件的流,并且利用dom4j解析成Document对象
2.对于Document对象获取根元素对象后对下面的标签进行遍历,判断是否有符合的id.
3.如果找到对应的id,相当于找到了一个Element元素,开始创建对象,先获取class属性,根据属性值利用反射建立对象.
4.遍历标签下的property标签,并对属性赋值.注意,需要单独处理int,float类型的属性.因为在xml配置中这些属性都是以字符串的形式来配置的,因此需要额外处理.
5.如果属性property标签有ref属性,说明某个属性的值是一个对象,那么根据id(ref属性的值)去获取ref对应的对象,再给属性赋值.
6.返回建立的对象,如果没有对应的id,或者下没有子标签都会返回null
public class User {private String userId;private String userName;public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}
}
import flect.Field;
import java.util.List;import org.apachemons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import ity.User;public class ClassPathXmlApplicationContext {private String xmlPath;/*** * @param xmlPath* spring xml 配置路径*/public ClassPathXmlApplicationContext(String xmlPath) {lPath = xmlPath;}public Object getBean(String beanId) throws Exception {// 解析xml器SAXReader saxReader = new SAXReader();Document read = null;try {// 从项目根目录路径下 读取read = Class().getClassLoader().getResourceAsStream(xmlPath));} catch (Exception e) {e.printStackTrace();}if (read == null) {return null;}// 获取根节点资源Element root = RootElement();List<Element> elements = root.elements();if (elements.size() <= 0) {return null;}Object oj = null;for (Element element : elements) {String id = element.attributeValue("id");if (StringUtils.isEmpty(id)) {return null;}if (!id.equals(beanId)) {continue;// throw new Exception("使用beanId:" + beanId + ",未找到该bean");}// 获取实体bean class地址String beanClass = element.attributeValue("class");// 使用反射实例化beanClass<?> forNameClass = Class.forName(beanClass);oj = wInstance();// 获取子类对象List<Element> attributes = element.elements();if (attributes.size() <= 0) {return null;}for (Element et : attributes) {// 使用反射技术为方法赋值String name = et.attributeValue("name");String value = et.attributeValue("value");Field field = DeclaredField(name);field.setAccessible(true);field.set(oj, value);}}return oj;// 1.使用beanId查找配置文件中的bean。// 2.获取对应bean中的classpath配置// 3.使用java反射机制实体化对象}public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(l");User bean = (User) Bean("user2");System.out.println("使用反射获取bean" + UserId() + "---" + UserName());}
}
本文发布于:2024-02-01 16:32:17,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170677633837968.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |