客戶端與服務(wù)端常見(jiàn)的數(shù)據(jù)交換格式有xml ,json,html
移動(dòng)端常用http+json
webservice采用html+xml
json
使用fastjson解析json
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 parseObject(String text, Class clazz); // 把JSON文本parse為JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final List parseArray(String text, Class 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轉(zhuǎn)換為JSONObject或者JSONArray跛溉。
xml格式
解析xml一般三種:dom4j sax
dom4j解析xml
package com.xml;
import com.sun.xml.internal.ws.util.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.util.List;
/**
* xml解析方式, Dom4j邻吞、Sax、Pull
* dom4j不適合大文件的解析锁施,因?yàn)樗且幌伦訉⑽募虞d到內(nèi)存中,所以有可能出現(xiàn)內(nèi)存溢出,
* sax是基于事件來(lái)對(duì)xml進(jìn)行解析的号醉,所以他可以解析大文件的xml,
*/
public class App {
/**
* 創(chuàng)建節(jié)點(diǎn)
*/
public static void add(String fileName) {
Document document = DocumentHelper.createDocument();
//根節(jié)點(diǎn)
Element beans = document.addElement("beans");
beans.addComment("zhu shi");
//命名空間
beans.addNamespace("context", "http://www.springframework.org/schema/context");
beans.addNamespace("bean", "http://www.springframework.org/schema/bean");
beans.addNamespace("jdbc", "http://www.springframework.org/schema/jsbc");
beans.addNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
beans.addAttribute("xsi:schemaLocation", "http://www.springframework.org/schema/beans \n " +
" http://www.springframework.org/schema/beans/spring-beans.xsd \n " +
" http://www.springframework.org/schema/context \n " +
" http://www.springframework.org/schema/context/spring-context.xsd\n " +
" http://www.springframework.org/schema/aop \n " +
" http://www.springframework.org/schema/aop/spring-aop.xsd");
//節(jié)點(diǎn) <context:component-scan base-package="com.paopao"/>
beans.addElement("context:component")
.addAttribute("basepackage", "com.paopao");
//bean節(jié)點(diǎn)
beans.addElement("bean")
.addAttribute("id", "UserService")
.addAttribute("class", "com.demo.service");
//property
beans.addElement("bean")
.addAttribute("id", "userController")
.addAttribute("class", "com.demo.controller")
.addElement("property")
.addAttribute("name", "destroy")
.addAttribute("name", "init").setText("init");
//子節(jié)點(diǎn)
Element bean = beans.addElement("bean")
.addAttribute("id", "user")
.addAttribute("class", "com.demo.pojo");
bean.addElement("property")
.addAttribute("name", "username")
.addAttribute("value", "xiaoming");
bean.addElement("property")
.addAttribute("name", "password")
.addAttribute("value", "123456");
try {
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
XMLWriter xmlWriter = new XMLWriter(new FileWriter(new File(fileName)), outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
return;
}
/**
* 解析xml文件
*/
public static void xml(String fileName) {
SAXReader reader = new SAXReader();
try {
Document document = reader.read(new File(fileName));
Element beans = document.getRootElement();
//獲取根目錄下的子元素
List<Element> list = beans.elements();
for (Element e : list) {
if ("bean".equals(e.getName())) {
String beanName = e.attributeValue("id");
String beanPackage = e.attributeValue("class");
List<Element> element = e.elements();
if (!element.equals(null)) {
for (Element ele : element) {
String name = ele.attributeValue("name");
String value = ele.attributeValue("value");
String text = ele.getText();
System.out.println(name+value+text);
}
}
System.out.println(beanPackage + "." + beanName);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
App.add("d:/file-mianshi/b.xml");
App.xml("d:/file-mianshi/b.xml");
}
}
xml1.png
xml2.png
Java反射
動(dòng)態(tài)獲取這個(gè)類的所有信息辛块。包括java對(duì)象的屬性,方法,構(gòu)造函數(shù)等
反射獲取類
Class.forName("com.demo.pojo.User");
User.class;
(new User()).getClass();
實(shí)例化類(構(gòu)造對(duì)象)
無(wú)參構(gòu)造
Class<?> clazz = Class.forName("...")
Object user = clazz.newInstance();
有參構(gòu)造
Class<?> clazz = Class.forName("...")
Constructor<?>constructor = forName.getConstructor(String.class, String.class);
User user = (User) constructor.newInstance("name", "xiaoming");
反射創(chuàng)建api
getDeclaredMethods []
getReturnType()
getParameterTypes()
getDeclaredFields()
setAccessible //允許訪問(wèn)私有成員
springioc的簡(jiǎn)單實(shí)現(xiàn)
讀取xml文件
裝配bean
反射賦值
新建xml文檔
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="student" class="com.xml.pojo.Student">
<property name = "name" value="網(wǎng)癮少年"></property>
</bean>
<bean id="teacher" class="com.xml.pojo.Teacher">
<constructor-arg name="name" value="雷電法王"></constructor-arg>
<constructor-arg name="student" ref="student"></constructor-arg>
</bean>
<bean id="play" class="com.xml.service.Play">
<property name="teacher" ref="teacher"></property>
<property name="student" ref="student"></property>
</bean>
</beans>
解析xml
package com.xml;
import com.xml.service.Play;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.beans.ConstructorProperties;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author cailonghao
*/
public class Cxml {
/**
* 拿到裝載bean的實(shí)例
*/
public static Map xml(String file) {
//存放bean
Map<String, Class<?>> map1 = new HashMap<>();
//存放節(jié)點(diǎn)
Map<String, Object> map2 = new HashMap<>();
//存放對(duì)象
Map<String, Object> map3 = new HashMap<>();
SAXReader reader = new SAXReader();
try {
//獲取根節(jié)點(diǎn)并遍歷子節(jié)點(diǎn)
Document document = reader.read(new File(file));
Element beans = document.getRootElement();
List<Element> list = beans.elements();
for (Element element : list) {
String beanName = element.attributeValue("id");
String beanPackage = element.attributeValue("class");
Class<?> clazz = Class.forName(beanPackage);
map1.put(beanName, clazz);
map2.put(beanName, element.elements());
}
//拿到?jīng)]引用的bean
for (Map.Entry<String, Object> entry : map2.entrySet()) {
String beanName = entry.getKey();
List<Element> elements = (List<Element>) entry.getValue();
for (Element element : elements) {
if ("property".equals(element.getName())) {
String name = element.attributeValue("name");
Object value = element.attributeValue("ref");
if (value == null) {
value = element.attributeValue("value");
Object object = map1.get(beanName).newInstance();
Field field = object.getClass().getDeclaredField(name);
field.setAccessible(true);
field.set(object, value);
map3.put(beanName, object);
}
}
}
}
;
//拿有構(gòu)造的
for (Map.Entry<String, Object> entry : map2.entrySet()) {
String beanName = entry.getKey();
List<Element> elements = (List<Element>) entry.getValue();
List<Object> ls = new ArrayList<>();
int i = 1;
for (Element element : elements) {
if ("constructor-arg".equals(element.getName())) {
String name = element.attributeValue("name");
Object value = element.attributeValue("value");
if (value == null) {
value = map3.get(element.attributeValue("ref"));
}
ls.add(0, beanName);
ls.add(i, value);
i++;
}
}
if (!(ls.isEmpty())) {
Class<?> clazz = map1.get(ls.get(0));
Constructor constructor = clazz.getConstructor(ls.get(1).getClass(), ls.get(2).getClass());
Object object = constructor.newInstance(ls.get(1), ls.get(2));
map3.put((String) ls.get(0), object);
}
}
;
//拿有引用bean的
for (Map.Entry<String, Object> entry : map2.entrySet()) {
String beanName = entry.getKey();
List<Element> elements = (List<Element>) entry.getValue();
for (Element element : elements) {
if ("property".equals(element.getName())) {
if (!(map3.containsKey(beanName))) {
String name = element.attributeValue("name");
Object value = element.attributeValue("value");
if (value == null) {
value = map3.get(element.attributeValue("ref"));
}
Object object = map1.get(beanName).newInstance();
Field field = object.getClass().getDeclaredField(name);
field.setAccessible(true);
field.set(object, value);
map3.put(beanName, object);
}
}
}
}
} catch (Exception e) {
//todo
e.printStackTrace();
} finally {
return map3;
}
}
public static void main(String[] args) {
Map map = Cxml.xml("d:/file-mianshi/c.xml");
System.out.println(map)
}
}
xml3.png