三、解析

  • 服务端解析

JDK:
            DOM
            SAX
            JAXB    java and xml Binding

开源(一般都是用开源的)
            JDOM   
            DOM4J:hibernate框架就是使用dom4j来解析映射文件。
            X-Stream:java跟XML之间转换的工具(java转成xml文件/字符串,
                              xml文件/字符串转为java对象)

  • DOM/SAX/JDom/Dom4J之间的区别:

DOM/JDom:将XML文件中的内容一次性的读取到内存中。读取数据量比较少的数据有优势。

SAX:      基于事件的驱动。读取数据量比较大的XML文件。



  • 案例一(用DOM解析)

student.xsd

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/student"
  3. xmlns:tns="http://www.example.org/student" elementFormDefault="qualified">
  4. <!-- xmlns:xsd="http://www.w3.org/2001/XMLSchema" 字段表示引用w3c -->
  5.  
  6. <xsd:element name="other" ></xsd:element>
  7.  
  8. <xsd:element name="root" > <!-- 创建xml文档的根节点 -->
  9. <xsd:complexType>
  10. <xsd:sequence >
  11. <xsd:element name="student" maxOccurs="5" > <!-- 创建student节点,且这个节点在xml文档中最多出现5次 -->
  12. <xsd:complexType>
  13. <xsd:sequence>
  14. <xsd:element name="name" type="xsd:string"></xsd:element>
  15. <xsd:element name="age" >
  16. <xsd:simpleType>
  17. <!-- 设置元素节点的值为10~50之间,且为整型 -->
  18. <xsd:restriction base="xsd:integer">
  19. <xsd:maxInclusive value="50"></xsd:maxInclusive>
  20. <xsd:minInclusive value="10"></xsd:minInclusive>
  21. </xsd:restriction>
  22. </xsd:simpleType>
  23. </xsd:element>
  24. <xsd:element name="sex" type="tns:sex"></xsd:element> <!-- 引用本文件自定义的类型,用用tns前缀 -->
  25. <xsd:element name="content" type="xsd:string"></xsd:element>
  26. </xsd:sequence>
  27. <xsd:attribute name="id" type="xsd:string" ></xsd:attribute> <!-- 属性 的定义一定要放在最后面定义-->
  28. </xsd:complexType>
  29. </xsd:element>
  30. </xsd:sequence>
  31. </xsd:complexType>
  32. </xsd:element>
  33.  
  34. <xsd:simpleType name="sex">
  35. <xsd:restriction base="xsd:string">
  36. <xsd:enumeration value="男"></xsd:enumeration>
  37. <xsd:enumeration value="女"></xsd:enumeration>
  38. </xsd:restriction>
  39.  
  40. </xsd:simpleType>
  41.  
  42. </xsd:schema>

student.xml

  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <other xmlns="http://www.example.org/student" xmlns:jdbc="http://www.example.org/jdbc"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.example.org/student student.xsd http://www.example.org/jdbc jdbc.xsd ">
  5. <root>
  6. <student id="01">
  7. <name>张三</name>
  8. <age>15</age>
  9. <sex></sex>
  10. <content>张三备注</content>
  11. </student>
  12.  
  13. <student id="02">
  14. <name>被修改后的张三</name>
  15. <age>25</age>
  16. <sex></sex>
  17. <content>李四备注</content>
  18. </student>
  19. <student>
  20. <name>王五</name>
  21. <age>10</age>
  22. <sex></sex>
  23. <content><![CDATA[这是CDATA节点中的同容^*&%IO(%$R^U*&P^&RI*YHOf]]></content>
  24. </student>
  25. </root>
  26.  
  27. </other>

TestDom.java

  1. package dom;
  2.  
  3. import java.io.File;
  4.  
  5. import javax.xml.crypto.dsig.Transform;
  6. import javax.xml.parsers.DocumentBuilder;
  7. import javax.xml.parsers.DocumentBuilderFactory;
  8. import javax.xml.parsers.ParserConfigurationException;
  9. import javax.xml.transform.OutputKeys;
  10. import javax.xml.transform.Result;
  11. import javax.xml.transform.Transformer;
  12. import javax.xml.transform.TransformerFactory;
  13. import javax.xml.transform.dom.DOMSource;
  14. import javax.xml.transform.stream.StreamResult;
  15.  
  16. import org.w3c.dom.Document;
  17. import org.w3c.dom.Element;
  18. import org.w3c.dom.NodeList;
  19.  
  20. public class TestDom {
  21.  
  22. public static void main(String[] args) {
  23.  
  24. // TestDom.readXml();
  25. // TestDom.delXml();
  26. // TestDom.updateXml();
  27. TestDom.insertXml();
  28. }
  29.  
  30. private static void readXml() {
  31. File file = new File("./src/student.xml");
  32. // 得到 DOM 解析器的工厂实例
  33. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  34. DocumentBuilder documentBuilder = null;
  35. Document document = null;
  36. try {
  37. // 得到DOM解析器
  38. documentBuilder = factory.newDocumentBuilder();
  39. // 解析xml文档,得到DOM对象
  40. document = documentBuilder.parse(file);
  41. // 获取文档的根节点
  42. Element rootElement = document.getDocumentElement();
  43. // 获取根节点中的student节点,返回NodeList集合
  44. NodeList nodeList = rootElement.getElementsByTagName("student");
  45.  
  46. for (int i = 0; i < nodeList.getLength(); i++) {
  47. Element student = (Element) nodeList.item(i);
  48.  
  49. String stu_id = student.getAttribute("id");
  50.  
  51. // 获取student元素节点中第一个名叫name的元素节点,中的第一个子节点的值。
  52. String stu_name = student.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
  53. String age = student.getElementsByTagName("age").item(0).getFirstChild().getNodeValue();
  54. String sex = student.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue();
  55. String content = student.getElementsByTagName("content").item(0).getFirstChild().getNodeValue();
  56. System.out.println(
  57. "id=" + stu_id + "stu_name=" + stu_name + "age=" + age + "sex=" + sex + "content=" + content);
  58.  
  59. }
  60. } catch (Exception e) {
  61. e.printStackTrace();
  62. }
  63.  
  64. }
  65.  
  66. private static void delXml() {
  67.  
  68. File file = new File("./src/student.xml");
  69.  
  70. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  71. DocumentBuilder builder = null;
  72. Document document = null;
  73. try {
  74. builder = factory.newDocumentBuilder();
  75. document = builder.parse(file);
  76.  
  77. Element rootElement = document.getDocumentElement();
  78. Element parenElement = (Element) rootElement.getElementsByTagName("root").item(0);
  79. NodeList nodeList = rootElement.getElementsByTagName("student");
  80.  
  81. for (int i = 0; i < nodeList.getLength(); i++) {
  82.  
  83. Element student = (Element) nodeList.item(i);
  84.  
  85. // 移除属性id=3的 student元素节点
  86. if (student.getAttribute("id").equals("03")) {
  87. // 要移除某个节点,必须这个节点的父节点的remove方法来移除
  88. parenElement.removeChild(student);
  89. break;
  90. }
  91. }
  92.  
  93. // 重新将Document整个文档对象写回到XML文件中。
  94. // 这段代码的关键是将文档内容保存在文件中
  95. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  96. Transformer transformer = transformerFactory.newTransformer();
  97.  
  98. // 设置输出格式,以utf-8且缩进格式
  99. transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
  100. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  101.  
  102. DOMSource source = new DOMSource(document);
  103. StreamResult streamResult = new StreamResult(file);
  104. transformer.transform(source, streamResult);
  105.  
  106. } catch (Exception e) {
  107. e.printStackTrace();
  108. }
  109. }
  110.  
  111. private static void updateXml() {
  112. File xmlFile = new File("./src/student.xml");
  113. DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
  114. DocumentBuilder documentBuilder = null;
  115. Document document = null;
  116. try {
  117. documentBuilder = builderFactory.newDocumentBuilder();
  118. document = documentBuilder.parse(xmlFile);
  119.  
  120. Element rootElement = document.getDocumentElement();
  121.  
  122. NodeList nodeList = rootElement.getElementsByTagName("student");
  123.  
  124. for (int i = 0; i < nodeList.getLength(); i++) {
  125. Element student = (Element) nodeList.item(i);
  126. String stu_id = student.getAttribute("id");
  127.  
  128. if (stu_id.equals("02")) {
  129. // 修改属性id=02的信息
  130. student.getElementsByTagName("name").item(0).getFirstChild().setNodeValue("被修改后的张三");
  131. student.getElementsByTagName("sex").item(0).getFirstChild().setNodeValue("女");
  132. }
  133.  
  134. }
  135.  
  136. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  137. Transformer transformer = transformerFactory.newTransformer();
  138.  
  139. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  140. transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
  141.  
  142. DOMSource domSource = new DOMSource(document);
  143. StreamResult result = new StreamResult(xmlFile);
  144. transformer.transform(domSource, result);
  145.  
  146. } catch (Exception e) {
  147. e.printStackTrace();
  148. }
  149. }
  150.  
  151. private static void insertXml() {
  152. File xmlFile=new File("./src/student.xml");
  153. DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
  154. DocumentBuilder documentBuilder=null;
  155. Document document=null;
  156. try {
  157. documentBuilder=builderFactory.newDocumentBuilder();
  158. document=documentBuilder.parse(xmlFile);
  159.  
  160. Element rootElement=document.getDocumentElement();
  161. //往root节点下添加节点
  162. Element parenElment=(Element)rootElement.getElementsByTagName("root").item(0);
  163. //往studentElment节点下添加节点
  164. Element studentElment=document.createElement("student");
  165.  
  166. Element nameElment=document.createElement("name");
  167. nameElment.setTextContent("王五");
  168.  
  169. Element ageElement=document.createElement("age");
  170. ageElement.setTextContent("10");
  171.  
  172. Element sexElment=document.createElement("sex");
  173. sexElment.setTextContent("男");
  174.  
  175. Element contentElement=document.createElement("content");
  176. contentElement.appendChild(document.createCDATASection("这是CDATA节点中的同容^*&%IO(%$R^U*&P^&RI*YHOf"));
  177.  
  178. //把节点添加到父节点之后
  179. parenElment.appendChild(studentElment);
  180. studentElment.appendChild(nameElment);
  181. studentElment.appendChild(ageElement);
  182. studentElment.appendChild(sexElment);
  183. studentElment.appendChild(contentElement);
  184.  
  185. TransformerFactory transformerFactory=TransformerFactory.newInstance();
  186. Transformer transformer=transformerFactory.newTransformer();
  187.  
  188. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  189. transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
  190.  
  191. DOMSource xmlSource=new DOMSource(document);
  192. StreamResult outputTarget=new StreamResult(xmlFile);
  193.  
  194. transformer.transform(xmlSource, outputTarget);
  195.  
  196. } catch (Exception e) {
  197. }
  198.  
  199. }
  200. }


  • 案例二(用开源工具dom4j解析)

  • 前提: 导入dom4j 的jar包
  • student.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <other xmlns="http://www.example.org/student" xmlns:jdbc="http://www.example.org/jdbc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/student student.xsd http://www.example.org/jdbc jdbc.xsd ">
  4. <root>
  5. <student id="01">
  6. <name>张三</name>
  7. <age>15</age>
  8. <sex></sex>
  9. <content>张三备注</content>
  10. </student>
  11. <student id="02">
  12. <name>被修改后的张三</name>
  13. <age>25</age>
  14. <sex></sex>
  15. <content>李四备注</content>
  16. </student>
  17. <student id="03">
  18. <name>新增</name>
  19. <age>12</age>
  20. <sex></sex>
  21. <content><![CDATA[#$%^#$%#$^]]></content>
  22. </student>
  23. </root>
  24. </other>
  • Test_dom4j.java
  1. package dom;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.OutputStream;
  6. import java.util.List;
  7.  
  8. import javax.xml.transform.sax.SAXResult;
  9.  
  10. import org.dom4j.Document;
  11. import org.dom4j.DocumentException;
  12. import org.dom4j.Element;
  13. import org.dom4j.io.OutputFormat;
  14. import org.dom4j.io.SAXReader;
  15. import org.dom4j.io.SAXWriter;
  16. import org.dom4j.io.XMLWriter;
  17.  
  18. public class Test_dom4j {
  19.  
  20. public static void main(String[] args) {
  21. // Test_dom4j.readXml();
  22. // Test_dom4j.delXml();
  23. // Test_dom4j.updateXml();
  24. Test_dom4j.insertXml();
  25. }
  26.  
  27. private static void delXml() {
  28.  
  29. File xmlFile = new File("./src/student.xml");
  30. SAXReader saxReader = new SAXReader();
  31.  
  32. try {
  33. Document document = saxReader.read(xmlFile);
  34.  
  35. Element rootElement = document.getRootElement();
  36.  
  37. Element parenElement = (Element) rootElement.elements("root")
  38. .get(0);
  39.  
  40. List<Element> list = parenElement.elements("student");
  41.  
  42. for (Element student : list) {
  43.  
  44. String id = student.attributeValue("id");
  45.  
  46. if (id.equals("03")) {
  47. // 只能有父节点的remove方法移除
  48. parenElement.remove(student);
  49. break;
  50. }
  51. }
  52.  
  53. // 将更改的Document节点重新写回到XML文件中
  54. OutputStream outputStream = new FileOutputStream(xmlFile);
  55. XMLWriter xmlWriter = new XMLWriter(outputStream);
  56. xmlWriter.write(document);
  57. xmlWriter.flush();
  58. xmlWriter.close();
  59.  
  60. } catch (Exception e) {
  61. e.printStackTrace();
  62. }
  63. }
  64.  
  65. private static void readXml() {
  66.  
  67. // 创建一个xml的解析器
  68. File xmlFile = new File("./src/student.xml");
  69. SAXReader reader = new SAXReader();
  70.  
  71. try {
  72. // 获取文档对象
  73. Document document = reader.read(xmlFile);
  74.  
  75. // 获取根节点,注意这里的Element对象必须是org.dom4j.Element类的对象,不同于DOM方法解析xml文件
  76. Element rootElement = document.getRootElement();
  77.  
  78. // 获取root节点
  79. Element parenElment = (Element) rootElement.elements().get(0);
  80.  
  81. List<Element> list = parenElment.elements("student");
  82.  
  83. for (Element student : list) {
  84. String stu_id = student.attributeValue("id");
  85.  
  86. String name = student.element("name").getText();
  87. String age = student.elementText("name"); // 相当于student.element("age").getText();
  88. String sex = student.elementText("sex");
  89. String content = student.elementText("content");
  90.  
  91. System.out.println("id=" + stu_id + "name=" + name + "age="
  92. + age + "sex=" + sex + "content" + content);
  93.  
  94. }
  95.  
  96. } catch (DocumentException e) {
  97.  
  98. e.printStackTrace();
  99. }
  100. }
  101.  
  102. private static void updateXml() {
  103. File xmlFile = new File("./src/student.xml");
  104. SAXReader saxReader = new SAXReader();
  105.  
  106. try {
  107. Document document = saxReader.read(xmlFile);
  108.  
  109. Element rootElement = document.getRootElement();
  110.  
  111. Element parenElement = (Element) rootElement.elements("root")
  112. .get(0);
  113.  
  114. List<Element> stuList = parenElement.elements("student");
  115.  
  116. for (Element student : stuList) {
  117. String id = student.attributeValue("id");
  118.  
  119. if (id.equals("01")) {
  120. student.element("name").setText("修改后的01");
  121. student.element("age").setText("22");
  122. // 先把CDATA节点删除再添加
  123. student.remove(student.element("content"));
  124. student.addElement("content").addCDATA("$#^%$&*$674");
  125.  
  126. }
  127. }
  128.  
  129. // 保存修改后的数据
  130. OutputStream outputStream = new FileOutputStream(xmlFile);
  131.  
  132. OutputFormat format = OutputFormat.createPrettyPrint();
  133.  
  134. format.setIndent(true);
  135. format.setIndent("\t");
  136. format.setEncoding("UTF-8");
  137. format.setTrimText(true);
  138.  
  139. XMLWriter xmlWriter = new XMLWriter(outputStream, format);
  140. xmlWriter.write(document);
  141. xmlWriter.flush();
  142. xmlWriter.close();
  143.  
  144. } catch (Exception e) {
  145. e.printStackTrace();
  146. }
  147. }
  148.  
  149. private static void insertXml() {
  150. File xmlFile=new File("./src/student.xml");
  151.  
  152. SAXReader saxReader=new SAXReader();
  153.  
  154. try {
  155. Document document=saxReader.read(xmlFile);
  156.  
  157. Element rootElement=document.getRootElement();
  158.  
  159. Element parenElement=rootElement.element("root");
  160.  
  161. Element studentElement=parenElement.addElement("student");
  162. studentElement.addAttribute("id", "03");
  163.  
  164. studentElement.addElement("name").setText("新增");
  165. studentElement.addElement("age").setText("12");
  166. studentElement.addElement("sex").setText("男");
  167. studentElement.addElement("content").addCDATA("#$%^#$%#$^");
  168.  
  169. OutputStream out=new FileOutputStream(xmlFile);
  170. OutputFormat format=OutputFormat.createPrettyPrint();
  171.  
  172. format.setIndent(true);
  173. format.setIndent("\t");;
  174.  
  175. format.setEncoding("UTF-8");
  176. format.setTrimText(true);
  177.  
  178. XMLWriter xmlWriter=new XMLWriter(out,format);
  179. xmlWriter.write(document);
  180. xmlWriter.flush();
  181. xmlWriter.close();
  182.  
  183. } catch (Exception e) {
  184. e.printStackTrace();
  185. }
  186. }
  187. }


四、字符串和XML对象的转换

  • Test_Dom4j_Convert.java
  1. package dom;
  2.  
  3. import java.io.File;
  4.  
  5. import org.dom4j.Document;
  6. import org.dom4j.DocumentException;
  7. import org.dom4j.DocumentHelper;
  8. import org.dom4j.Element;
  9. import org.dom4j.io.SAXReader;
  10.  
  11. public class Test_Dom4j_Convert {
  12.  
  13. public static void main(String[] args) {
  14. //Test_Dom4j_Convert.StringtoXml();
  15. Test_Dom4j_Convert.XmltoString();
  16.  
  17. }
  18.  
  19. /**
  20. * 把String 转为 xml对象
  21. */
  22. private static void StringtoXml() {
  23. String xml_str="<root><name>admin</name><age>21</age></root>";
  24.  
  25. try {
  26. Document document=DocumentHelper.parseText(xml_str);
  27. Element rootElement=document.getRootElement();
  28.  
  29. String name=rootElement.element("name").getText();
  30. String age=rootElement.elementText("age");
  31.  
  32. System.out.println("name="+name+"\t age="+age);
  33.  
  34. } catch (DocumentException e) {
  35. e.printStackTrace();
  36. }
  37. }
  38.  
  39. private static void XmltoString() {
  40. File xmlFile=new File("./src/student.xml");
  41.  
  42. SAXReader saxReader=new SAXReader();
  43.  
  44. try {
  45. Document document=saxReader.read(xmlFile);
  46.  
  47. Element rootElement=document.getRootElement();
  48.  
  49. Element parenElement=(Element)rootElement.elements("root").get(0);
  50.  
  51. String xmltoString=parenElement.asXML();
  52.  
  53. System.out.println(xmltoString);
  54.  
  55. } catch (DocumentException e) {
  56. e.printStackTrace();
  57. }
  58.  
  59. }
  60. }
  • student.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <other xmlns="http://www.example.org/student" xmlns:jdbc="http://www.example.org/jdbc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/student student.xsd http://www.example.org/jdbc jdbc.xsd ">
  4. <root>
  5. <student id="01">
  6. <name>张三</name>
  7. <age>15</age>
  8. <sex></sex>
  9. <content>张三备注</content>
  10. </student>
  11. <student id="02">
  12. <name>被修改后的张三</name>
  13. <age>25</age>
  14. <sex></sex>
  15. <content>李四备注</content>
  16. </student>
  17. <student id="03">
  18. <name>新增</name>
  19. <age>12</age>
  20. <sex></sex>
  21. <content><![CDATA[#$%^#$%#$^]]></content>
  22. </student>
  23. </root>
  24. </other>


(二)XML基础(2)的更多相关文章

  1. XML基础介绍【二】

    XML基础介绍[二] 1.schema约束dtd语法: <!ELEMENT 元素名称 约束>schema符合xml的语法,xml语句.一个xml中可以有多个schema,多个schema使 ...

  2. xml基础之二(XML结构【2】)DTD文档模版

    xml基础之二(XML结构[2])DTD文档模版 xml 模板 文档结构  我们知道XML主要用于数据的存储和传输,所以无论是自定义还是外部引用DTD模板文档,都是为了突出数据的存储规范.DTD(文档 ...

  3. xml基础之二(XML结构【1】)

    xml基础之二(XML结构[1]) 新建 模板 小书匠  XML结构 XML结构 1.1 元素:被开始标签和结束标签所包裹的内容,(红色部分),蓝色部分也是元素,由于其仅有词语和句子,可细分为文本元素 ...

  4. .net学习笔记---xml基础知识

    一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...

  5. XML基础概念

    XML基础概念 一.什么是XML. 可扩展标记语言(EXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. 二.XML特点 1 ...

  6. XML基础<第一篇>

    一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...

  7. XML基础+Java解析XML +几种解析方式的性能比较

    XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数 ...

  8. UWP入门(二) -- 基础笔记

    原文:UWP入门(二) -- 基础笔记 不错的UWP入门视频,1092417123,欢迎交流 UWP-04 - What i XMAL? XAML - XML Syntax(语法) ,create i ...

  9. 第一篇 -- XML基础

    一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...

随机推荐

  1. Vue学习手记03-路由跳转与路由嵌套

    1.路由跳转 添加一个LearnVue.vue文件, 在router->index.js中 引入import Learn from '@/components/LearnVue' 在touter ...

  2. usb 设备 复位

    How to Reset USB Device in Linux by ROMAN10 on MAY 4, 2011 · 9 COMMENTS   USB devices are anywhere n ...

  3. EINVRES Request to https://bower.herokuapp.com/packages/ failed with 502

    Bower install fails with 502 - Bad Gateway when downloading bower packages. For example bower instal ...

  4. LEFT JOIN 关键字语法

    SQL LEFT JOIN 关键字 LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行. LEFT JOIN 关键 ...

  5. proj-6.1.1 编译

    Requiring C++11 Requiring C++11 - done Configuring PROJ: PROJ_VERSION = 6.1.1 PROJ_ABI_VERSION = 6_1 ...

  6. Ubuntu 14.04 apache安装配置

    http://jingyan.baidu.com/article/6d704a130c8a0d28da51ca5f.html Ubuntu 14.04 apache安装配置 1.安装 ~# apt-g ...

  7. (十)java虚拟机性能监控工具

    一. jps(Java Virtual Machine Process Status Tool) jps主要用来输出JVM中运行的进程状态信息.语法格式如下: 命令行参数选项说明如下: 1.1 案例 ...

  8. Java如何获取ResultSet结果中的每一列的数据类型

    示例代码片段: ResultSet resultSet = statement.executeQuery(sql); ResultSetMetaData metaData = resultSet.ge ...

  9. Nginx作为负载均衡把客户端真实IP发送给后端配置

    Nginx作为负载均衡获取到客户端的真实IP,但是后端获取到的IP为nginx负载均衡的IP,需要修改配置使后端获取到客户端的真实IP 修改nginx配置增加3行 proxy_set_header H ...

  10. react做的简单的购物车

    ###第一步 :首先电脑上已经安装react的脚手架 cnpm  install    create-react-app   -g ###第二步 :创建项目 creact-react-app   项目 ...