`
caleb_520
  • 浏览: 247023 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

利用XML来向服务器发送数据

    博客分类:
  • Ajax
阅读更多
今天写一篇关于利用Ajax技术,通过客户端将请求参数放入XML文件,然后将XML发送给服务器端。最后,服务器端将请求的处理结果返回给客户端。

1、首先在做一个Ajax程序的时候,必须了解Ajax其运行原理(或是工作机制)
(1)创建XMLHTTPRequest对象

(2)向服务器端发出请求

(3)服务器端接受请求并做出处理

(4)服务器端返回请求结果给客户端

(5)利用ajax接收服务器端请求结果

(6)将请求结果显示给用户(或是客户端)

2、一个登录验证例子

技术要求:

(1)登录验证采用的技术Ajax+Spring+Servlet+JavaBean

(2)采用数据库SQL Server

(3)程序实现必须采用分层结构。(即表现层+控制层+业务逻辑层+数据持久层+数据库层)

(4)那么各个层采用的技术如下:

表现层:JSP+JavaScript+Ajax

控制层:Servlet

业务逻辑层:Spring的IOC容器

数据持久层:Spring中的JDBC

数据库层:由SQL Server提供支持

程序实现步骤:
(1)先从数据库持久层开始
package com.gxa.edu.spring.dao;

import java.util.List;

import com.gxa.edu.spring.bean.Student;

public interface StudentDao {
		
	List queryStudent(String stuId, String stuName);
}


(2)接着创建一个实现StudentDao接口的StudentDaoImpl类
package com.gxa.edu.spring.dao.impl;

import java.util.List;

import org.springframework.core.io.Resource;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import com.gxa.edu.spring.bean.Student;
import com.gxa.edu.spring.dao.StudentDao;
import com.gxa.edu.spring.rowmapper.StudentRowMapper;

/**
 * 该StudentDaoImpl是操作student表的StudentDao接口具体实现类
 * 1、该类继承了Spring框架提供的JdbcDaoSupport类。
 * 2、Spring框架中的JdbcDaoSupport类是一个对JDBC抽象封装的Dao
 * 3、继承JdbcDaoSupport类,必须设置DataSource、同时通过调用JdbcDaoSupport类的getJdbcTemplate()方法为其子类提供操作数据库的JdbcTemplate类
 * 4、JdbcTemplate类是操作JDBC的核心类,并且提供了执行SQL,执行存储过程,避免操作异常功能。
 * @author Administrator
 *
 */
public class StudentDaoImpl extends JdbcDaoSupport implements StudentDao{

	public List queryStudent(String stuId, String stuName) {
		// TODO Auto-generated method stub
		String sql = "select stuId, stuName from student " +
				"where stuId = ? and stuName = ?";
		Object[] obj = {stuId, stuName};
		return getJdbcTemplate().query(sql, obj, new StudentRowMapper());
	}
}


(3)接着创建一个实现RowMapper接口的StudentRowMapper类
package com.gxa.edu.spring.rowmapper;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

import com.gxa.edu.spring.bean.Student;

public class StudentRowMapper implements RowMapper{

	public Object mapRow(ResultSet arg0, int arg1) throws SQLException {
		// TODO Auto-generated method stub
		Student stu = new Student();
		stu.setStuId(arg0.getString("stuId"));
		stu.setStuName(arg0.getString("stuName"));
		return stu;
	}

}


(4)业务逻辑层实现
package com.gxa.edu.spring.logic;

import java.util.List;
import java.util.Map;

import com.gxa.edu.spring.bean.Student;
import com.gxa.edu.spring.dao.StudentDao;

public class StudentLogic {
	
	private StudentDao dao;

	public void setDao(StudentDao dao) {
		this.dao = dao;
	}
	
	public List queryStudent(String stuId, String stuName) {
		return dao.queryStudent(stuId, stuName);
	}
	
}


(5)控制层实现
创建一个LoginXMLServlet类,该Servlet主要是处理客户端提交过来的请求
package com.gxa.edu.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
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.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.gxa.edu.spring.logic.StudentLogic;

public class LoginXMLServlet extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public LoginXMLServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request, response);
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/xml; charset=UTF-8");
        response.setHeader("Cache-Control", "no-cache");
		List list = getRoot(readXML(request.getInputStream()));
		String stuId = "";
		String stuName = "";
		for (int i = 0; i < list.size(); i++) {
			if (i > 0) {
				stuName = (String) list.get(i);
			} else {
				stuId = (String) list.get(i);
			}
		}
		System.out.println("stuId === " + stuId);
		System.out.println("stuName === " + stuName);
		
		WebApplicationContext wc = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
		StudentLogic logic = (StudentLogic) wc.getBean("transactionStudent");
		
		String info;
		
		if (logic.queryStudent(stuId, stuName).size() > 0) {
			info = "学生ID和姓名正确,验证通过";
		} else {
			info = "学生ID和姓名不正确,验证不通过";
		}
		
		PrintWriter out = response.getWriter();
		out.println(info);
		out.close();
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occure
	 */
	public void init() throws ServletException {
		// Put your code here
	}
	
	private Document readXML(InputStream in) {   
        Document document = null;   
        SAXReader saxReader = new SAXReader();   
        try {   
            document = saxReader.read(in);   
        } catch (DocumentException e) {   
            e.printStackTrace();   
        }   
        return document;   
    }
	
	private List getRoot(Document document) {   
        Element root = document.getRootElement();   
        return disXML_3(root);   
    }
	
	private List disXML_3(Element element) {   
        Iterator iterator = element.elementIterator();   
        List list = null;
        //一个泛型的使用
        List<String> list_str = new ArrayList<String>();
        while (iterator.hasNext()) {   
            Element node = (Element) iterator.next();   
            list = node.elements();   
            if (list != null && list.size() > 0) {   
                System.out.print(node.getName());   
                int count = node.attributeCount();   
                for (int i = 0; i < count; i++) {   
                    Attribute attr = node.attribute(i);   
                    System.out.println("*****" + attr.getName() + " " + attr.getText());   
                }   
                disXML_3(node);   
            } else {   
                //System.out.println(node.getName() + " " + node.getText());
                list_str.add(node.getText());
            }   
        }
        return list_str;
    } 

}


(6)表现层实现
<%@ page language="java" pageEncoding="gb2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>利用XML来向服务器发送数据</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	
	<script type="text/javascript">
		var XMLHttpReq = false;
		var stuId;
		var stuName;
	 	//创建XMLHttpRequest对象       
	    function createXMLHttpRequest() {
			if(window.XMLHttpRequest) { //Mozilla 浏览器
				XMLHttpReq = new XMLHttpRequest();
			}
			else if (window.ActiveXObject) { // IE浏览器
				try {
					XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
				} catch (e) {
					try {
						XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
					} catch (e) {}
				}
			}
		}
		//发送请求函数
		function sendRequest() {
			createXMLHttpRequest();
	    	var xml = createXML();
	        XMLHttpReq.open("POST", "LoginXMLServlet", true);
			XMLHttpReq.onreadystatechange = processResponse;//指定响应函数
	    	XMLHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    
			XMLHttpReq.send(xml);
		}
		// 处理返回信息函数
	    function processResponse() {
	    	if (XMLHttpReq.readyState == 4) { // 判断对象状态
	        	if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息
		            var res=XMLHttpReq.responseText;
		            window.alert(res);                
		        } else { //页面不正常
		           window.alert("您所请求的页面有异常。");
		        }
       		}
	    }
		function userCheck() {
			stuId = document.form1.stuId.value;
			stuName = document.form1.stuName.value;
			sendRequest();
		}
		
			//创建XML
		function createXML() {
		    var xml = "<user>";
		    xml = xml + "<stuId>" +stuId + "<\/stuId>";
		    xml = xml + "<stuName>" + stuName + "<\/stuName>";
		    xml = xml + "<\/user>";
		    return xml;
		}
	</script>

  </head>
  
  <body>
    <form name="form1">
		学生ID:
		<input type="text" name="stuId">
		<br>
		学生姓名:
		<input type="text" name="stuName">
		<br>
		<input type="button" value="登录" onclick="userCheck()">
	</form>
  </body>
</html>


(7)Spring的application.xml文件,该配置文件用的Spring 1.2版本的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	
	<!-- 配置SQL Server数据源 -->
	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName">
			<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
		</property>
		<property name="url">
			<value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=stu</value>
		</property>
		<property name="username">
			<value>sa</value>
		</property>
		<property name="password">
			<value>12345</value>
		</property>
	</bean>

	<bean id="studentDao"
		class="com.gxa.edu.spring.dao.impl.StudentDaoImpl">
		<!-- 为studentDao注入dataSource实例 -->
		<property name="dataSource">
			<ref local="dataSource" />
		</property>
	</bean>
	
	<!-- =====DataSourceTransactionManager来对数据源进行事务管理===== -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref local="dataSource" />
		</property>
	</bean>

	<!-- =====TransactionProxyFactoryBean一个事务管理代理工厂bean,它是我们Spring中一个拦截器====== -->
	<bean id="basicTransactionProxy"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
		abstract="true">
		<property name="transactionManager">
			<ref local="transactionManager" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="insert*">PROPAGATION_REQUIRED</prop>
				<prop key="update*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
		<!-- <property name="proxyTargetClass" value="true"></property> -->
	</bean>

	<!-- =====为一个操作数据库对象织入事务管理===== -->
	<bean id="transactionStudent" parent="basicTransactionProxy">
		<property name="target">
			<bean class="com.gxa.edu.spring.logic.StudentLogic">
				<property name="dao">
					<ref local="studentDao"/>
				</property>
			</bean>
		</property>
	</bean>
				
</beans>
分享到:
评论

相关推荐

    基于XML的航空物流数据交换技术研究分析

    将JavaEE数据交换服务器作为中心星型结构,利用服务器实现客户数据交换的传递。另外,和物流数据交换系统特点相互结合,提出基于术对象的中间层数据转换。研究不同关系模式的相互转换规则,实现设计航空物流数据交换...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    这是一个质的区别:网页将数据和显示混在一起,而XML则将数据和显示分开来。 我们看上面的例子,在myfile.htm中,我们只关心页面的显示方式,我们可以设计不同的界面,用不同的方式来排版页面,但数据是储存在...

    Ajax课件学习(免费)

    1浏览器的同步 1.1说明 ... 4、如果用post请求向服务器发送数据,需要将”Content-type”的首部设置为”application/x-www-form-urlencoded”.它会告知服务器正在发送数据,并且数据已经符合url编码了。

    Oauth1.0微博客户端

    基于Android系统的移动微博集成交互平台的设计与实现,用户通过手机或者PC来向微博开放平台服务器发送请求,微博服务器接收请求,并且返回XML格式或者JSON格式的数据给客户端。也就是说发送和接收都是基于字符流的,...

    mybic_1_0_0.zip_BIC_My-BIC_mybic_json p_php xml_submission

    JSON客户端Encoding支持:利用该功能你就能够在客户端或服务器之间发送和接收经过JSON Encoding的数据。 网络断线保护:当服务器Down掉时My-BIC将帮助你删除请求并阻止产生更多的调用。 内置Submission队列:所有...

    温控器LORA传输项目(lora)

    LoRa传输:温控器使用LoRa协议通过无线信道将封装后的数据发送到目标设备或服务器。LoRa的长距离传输能力使得温度数据可以跨越较远的距离传输。 数据接收和解析:目标设备或服务器上的LoRa接收模块接收到温度数据后...

    PHP+Ajax实例+注释演示

    3.2,用onreadystatechange来指定数据装载的方式.(onreadystatechange是一个异步响应事件,就是因为它,ajax才那么完美.onreadystatechange事件中可以接收到服务器传回来的数据,通过分析和利用这些数据从而完成...

    C++ 开发SOAP服务端和SOAP客户端

    利用gSOAP自带的Calc例子 仿写一个 网络中使用计算器 客户端发送需要操作的数据,服务端计算完之后,将结果返回给客户端 编写之后 我们的服务端可独立使用。像在安装了IIS或者用Apache配置的Web服务器。

    深入Java Servlet网络编程

    第14章 在Java Servlet中利用XML 14. 1 XML概述 14. 1. 1 DOM和SAX 14. 1. 2 良构的XML文档及验证实例 14. 1. 3 有效的XML文档及验证实例 14. 2 XML语法 14. 2. 1 XML文档部分 14. 2. 2 DTD 14. 3 XML应用...

    ado[1].net中文手册 学习 ado.net的重要资料

    将存储过程用于命令:描述如何使用 Command 对象来调用存储过程,并提供有关发送和检索参数值的信息。 从数据库中获取单个值:描述如何使用 Command 从数据库查询中返回单个值。 从数据库中获取 BLOB 值:描述如何...

    .NET 局域网UDP点对点通讯

    相信很多人都用过类似飞秋的软件,过去也做过很多局域网的数据传输应用,但要么就是基于TCP的,要么就是需要用户设置对方...通过发送XML,利用此类库开发的程序员可以根据自己的协议发送任意数据,包括udp文件传送等。

    PHP程序开发范例宝典III

    让你短时间内由一名菜鸟到高手绝对没问题! 由于权限有限,分3部份下载 ... ... ... ...技术、报表与打印技术、网络通信技术、PHP与XML技术、安全技术、PHP高级应用技术以及综合应用等...实例253 利用having语句过滤分组数据 390 ...

    C#开发经验技巧宝典

    1081 利用C#操作XML数据 653 1082 显示数据库记录 653 1083 如何扫描计算机端口号 653 1084 如何获得指定网页的源代码 654 1085 如何将指定URL数据下载到本地文件 654 1086 如何设置Internet浏览器外观 ...

    ASP200问.EXE

    130.如何解决表单发送数据小于100KB的问题 131.如何在表单中动态添加文本框 132.如何解决下拉列表出现选项重复的问题 133.如何实现在下拉列表中输入文字 134.如何实现级联下拉列表 135.如何根据用户的分辨率调整窗口...

    sqlserver数据库

    4.SQL Server与Windows NT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等。SQL Server也可以很好地与Microsoft BackOffice产品集成。 5.具有很好的伸缩性,可跨越从运行Windows 95/98的膝上...

Global site tag (gtag.js) - Google Analytics