`
caleb_520
  • 浏览: 250459 次
  • 性别: 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>
分享到:
评论

相关推荐

    java http 发送xml报文(java发送xml报文实例+参数)

    // 表示向服务器写入数据 ``` 3. **发送XML报文** 写入XML字符串到HTTP连接: ```java try(OutputStream os = connection.getOutputStream()) { os.write(xmlString.getBytes(StandardCharsets.UTF_8)); } ...

    PPC2003通过GPrs向服务器发送数据

    描述提到“PPC通过GPRS调用服务器WebService向服务器发送数据”,这表明具体的通信方式是利用GPRS网络连接,调用Web服务接口(WebService)。WebService是一种基于XML和HTTP的协议,允许不同平台的应用程序之间交换...

    使用XML HTTP发送超长XML表单数据

    `open`方法用于初始化请求,`send`方法则用于发送数据。 然而,如果受到只能使用FORM提交的约束,可以通过创建多个隐藏的INPUT元素来分块发送XML数据,每一块不超过服务器允许的最大长度。例如,如果最大长度是90,...

    java http 发送xml报文

    设置`setDoOutput(true)`表示将有输出流,即向服务器发送数据;`setRequestMethod("POST")`设置请求方法为POST。 - **发送数据**:将之前构建的XML字符串转换为字节数组,并通过`DataOutputStream`写入到连接的输出...

    Java 使用Tcpip 发送XML文件

    连接建立后,通过Socket的InputStream接收服务器发送的字节流,并将其还原为XML文本。 3. **XML读写**:在Java中,我们可以使用如JAXB(Java Architecture for XML Binding)或者DOM、SAX、StAX等API来读取和写入...

    通过winHttp发送xml数据

    这两个项目可以作为学习和理解winHttp与XML结合使用的实例,通过阅读和运行代码,可以深入理解如何利用winHttp发送XML数据,以及如何处理响应。 总的来说,这个主题涵盖了网络编程基础,HTTP协议,Windows API使用...

    C++实现http的post发送接收数据以及xml解析

    HTTP POST请求通常用于向服务器发送数据,比如用户填写表单后提交信息。在C++中,我们可以利用WinInet API来创建这种请求。WinInet是Microsoft提供的一个库,它提供了基本的Internet客户端功能,包括HTTP、HTTPS和...

    XML_delphi.rar_delphi XML_xml delphi_xml上传_xml上传服务器_数据上传

    "DataFetchPort"可能包含了与服务器通信的代码,包括创建XML文档、建立网络连接和发送数据的函数。 XML数据的创建可以通过`TXMLDocument`类来实现,它允许我们动态地构建XML树,然后将其保存为字符串或直接写入流。...

    利用AJAX修改服务器端XML并在客户端访问XML

    本文将深入探讨如何利用AJAX技术来修改服务器端的XML文件,并在客户端访问这些修改后的数据。 首先,我们需要理解XML(Extensible Markup Language)。XML是一种用于存储和传输结构化数据的标准格式,它独立于软件...

    7、使用JSON向服务器发送数据——ajax基础笔记

    在“使用JSON向服务器发送数据——ajax基础笔记”这个主题中,我们首先会了解如何创建一个XMLHttpRequest对象。在JavaScript中,你可以通过`new XMLHttpRequest()`来实例化一个对象,然后利用它的方法如`open()`、`...

    xml自动调用数据库数据填写表单

    本话题将深入探讨如何利用XML自动调用数据库数据来填写表单,以及与jQuery的结合应用。 一、XML基础 1. XML结构:XML文档由元素、属性、文本和注释组成。每个XML文档都有一个根元素,子元素嵌套在根元素内,形成...

    C#调用servlet 发送XML

    本篇将深入探讨如何利用C#来调用Servlet并发送XML数据,这对于跨语言通信和系统集成具有重要意义。 首先,理解C#调用Servlet的过程。Servlet是Java Web应用的一部分,它运行在服务器端,处理来自客户端(如浏览器)...

    Flex+SpringMVC HttpService 发送XML数据

    Flex是Adobe开发的一种富互联网应用程序(RIA...这种方式允许开发者充分利用XML的结构化特性,构建复杂的数据交换场景。在实际开发中,还需考虑错误处理、安全性以及性能优化等多方面问题,以提供稳定、高效的Web服务。

    XML的数据源对象(数据岛)源代码

    "XML的数据源对象(数据岛)源代码"指的是利用XML数据岛技术构建的程序源代码。 XML数据岛的核心思想是将XML数据作为HTML页面的一部分,通过JavaScript或者微软的服务器端技术(如ASP.NET)来处理和显示这些数据。...

    从xml读写邮件发送邮件

    使用C#处理XML文件,我们可以利用System.Xml命名空间中的类,如XmlDocument、XmlNode和XmlElement等来解析和操作XML数据。 2. 邮件API:C#提供了System.Net.Mail命名空间,其中包含SmtpClient和MailMessage类,用于...

    ajax获取服务器以xml形式输出省市数据,并获取数据绑定前台下拉框和实现联动

    在本示例中,我们关注的是如何利用Ajax从服务器获取以XML(Extensible Markup Language)格式的数据,然后将这些数据绑定到前端的下拉框中,以及实现下拉框之间的联动效果。下面我们将详细探讨这一过程。 首先,XML...

    从服务器获取数据,上传数据

    4. **上传数据**:当需要向服务器上传数据时,通常包括文件上传和表单数据提交。文件上传涉及Multipart请求,可以使用RequestBody、OkHttp的RequestBody.create方法来创建。表单数据可以通过POST请求的RequestBody...

    feign以XML格式传输-技术点eureka-feign-jackson.zip

    总之,这个项目展示了如何在Spring Cloud微服务架构中,利用Feign进行服务间通信,并且将数据以XML格式传输。通过结合Eureka服务发现、Feign声明式调用以及Jackson的XML支持,我们可以实现高效、灵活的服务间交互。

    Socket发送并接收服务器返回的数据

    1. **获取OutputStream**:通过Socket实例,我们可以获取到OutputStream,用于向服务器发送数据: ```java OutputStream outputStream = socket.getOutputStream(); ``` 2. **写入数据**:使用DataOutputStream...

Global site tag (gtag.js) - Google Analytics