java web 通过前台输入的数据(name-value)保存到后台 xml文件中

一:项目需求,前端有一个页面,页面中可以手动输入一些参数数据,通过点击前端的按钮,使输入的数据保存到后台生成的.xml文件中

二:我在前端使用的是easyui的propertygrid,这个能通过data-options中的URL:

'/task1/com/guodiantong/servlet/JsonToJspServlet.action'这个地址对应后台的servlet,要求在对应的servlet中必须有json格式的字符串输出:

String ss=javaToGson.javaToString(list);//这个里面用到的是com.google.gson.Gson这个jar包,这个jar包是实现json格式数据到字符串或javabean转换很好的包

response.setContentType("application/json");

response.getWriter().write(ss);

效果图如下:

三:项目架构:自己写的一个httpservlet

四:上代码:

1):先看从前台到后台写入xml文件代码:

前端的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
    <link rel="stylesheet" type="text/css" href="easyui.css">
   
    <link rel="stylesheet" type="text/css" href="demo.css">
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript" src="jquery.easyui.min.js"></script>
   
</head>
<body>
    
    <div style="margin:20px 0;"></div>
    <table id="pg" class="easyui-propertygrid" style="300px" data-options="
                url: '/task1/com/guodiantong/servlet/JsonToJspServlet.action',
                method: 'get',
                showGroup: true,
                scrollbarSize: 0,
                columns: mycolumns
            ">
    </table>
    <a href="javascript:void(0)" class="easyui-linkbutton" onclick="transferData()" >向XML文件中传递数值</a>
    <br>
    <a href="javascript:void(0)" class="easyui-linkbutton" onclick="transferDataToJsp()" >从XML文件中向前台传递数值</a>
 

    <script type="text/javascript">
      function transferData(){
         var opt=$('#pg').propertygrid('getData');  
         //console.log(opt);
         var row=opt.rows;
         //console.log(row);
         var as=[];
         var temp=[];
         for(var i=0;i<row.length;i++){
            var a=row[i].name;
            temp.push('{"name":'+'"' +a+'"'+ ',');
           // console.log(a);
            var b=row[i].value;
            if(i==row.length-1){
                 temp.push('"value":'+ '"'+b+'"');
                 temp.push('}');
            }else{
                temp.push('"value":'+ '"'+b+'"');
                temp.push('}'+'_');
            }
            //console.log(b);
            
            
         }
       
         as.push(temp.join(""));
         console.log(as);
         jQuery.ajax({
             url:"/task1/com/guodiantong/servlet/xmlServlet.do",
             type:"POST",
             data:{aa:as}
         })
     }
         
     function transferDataToJsp(){
        
         jQuery.ajax({
             url:"/task1/com/guodiantong/servlet/JsonToJspServlet.action",
             type:"POST",
             success:function(data){
                
                
                 alert(1);
             },
             error:function(XMLHttpRequest, textStatus, errorThrown){
                 console.log(errorThrown);
             }
         })
         $('#pg').propertygrid('reload');
     }
        
    </script>
        
</body>
</html>

接受前台数据用到的javabean:

package com.guodiantong.domain;

public class PropertyGrid {
    public String name;
    public String value;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public PropertyGrid(String name, String value) {
        
        this.name = name;
        this.value = value;
    }
    public PropertyGrid() {
        
    }
    @Override
    public String toString() {
        return "PropertyGrid [name=" + name + ", value=" + value + "]";
    }
    
}

1.1从前台到后台写入xml文件的过程涉及到的代码:servlet代码

package com.guodiantong.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import com.guodiantong.domain.PropertyGrid;
import com.guodiantong.logicmethod.GsonToJava;
import com.guodiantong.xmlparse.CreateXmlNode;

public class xmlServlet extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String filePath="/propertygrid.xml";
        String[] obj= request.getParameterValues("aa[]");
        String as[]=obj[0].split("_");
        System.out.println(obj[0]);
        System.out.println(as.length);
        List<PropertyGrid> list=new ArrayList<PropertyGrid>();
        GsonToJava gsonToJava=new GsonToJava();
        list=gsonToJava.springToJava(as);
        for(PropertyGrid pro:list){
        
            System.out.println(pro);
            System.out.println(pro.getValue());
        }
        
        System.out.println(request.getContextPath());
        CreateXmlNode createXmlNode=new CreateXmlNode();
        try {
            createXmlNode.createXmlWithNode(list, filePath);
        } catch (Exception e) {
            
            e.printStackTrace();
        }
        //System.out.println(request.getRealPath(null));
    }
}

servlet中涉及到的方法代码:

package com.guodiantong.logicmethod;

import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.guodiantong.domain.PropertyGrid;

public class GsonToJava {
    private void GsonToJava() {

    }
    public List<PropertyGrid> springToJava(String[] s){
        Gson gson=new Gson();
        List<PropertyGrid> list=new ArrayList<PropertyGrid>();
        PropertyGrid propertyGrid=new PropertyGrid();
        for(int i=0;i<s.length;i++){
        propertyGrid=gson.fromJson(s[i], PropertyGrid.class);
        list.add(propertyGrid);
        }
        return list;
        
    }
    
}

写入xml文件数据的方法:注意到,在这个代码中我是把前台的数据写到了e盘下的.Person.xml文件里了

package com.guodiantong.xmlparse;

import java.io.FileOutputStream;
import java.io.StringWriter;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import com.guodiantong.domain.PropertyGrid;

public class CreateXmlNode {
     public CreateXmlNode() {
        // TODO Auto-generated constructor stub
    }
     
     public boolean createXmlWithNode(List<PropertyGrid> list,String filePath) throws Exception{
         Document document=DocumentHelper.createDocument();
         Element root=document.addElement("parameters");
         for(int i=0;i<list.size();i++){
             
             Element param=root.addElement(list.get(i).getName());
             param.addText(list.get(i).getValue());
             
         }
         StringWriter stringWriter=new StringWriter();
         
         OutputFormat xmlFormat=new OutputFormat();
         xmlFormat.setEncoding("UTF-8");
         xmlFormat.setNewlines(true);
         xmlFormat.setIndent(true); 
         xmlFormat.setIndent("    "); 
         
         XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("e:/Person.xml"),xmlFormat);  
           //写入文件  
           xmlWriter.write(document);  
           //关闭  
           xmlWriter.close(); 
           // 输出xml 
         System.out.println(stringWriter.toString()); 

         
         return true; 
     }
}

1.2从前台从后台读取数据的过程代码:前提是我已经有一个Person.xml文件,然后把这些数据读到我前端的表格里面对应的字段去:

servlet代码:

package com.guodiantong.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.DocumentException;

import com.guodiantong.domain.PropertyGrid;
import com.guodiantong.logicmethod.JavaToGson;
import com.guodiantong.xmlparse.ReadXmlNode;

public class JsonToJspServlet extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //System.out.println("hello dopost");
        String fileName="e:/Person.xml";
        ReadXmlNode readXmlNode=new ReadXmlNode();
        JavaToGson javaToGson=new JavaToGson();
        List<PropertyGrid> list=new ArrayList<PropertyGrid>();
        try {
            list=readXmlNode.xmlToList(fileName);
            System.out.println(list);
            String ss=javaToGson.javaToString(list);
            int length=javaToGson.stringLength(list);
            System.out.println(length);
            System.out.println(ss);
            File writeFile=new File("E:/2015/prj/task1/WebContent/propertygrid_data1.vm");
            FileOutputStream fw=new FileOutputStream(writeFile);
            String propertygrid_vm="{"+""total":"+length+","rows":" + ss + "}";
            fw.write(propertygrid_vm.getBytes());
            fw.flush();
            fw.close();
            response.setContentType("application/json");
            
            response.getWriter().write(ss);
            
        } catch (DocumentException e) {
            
            e.printStackTrace();
        }
        
        
    }
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        
        doPost(request,response);
    }

}

涉及到的方法:

package com.guodiantong.logicmethod;

import java.util.List;

import com.google.gson.Gson;
import com.guodiantong.domain.PropertyGrid;

public class JavaToGson {
    public JavaToGson() {
        // TODO Auto-generated constructor stub
    }
    
    public String javaToString(List<PropertyGrid> list){
        Gson gson=new Gson();
        return gson.toJson(list);
        /*String ss="";
        for(int i=0;i<list.size();i++){
            String temp;
            temp=gson.toJson(list.get(i));
            if(i==list.size()-1){
                ss=ss+temp;
            }else{
            ss=ss+temp+",";
            }
        }
        return ss;*/
    }
    
    public int stringLength(List<PropertyGrid> list){
        Gson gson=new Gson();
        String ss="";
        for(int i=0;i<list.size();i++){
            String temp;
            temp=gson.toJson(list.get(i));
            if(i==list.size()-1){
                ss=ss+temp;
            }else{
            ss=ss+temp+"_";
            }
        }
        String ssArray[]=ss.split("_");
        int length=ssArray.length;
        return length;
    }
}
package com.guodiantong.xmlparse;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.guodiantong.domain.PropertyGrid;

public class ReadXmlNode {
    public ReadXmlNode() {
        // TODO Auto-generated constructor stub
    }
    
    public List<PropertyGrid> xmlToList(String fileName) throws DocumentException{
        List<PropertyGrid> list=new ArrayList<PropertyGrid>();
        System.out.println("进入了xmlToList方法");
        SAXReader reader=new SAXReader();
        Document doc=reader.read(fileName);
        //System.out.println(doc);
        Element root=doc.getRootElement();
        
          for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
                  PropertyGrid propertyGrid=new PropertyGrid();
                Element element = (Element) i.next();
                propertyGrid.setName(element.getName());
                propertyGrid.setValue(element.getText());
//                // do something
//                System.out.println(element.getName());
//                System.out.println(element.getText());
                list.add(propertyGrid);
            }
        
        
        
        return list;
    }
}

后台的xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<parameters>
    <Name1>Bill Smith</Name1>
    <Address1></Address1>
    <zst>27</zst>
    <Age>40</Age>
    <Birthday>01/02/2012</Birthday>
    <SSN23>123-456-7890</SSN23>
    <hhh>2334</hhh>
    <Email>bill@gmail.com</Email>
    <FrequentBuyer>false</FrequentBuyer>
    <xiaopenghui>nb</xiaopenghui>
    <lx1>nb</lx1>
    <abc1>hhh</abc1>
    <tx1>456</tx1>
    <hello2>world</hello2>
    <ag>lll</ag>
    <qq>1032077316</qq>
</parameters>
原文地址:https://www.cnblogs.com/zhangshitong/p/4958921.html