zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    大小端表示法
    构建二叉树并求其深度
    输入一行字符反向输出
    C++读取一行字符串输入
    关于递归调用的深度
    2016-9-22题目:extern char* 与char[]
    Ubuntu安装搜狗输入法
    判断字符串相等
    [Warning] deprecated conversion from string constant to 'char*' 原因
    ArcGIS API for JavaScript 4.2学习笔记[31] (补充学习)Task类
  • 原文地址:https://www.cnblogs.com/zhangshitong/p/4958921.html
Copyright © 2011-2022 走看看