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

利用DOM动态更新列表-(最终版源码Ajax+JSP+Servlet+Spring+SQL Server)

    博客分类:
  • Ajax
阅读更多
大概有一段时间没有进入blog写些东西了。今天我将利用DOM动态更新列表-(最终版源码Ajax+JSP+Servlet+Spring+SQL Server),奉献给大家。当然,还是那个宗旨喜欢就看看吧。

1、首先给出这个程序设计的流程

表现层:JSP+JavaScript+Ajax

控制层:Servlet

业务逻辑层:Spring的IOC容器

数据持久层:Spring中的JDBC

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

上面给出了程序设计的流程,那么我在程序设计的时候就是通过上述流程来实现的。

2、实现步骤如下

整个程序设计的步骤由数据持久层向表现层实现

第一:数据持久层

DAO接口实现代码:
package com.gxa.edu.spring.dao;
/**
*@author 国信安百杰
*/
import java.util.List;

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

public interface ShoppingDao {
	int insertShopping(Shopping shopping);
	
	int deleteShopping(Shopping shopping);
	
	List queryShopping();
	
	int queryMaxShoppingId();
}


实现DAO接口的类代码:
package com.gxa.edu.spring.dao.impl;
/**
*@author 国信安百杰
*/
import java.util.List;

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

import com.gxa.edu.spring.bean.Shopping;
import com.gxa.edu.spring.dao.ShoppingDao;
import com.gxa.edu.spring.rowmapper.ShoppingRowMapper;

public class ShoppingDaoImpl extends JdbcDaoSupport implements ShoppingDao{

	public int deleteShopping(Shopping shopping) {
		// TODO Auto-generated method stub
		String sql = "delete from shopping where shoppingName = ?";
		Object[] obj = {shopping.getShoppingName()};
		return getJdbcTemplate().update(sql, obj);
	}

	public int insertShopping(Shopping shopping) {
		// TODO Auto-generated method stub
		String sql = "insert into shopping values(?,?)";
		Object[] obj = {shopping.getShoppingId(), shopping.getShoppingName()};
		return getJdbcTemplate().update(sql, obj);
	}

	public List queryShopping() {
		// TODO Auto-generated method stub
		String sql = "select * from shopping";
		return getJdbcTemplate().query(sql, new ShoppingRowMapper());
	}

	public int queryMaxShoppingId() {
		// TODO Auto-generated method stub
		String sql = "select max(shoppingId) from shopping";
		return getJdbcTemplate().queryForInt(sql);
	}

}


编写完上面的接口和类,那么就需要在Spring的配置文件中配置相应的信息
<bean id="shoppingDao" class="com.gxa.edu.spring.dao.impl.ShoppingDaoImpl">
	<property name="dataSource">
		<ref local="dataSource"/>
	</property>
</bean>


实现Spring的RowMapper接口的类:
package com.gxa.edu.spring.rowmapper;
/**
*RowMapper接口主要是通过Spring对JDBC的封装将数据封装给一个JavaBean
*@author 国信安百杰
*/
import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

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

public class ShoppingRowMapper implements RowMapper{

	public Object mapRow(ResultSet arg0, int arg1) throws SQLException {
		// TODO Auto-generated method stub
		Shopping shopping = new Shopping();
		shopping.setShoppingId(arg0.getInt("shoppingId"));
		shopping.setShoppingName(arg0.getString("shoppingName"));
		return shopping;
	}

}


实现Shopping JavaBean的代码:
package com.gxa.edu.spring.bean;
/**
*@author 国信安百杰
*/
public class Shopping {
	private int shoppingId;
	private String shoppingName;
	public int getShoppingId() {
		return shoppingId;
	}
	public void setShoppingId(int shoppingId) {
		this.shoppingId = shoppingId;
	}
	public String getShoppingName() {
		return shoppingName;
	}
	public void setShoppingName(String shoppingName) {
		this.shoppingName = shoppingName;
	}
}


第二:业务逻辑层

package com.gxa.edu.spring.logic;
/**
*@author 国信安百杰
*/
import java.util.List;

import com.gxa.edu.spring.bean.Shopping;
import com.gxa.edu.spring.dao.ShoppingDao;

public class ShoppingLogic {
	private ShoppingDao dao;

	public void setDao(ShoppingDao dao) {
		this.dao = dao;
	}
	
	public List queryShopping() {
		return dao.queryShopping();
	}
	
	public int deleteShopping (Shopping shopping) {
		return dao.deleteShopping(shopping);
	}
	
	public int insertShopping(Shopping shopping) {
		return dao.insertShopping(shopping);
	}
	
	public int queryMaxShoppingId() {
		return dao.queryMaxShoppingId();
	}

}


业务逻辑类在Spring中配置信息
<bean id="shoppingLogic" class="com.gxa.edu.spring.logic.ShoppingLogic">
	<property name="dao">
		<ref local="shoppingDao"/>
	</property>
</bean>


第三:控制层的实现

package com.gxa.edu.servlet;
/**
*@author 国信安百杰
*/
import java.io.IOException;
import java.io.PrintWriter;

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

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.gxa.edu.spring.bean.Shopping;
import com.gxa.edu.spring.logic.ShoppingLogic;

public class ShoppingServlet extends HttpServlet {

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

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

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/xml; charset=UTF-8");
		String name = request.getParameter("name");
		String action = request.getParameter("action");
		
		System.out.println("name===" + name);
		System.out.println("action===" + action);
		
		PrintWriter out = response.getWriter();
		WebApplicationContext wc = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
		ShoppingLogic logic = (ShoppingLogic) wc.getBean("shoppingLogic");
		if ("add".equals(action)) {
			int i = logic.queryMaxShoppingId();
			
			System.out.println(i);
			
			Shopping shopping = new Shopping();
			shopping.setShoppingId(i + 1);
			shopping.setShoppingName(name);
			
			if (logic.insertShopping(shopping) > 0) {
				out.println("添加商品成功");
			} else {
				out.println("添加商品失败");
			}
		}
		if ("del".equals(action)) {
			Shopping shopping = new Shopping();
			shopping.setShoppingName(name);
			if (logic.deleteShopping(shopping) > 0) {
				out.println("删除商品成功");
			} else {
				out.println("删除商品失败");
			}
		}
		out.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occure
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}


第四:表现层的实现
表现层中创建一个dynamicShopping.jsp页面,在该页面里面编写了Ajax代码

<%@ page language="java" import = "java.util.*" pageEncoding="gb2312"%>
<%@ page import = "org.springframework.web.context.WebApplicationContext" %>
<%@ page import = "org.springframework.web.context.support.WebApplicationContextUtils" %>
<%@ page import = "com.gxa.edu.spring.logic.*" %>
<%@ page import = "com.gxa.edu.spring.bean.*" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>实现Web页面局部动态更新品牌信息</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">
	-->
	<link rel="stylesheet" type="text/css" href="images/css.css">
	<script type="text/javascript">
		var XMLHttpReq = false;
	 	//创建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 addSortProcessResponse() {
			if (XMLHttpReq.readyState == 4) {//和服务器端交互完毕
				if (XMLHttpReq.status == 200) {//返回成功信息
					addSortList();
				}
			}
		}
		
		//确认按钮出发事件函数
		function addSort() {
			var name = document.getElementById("name").value;
			if (name == "") {
				return;
			}
			var url = "ShoppingServlet?action=add" + "&name=" + name;
			createXMLHttpRequest();
			XMLHttpReq.open("GET", url, true);//建立服务器端连接
			XMLHttpReq.onreadystatechange = addSortProcessResponse;//指定添加商品的相应函数	
			XMLHttpReq.send(null);
		}
		
		//一旦添加商品信息进入后台数据库,就执行此函数将信息打印到页面
		function addSortList() {
			var name = document.getElementById("name").value;
			if (name == "") {
				return;
			}
			var row = document.createElement("tr");
			row.setAttribute("id", name);
			var cell = document.createElement("td");
			cell.appendChild(document.createTextNode(name));
			row.appendChild(cell);
			
			//添加删除按钮
			var deleteButton = document.createElement("input");
			deleteButton.setAttribute("type", "button");
			deleteButton.setAttribute("value", "删除");
			deleteButton.onclick = function () {deleteSort(name)};
			cell = document.createElement("td");
			cell.appendChild(deleteButton);
			row.appendChild(cell);
			
			//将设置好的元素动态添加到tbody里面
			document.getElementById("sortList").appendChild(row);
			//添加完品牌后就清空输入框
			document.getElementById("name").value="";
		}
		
		//删除品牌信息相应函数
		function deleteSortProcessResponse() {
			if (XMLHttpReq.readyState == 4) {//和服务器端交互完毕
				if (XMLHttpReq.status == 200) {//返回成功信息
					window.alert("删除成功");
				}
			}
		}
		
		//删除品牌信息
		function deleteSort(id) {
			if (id != null) {
				//var row = document.getElementById(id);
				//var sorlist = document.getElementById("sortlist");
				//sorlist.removeChild(row);

				var url = "ShoppingServlet?action=del" + "&name=" + id;
				createXMLHttpRequest();
				XMLHttpReq.open("GET", url, true);//建立服务器端连接
				XMLHttpReq.onreadystatechange = deleteSortProcessResponse;//指定添加商品的相应函数	
				XMLHttpReq.send(null);
				clearSort(id);//清空表格中信息
			}
		}
		
		//清空表格中信息
		function clearSort(id) {
			if (id != null) {
				var row = document.getElementById(id);
				var sorlist = document.getElementById("sortlist");
				sorlist.removeChild(row);
			}
		}
	</script>

  </head>
  
  <% 
  	WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
  	ShoppingLogic logic = (ShoppingLogic) ctx.getBean("shoppingLogic");
  	List list = logic.queryShopping();
  %>
  
  <body>
    <table style="BORDER-COLLAPSE: collapse" bordercolor="#111111" cellspacing="0" cellpadding="2" width="400" bgcolor="#f5efe7" border="0">
		<tr>
			<td align="middle" height="4" colspan="3">
				<img height="4" src="images/promo_list_top.gif" width="100%" border="0" alt="">
			</td>
		</tr>
		<tr>
			<td align="middle" bgcolor="#dbc2b0" height="19" colspan="3">
				<b>品牌信息管理</b>
			</td>
		</tr>
		<tr>
			<td height="20">
				增加新品牌:
			</td>
			<td height="20">
				<input id="name" type="text" size="15">
			</td>
			<td height="20">
				<img src="images/ok.gif" onclick="addSort();" alt="">
			</td>
	
		</tr>
		<tr>
			<td height="20">
				品牌信息管理:
			</td>
	
		</tr>
		<table border="1" width="400">
			<tr>
				<td height="20" valign="top" align="center">
					品牌名称:
				</td>
				<td id="pos_1" height="20">
					操作
				</td>
			</tr>
			<tbody id="sortList">
			<% 
				for (int i = 0; i < list.size(); i++) {
					Shopping shopping = (Shopping) list.get(i);%>
				<tr id="<%=shopping.getShoppingName() %>">
					<td><%=shopping.getShoppingName() %></td>
					<td><input type="button" value="删除" onclick="deleteSort('<%=shopping.getShoppingName() %>')"></input></td>
				</tr>
			<%}%>
			</tbody>
		</table>
	</table>
  </body>
</html>


最后,给出整个Spring的配置文件applicationContext.xml的代码
<?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>123456</value>
		</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>
			
	<!-- ====配置ShoppingDao===== -->
	<bean id="shoppingLogic" class="com.gxa.edu.spring.logic.ShoppingLogic">
		<property name="dao">
			<ref local="shoppingDao"/>
		</property>
	</bean>
	
	<bean id="shoppingDao" class="com.gxa.edu.spring.dao.impl.ShoppingDaoImpl">
		<property name="dataSource">
			<ref local="dataSource"/>
		</property>
	</bean>
</beans>


3、总结
上面的代码其实在我们开发和运用肯定是微乎其微,但是在我们平时刚开始学习的时候,这段代码确实我们进步的基础。

要给大家说一下的是Spring框架的版本是1.2的。在applicationContext.xml文件加入了1.2版本的事务管理。Spring1.2版本的事务管理和高版本的有比较大的区别。当然,大家对Spring比较了解的可以使用高一些的版本,如Spring2.0或是Spring2.5.
分享到:
评论

相关推荐

    java毕业设计&课设-博客系统项目(视频+源码+资料).doc

    - Java EE(Servlet、JSP) - Spring框架 - MyBatis持久层框架 - MySQL数据库 - Maven项目管理工具 - **前端技术**: - HTML/CSS/JavaScript - Bootstrap前端框架 - JQuery库 - Ajax异步通信技术 2. **...

    Java 开发-----购物系统项目(文档+视频+源码).rar

    7. **JSP/Servlet**:在前端展示部分,可能会使用JSP(JavaServer Pages)和Servlet技术。JSP用于生成动态网页,Servlet则处理HTTP请求。 8. **JavaScript/jQuery**:在客户端,JavaScript和jQuery用于实现页面交互...

    0Java.Web开发(上):JSP.Servlet.Struts.Spring.Hibernate.Ajaxdianzijiaocheng

    Ajax通过XMLHttpRequest对象与服务器进行通信,结合JavaScript处理数据和更新DOM,实现页面的动态更新。 这个"0Java.Web开发"教程包含了上述技术的深入讲解,通过6个exe文件(01.exe到06.exe),很可能是视频或交互...

    基于jsp+ssh的汽车测评推荐新闻管理系统源码数据库.zip

    - JSP(JavaServer Pages)是Java Web开发中的重要组成部分,主要用于创建动态网页。它允许开发者将HTML代码和Java代码混合编写,从而实现页面动态生成。 - Java Servlet是服务器端的Java应用程序,用于处理HTTP...

    JSP开发技术大全 源码

    分别介绍了JSP基础、环境搭建和开发工具、Java语言基础、JSP语法、JSP内建对象、JavaBean技术、Servlet技术、JSP经典设计模式、数据库的安装与创建、数据库访问技术、SQL语句在JSP中的应用、高性能数据处理技术、...

    基于JSP的宠物管理系统

    对于初学者,理解DOM(文档对象模型)和AJAX(异步JavaScript和XML)技术,能有效提升用户体验,使用户在无需刷新整个页面的情况下获取更新信息。 在这个项目中,开题报告和论文将阐述系统的需求分析、设计思路、...

    计算机毕业设计-在线音乐网站-Java Web项目源码.zip

    - **Servlet与JSP**:作为Java Web开发的基础,Servlet负责处理HTTP请求,而JSP则用于生成动态网页内容。在这个项目中,Servlet通常用于接收用户请求,处理业务逻辑,然后通过JSP将结果返回给用户。 - **MVC模式**...

    Ajax Store

    **Ajax Store**是一个基于Web的项目,利用Ajax技术实现了动态数据加载和页面无刷新更新,提高了用户交互体验。该项目的核心是使用JavaScript与服务器进行异步通信,减少对整个页面的刷新,提高应用性能。博客链接...

    零基础学JAVAWEB源码

    《零基础学JAVAWEB源码》是针对初学者设计的一套教学资源,它包含了JAVAWEB开发中的核心概念和技术。通过这份源码,你可以深入理解如何使用Java语言进行Web应用程序的开发,了解各个章节的核心知识点。下面将详细...

    JSP基于SSM汽车出租管理系统设计源码案例设计.zip

    **JSP基于SSM汽车出租管理系统设计源码案例解析** 本案例主要介绍了一款使用Java技术栈,基于SSM(Spring、SpringMVC、MyBatis)框架开发的汽车出租管理系统。SSM框架是Java Web开发中常用的一种组合,它能够帮助...

    基于jsp的酒店管理系统源码数据库.zip

    【基于jsp的酒店管理系统源码数据库】是一个典型的Java Web项目,用于实现酒店日常运营的自动化管理。这个系统采用Java语言进行后端开发,JavaScript进行前端交互,而JSP(JavaServer Pages)作为视图层技术,结合...

    基于SSM框架实现简单的登录注册功能【数据库+源码】

    SSM框架,全称Spring、SpringMVC和MyBatis,是Java开发中常用的一种集成框架,用于构建高效、灵活的Web应用。本项目旨在帮助初学者通过实践掌握基于SSM实现简单登录注册功能的基本步骤和技巧。 首先,`Spring`作为...

    基于java的-148-php停车场管理系统-源码.zip

    - **Servlet与JSP**:Java后端处理用户请求,通常通过Servlet来实现,而JSP用于生成动态网页内容。两者结合,可以构建MVC(模型-视图-控制器)架构。 - **JDBC**:Java数据库连接,用于与数据库进行交互,包括连接...

    javaWeb项目之物资管理系统项目源码.zip

    【物资管理系统项目源码解析】 本项目是一个基于JavaWeb技术的物资管理系统,旨在提供一套完整的物资采购、存储、分配及追踪的解决方案。该项目的核心目标是提高企业内部物资管理的效率和准确性,降低运营成本,...

    Java项目实战-物资管理系统(附源码,部署说明).zip

    - **JSP/Servlet**:后端处理请求并返回数据,JSP用于展示部分动态内容。 4. **界面设计** - **Bootstrap**:快速构建响应式布局,确保系统在不同设备上的良好显示效果。 - **jQuery**:简化DOM操作,提高前端...

    java毕业设计&课设-JAVA企业级开发技术培训(视频+源码+资料).zip

    12. **Servlet与JSP**:理解Web服务器如何处理请求和响应,学习编写Servlet和使用JSP进行动态页面渲染。 13. **JavaScript与jQuery**:在前端开发部分,会涉及到JavaScript的基本语法和DOM操作,以及jQuery库的使用...

    大学新生报到管理系统源码&java毕业设计(完整前后端+数据库+说明文档).zip

    - **JSP/Servlet**:Java服务器页面和Servlet用于动态生成HTML,处理HTTP请求。 - **Bootstrap**:前端框架,提供响应式布局和组件,使得界面在不同设备上具有良好的用户体验。 - **jQuery**:JavaScript库,简化...

    毕业设计 Java web项目源码整合开发ssm-JAVAWEB校园订餐系统项目源码.rar

    - jQuery:简化JavaScript操作的库,处理DOM操作和Ajax请求。 5. **用户认证与授权**: - 可能使用Spring Security进行权限控制,实现登录验证、角色分配和访问权限控制。 6. **支付集成**: - 如果包含在线...

    javaWeb物资管理系统项目源码.zip

    【JavaWeb物资管理系统项目源码】是一个典型的JavaWeb应用程序,用于管理和跟踪组织内部的物资流动。这个项目的核心目标是提供一个高效、用户友好的界面,以便于库存控制、采购、领用、退库等操作。下面我们将深入...

    课设毕设基于SSM的课程思政元素收集遴选系统 LW+PPT+源码可运行.zip

    - **jQuery**:一个流行的JavaScript库,简化DOM操作和AJAX请求。 - **Bootstrap**:快速开发响应式网页的前端框架,提供预设的样式和组件。 6. **版本控制**: - **Git**:可能在项目开发过程中用于版本管理和...

Global site tag (gtag.js) - Google Analytics