一:项目需求,前端有一个页面,页面中可以手动输入一些参数数据,通过点击前端的按钮,使输入的数据保存到后台生成的.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="width: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>

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

  1. Android中通过代码获取arrays.xml文件中的数据

    android工程res/valuse文件夹下的arrays.xml文件中用于放各种数组数据,比如字符串数组.整型数组等,数组中的数据可能是具体的值,也有可能是对资源数据的引用,下面针对这两种情况通过 ...

  2. Java从入门到精通——技巧篇之利用dom4j取出XML文件中的数据

    在我们做项目的时候会经常用到XML文件用来配置系统,XML让系统更加的具有了灵活性,Java如何从XML中取出我们想要的数据呢?下面是我利用DOM4J来实现取出XML文件中的数据. XML文件 < ...

  3. web.xml文件中的web-app元素 部署

    [转载]web.xml文件中的web-app元素 (2012-05-24 13:35:57) 转载▼ 标签: 转载 分类: java 挺全 的 呵呵呵 转了 原文地址:web.xml文件中的web-a ...

  4. web.xml文件中加载顺序的优先级

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  5. 基于Java+Selenium的WebUI自动化测试框架(八)-----读取元素(XML文件)

    我们继续回到自动化测试框架的主线上来,在前面的文章中,我们定义一个页面元素的主要参数有:路径,找寻方式,等待时间,名称,这个四个参数.另外,我们还需要考虑一个问题,就是网站的页面. 举个例子来说,如果 ...

  6. C#程序中:如何修改xml文件中的节点(数据)

    要想在web等程序中实现动态的数据内容给新(如网页中的Flash),不会更新xml文件中的节点(数据)是远远不够的,今天在这里说一个简单的xml文件的更新,方法比较基础,很适合初学者看的,保证一看就懂 ...

  7. C#程序中:如何向xml文件中插入节点(数据)

    向xml文件中动态的添加节点(数据)是一件很爽的事,可以给你的程序带来很多的方便,比如在web中,如果你的Flash用到了xml文件,这个方法可以让你在后台就轻轻松松的更新你的Flash内容哦!一起研 ...

  8. web.xml文件中的7个错误的安全配置

    web.xml文件中的7个错误的安全配置 关于Java的web.xml文件中配置认证和授权有大 量 的 文章.本文不再去重新讲解如何配置角色.保护web资源和设置不同类型的认证,让我们来看看web.x ...

  9. 如何在web.xml文件中引入其他的xml文件(拆分web.xml)

    转载自:http://www.blogjava.net/jiangjf/archive/2009/04/09/264685.html 最近在做一个Servlet+javaBean的项目,服务器用的是t ...

随机推荐

  1. hivepython 实现一行转多行

    案例1: ==效果等同于一行转多行 数据表名称:zhangb.gid_tags 数据格式,每行是2个字段,(gid,tags) ,可能有脏数据,分隔符为“\t”,   ANDROID-9de77225 ...

  2. <a>, <input>, <button>的区分与何时使用

    像 button 的原始目的就是一个通用的按钮,点击后应该触发 JavaScript, 没有其它附带的隐含的附加效果,<a> 标签的隐含附带效果就是跳转页面到其它地方,而提交表单时应该有一 ...

  3. 通过html5 的EventSource来进行数据推送

    以往我们要获取服务器的数据更新,一般通过ajax的定时请求,不过这样效率就低了.我们通过html5的EventSource可以很方便的获取服务器的数据更新,不过IE好像不支持.   例1如下: ind ...

  4. dbus通信与接口介绍

    DBUS是一种高级的进程间通信机制.DBUS支持进程间一对一和多对多的对等通信,在多对多的通讯时,需要后台进程的角色去分转消息,当一个进程发消息给另外一个进程时,先发消息到后台进程,再通过后台进程将信 ...

  5. Debian 利用 iso 镜像完全离线更新 apt-cdrom

    1 目的 在日常的 linux 服务器管理中,出于某些考虑,服务器要求与 Internet 完全隔离. 这使得我们对系统的更新和软件包的升级感到无比头疼. 下面介绍的这种方法,采用 ISO 文件,进行 ...

  6. Laravel 根据任务的性质和要求决定处理的方式(Cron or Job)

    1 前言 一般地,我们在应用的开发中,会碰到各种各样的任务解决需求.我的原则是,选择合适的方法做正确的事. 2 任务分类 在开发中, 一般会有以下几种性质的任务. 2.1 实时任务 一般是指,任务间的 ...

  7. boosting_bagging

    boosting(提升法) 对于训练集中的每个样本建立全职W(i),当某个样本被错误分类概率很高时,样本的权重加大: 在迭代过程中,每一个迭代器都是一个弱分类器,我们需要用某种策略将其组合,作为最终模 ...

  8. Phantomjs 生成多页PDF

    开篇 最近使用 Phantomjs 生成PDF,其中遇到一些问题,导致PDF生成失败,如出现空白文件或一页数据量太大,都是由于没有设置好格式导致.特别是分页问题,感觉资料很少,除了在 StackOve ...

  9. bitset相关

    位关联容器 bitset<1000> s ;//新建一个容量为1000位的bitset s.test(k);           //读取第k位,结果为0或1 s.set(k);     ...

  10. 使用Jsoup获取网页内容超时设置

    使用Jsoup获取网页内容超时设置 最近使用Jsoup来抓取网页,并对网页进行解析,发现很好用.在抓取过程中遇到一个问题,有些页面总是报Timeout异常,开始想是不是被抓取网站对IP进行了限制,后来 ...