一、建立xml的数据结构,文件名为:vote.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<votes voteTotalCount="0">
<vote voteId="1" name="c语言 " voteCount="0" percentum="0" />
<vote voteId="2" name="c++" voteCount="0" percentum="0" />
<vote voteId="3" name="java" voteCount="0" percentum="0" />
<vote voteId="4" name="汇编语言" voteCount="0" percentum="0" />
</votes>
在你的web应用的根目录建立xml文件夹,将其拷贝到该目录下。
二、建立xml对应的bean
/**
* @author flustar
* @version 创建时间:Jul 11, 2007 5:17:53 PM
* 类说明
*/
……………………………………………………………………….
……………………………………………………………………….
public class VoteBean {
private String voteId;
private String name;
private String voteCount;
private String voteTotalCount;
private String percentum;
public VoteBean() {
}
public String getPercentum() {
return percentum;
}
public void setPercentum(String percentum) {
this.percentum = percentum;
}
public String getVoteId() {
return voteId;
}
public void setVoteId(String voteId) {
this.voteId = voteId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVoteCount() {
return voteCount;
}
public void setVoteCount(String voteCount) {
this.voteCount = voteCount;
}
}
三、建立处理具体逻辑的service
package com.flustar.service;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;
import com.flustar.web.beans.VoteBean;
import com.flustar.web.config.ContextConfig;
public class VoteService {
private Element root, vote;
private Document doc;
private Attribute voteTotalCount;
private VoteBean voteBean;
private List<VoteBean> voteBeanList;
private String path = ContextConfig.getContextPath()
+ "/xml/vote.xml";
public void buildDoc() throws Exception {
FileInputStream fi = null;
fi = new FileInputStream(path);
SAXBuilder sb = new SAXBuilder();
doc = sb.build(fi);
}
public void formatDoc() throws Exception {
Format format = Format.getCompactFormat();
format.setEncoding("UTF-8");// 设置xml文件的字符为UTF-8
format.setIndent(" ");// 设置xml文件缩进为4个空格
XMLOutputter xmlOut = new XMLOutputter(format);
xmlOut.output(doc, new FileOutputStream(path));
}
public String floatToPercentum(Double doubleNum) {
NumberFormat numberFormat = NumberFormat.getPercentInstance();
numberFormat.setMinimumFractionDigits(2);
// numberFormat.setMaximumIntegerDigits(2);
String str = numberFormat.format(doubleNum);
//System.out.println(str);
return str;
}
public void updateVoteCount(String voteId) throws Exception {
buildDoc();
root = doc.getRootElement();
vote = (Element) XPath.selectSingleNode(root, "//vote[@voteId='"
+ voteId + "']");
int voteCount = Integer.parseInt(vote.getAttributeValue("voteCount")) + 1;
//System.out.println(voteCount);
vote.setAttribute("voteCount", String.valueOf(voteCount));
int totalCount = Integer.parseInt(root
.getAttributeValue("voteTotalCount")) + 1;
voteTotalCount = new Attribute("voteTotalCount", String
.valueOf(totalCount));
root.setAttribute(voteTotalCount);
System.out.println(totalCount);
formatDoc();
updateAllVoteCount();//更新所有的百分比
}
public void updateAllVoteCount()throws Exception{
buildDoc();
root=doc.getRootElement();
int totalCount = Integer.parseInt(root
.getAttributeValue("voteTotalCount"));
List voteList=XPath.selectNodes(root,"/votes/vote");
for(int i=0;i<voteList.size();i++){
vote=(Element)voteList.get(i);
int voteCount = Integer.parseInt(vote.getAttributeValue("voteCount"));
System.out.println(voteCount);
vote.setAttribute("voteCount", String.valueOf(voteCount));
vote.setAttribute("percentum", floatToPercentum(1.0 * voteCount
/ totalCount));
}
formatDoc();
}
public List getAllVote() throws Exception {
buildDoc();
voteBeanList = new ArrayList();
root = doc.getRootElement();
String totalCount = root.getAttributeValue("voteTotalCount");
List voteList = root.getChildren();
Iterator i = voteList.iterator();
while (i.hasNext()) {
voteBean = new VoteBean();
voteBean.setVoteTotalCount(totalCount);
vote = (Element) i.next();
String name = vote.getAttributeValue("name");
String voteCount = vote.getAttributeValue("voteCount");
String percentum = vote.getAttributeValue("percentum");
voteBean.setName(name);
voteBean.setVoteCount(voteCount);
voteBean.setPercentum(percentum);
voteBeanList.add(voteBean);
}
return voteBeanList;
}
}
public String getVoteTotalCount() {
return voteTotalCount;
}
public void setVoteTotalCount(String voteTotalCount) {
this.voteTotalCount = voteTotalCount;
}
}
四、获取上下文路径的listener
package com.flustar.web.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.flustar.web.config.ContextConfig;
public class ConfigLoadContextListener implements ServletContextListener{
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
public void contextInitialized(ServletContextEvent contextEvent) {
// TODO Auto-generated method stub
String contextPath = contextEvent.getServletContext().getRealPath("/");
ContextConfig.setContextPath(contextPath);
}
}
………………………………………………………..
……………………………………………………………
public class ContextConfig {
private static String contextPath;
public static String getContextPath() {
return contextPath;
}
public static void setContextPath(String contextPath) {
ContextConfig.contextPath = contextPath;
}
……………………………………………………………………
………………………………………………………………..
}
五、在applicationContext-service.xml中注册VoteService
<bean name="voteService" class="com.flustar.service.imp.VoteService"/>
六、注册xml,在你的web应用的WEB-INFO目录下建立applicationContext-dwr.xml文件,内容为:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="spring" javascript="VoteService" >
<param name="beanName" value="voteService"></param>
<include method="updateVoteCount"/>
<include method="getAllVote"/>
</create>
<convert converter="bean" match="com.flustar.web.beans.VoteBean" />
</allow>
</dwr>
七、修改web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
…………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………..
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
…………………………………..
/WEB-INF/classes/applicationContext-service.xml
</param-value>
</context-param>
……………………………………………………………………………………………………………………………………………. <listener-class>com.flustar.web.listener.ConfigLoadContextListener</listener-class>
…………………………………………………………………………………………………………………………………………….
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
…………………………………………………………………………………………………………………………………………….
</web-app>
八、jsp页面
1)
<%@ page contentType="text/html; charset=gbk" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<title>投票系统</title>
<script type='text/javascript' src='dwr/engine.js'> </script>
<script type='text/javascript' src='dwr/util.js'> </script>
<script type='text/javascript' src='dwr/interface/VoteService.js'> </script>
<script type='text/javascript'>
function vote(){
var obj=document.getElementsByName('radio');
if (obj!=null){
var j=0;
for (var i=0;i<obj.length;i++){
if (obj[i].checked)
{
VoteService.updateVoteCount(obj[i].value);
alert("投票成功!");
obj[i].checked=false;
break;
}
}
j=j+1;
}
if(j==obj.length){
alert("请选中其中的一项,再投票!");
}
}
}
function showwin(){
window.open('voteresult.htm','voteresult','height=400, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
}
}
</script>
</head>
<body>
<div >
<h1 >
你使用最多的一门语言是?
</h1>
</div>
<div>
<div>
<span> <h1><input type="radio" name="radio" id="radio" value="1" />
C语言</h1>
</span>
<span> <h1 ><input type="radio" name="radio" id="radio" value="2" />c++ </h1> </span>
<span ><h1 ><input type="radio" name="radio" id="radio" value="3" />java </h1> </span>
<span><h1 ><input type="radio" name="radio" id="radio" value="4"/>汇编语言</h1> </span>
</div>
</div>
<div id="toupiao"><input class="btn" type="button" value="投票" onClick="vote()" /><input class="btn" type="button" value="查看" onClick="showwin()"/></div>
</body>
</html>
2)
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>投票结果</title>
<script type='text/javascript' src='dwr/engine.js'> </script>
<script type='text/javascript' src='dwr/util.js'> </script>
<script type='text/javascript' src='dwr/interface/VoteService.js'> </script>
<script type='text/javascript' >
function showresult(){
VoteService.getAllVote(function(data){
document.getElementById("totalCount").innerHTML=data[0].voteTotalCount;
for(var i=0;i<data.length;i++){
var voteBean=data[i];
document.getElementById("xuanshou"+i).innerHTML=voteBean.name;
document.getElementById("baifenbi"+i).innerHTML=voteBean.percentum;
document.getElementById("piaoshu"+i).innerHTML=voteBean.voteCount;
document.getElementById("img"+i).width=voteBean.voteCount/data[0].voteTotalCount*310;
}
});
}
</script>
</head>
<body onLoad="showresult()">
<div id="voteRs">
<table border="0" cellpadding="0" cellspacing="0">
<CAPTION valign="top" class="subject">
投票结果
</CAPTION>
<tbody>
<tr >
<th>语言</th>
<th>百分比</th>
<th>票数</th>
</tr>
<tr>
<td><span id="xuanshou0"></span></td>
<td><span id="baifenbi0"></span><img id="img0" src='images/voteprogress.gif' width=0 height=10></td>
<td><span id="piaoshu0"></span></td>
</tr>
<tr>
<td><span id="xuanshou1"></span></td>
<td><span id="baifenbi1"></span><img id="img1" src='images/voteprogress.gif' width=0 height=10></td>
<td><span id="piaoshu1"></span></td>
</tr>
<tr>
<td><span id="xuanshou2"></span></td>
<td><span id="baifenbi2"></span><img id="img2" src='images/voteprogress.gif' width=0 height=10></td>
<td><span id="piaoshu2"></span></td>
</tr>
<tr>
<td><span id="xuanshou3"></span></td>
<td><span id="baifenbi3"></span><img id="img3" src='images/voteprogress.gif' width=0 height=10></td>
<td><span id="piaoshu3"></span></td>
</tr>
</tbody>
</table>
共<span id="totalCount"></span>条投票<br/>
[<span onClick="javascript:window.close();">关闭窗口</span>]
</div>
</body>
</html>
分享到:
相关推荐
在"struts2+hibernate+spring+dwr整合"的项目中,这四个框架的协同工作通常如下: 1. Struts2 负责处理HTTP请求,解析用户的输入,根据配置决定执行哪个Action,Action完成后通过Result返回响应。 2. Spring 作为...
本项目是Spring与DWR的整合实例,涵盖了三种整合方式,其中最彻底的方式是通过注解(Annotation)来实现,无需手动配置DWRSERVLET和dwr.xml文件,这使得配置更为简洁,同时也更符合现代开发的实践。 1. **Spring与...
Struts2、Spring、Hibernate和DWR是Java Web开发中常用的四大框架,它们各自负责不同的功能,协同工作能构建出高效、灵活的企业级应用。在这个小实例中,开发者结合这四个框架来展示了一个完整的后端架构。 Struts2...
Maven3+spring3+mybatis3+dwr3+mysql5.5,请用Chrome浏览器,兼容性还未调试。 自己写的一个小系统,包含一个模块:产品模块。 基本这个模块包括的内容就比较多了,CRUD,无刷新查询,图片上传等, 其实也是整个...
Spring+DWR+ibatis+jQuery+easyUI的框架例子. 完全开放源代码,免费学习与使用。 可以完成基本的后台主界面,报表查询,数据查询,增加,修改等功能。 如果你要做一些报表,后台功能利用这个a框架就可以很方便实现。
struts1+spring+hibernate+dwr 项目 满意度调查struts1+spring+hibernate+dwr 项目 满意度调查struts1+spring+hibernate+dwr 项目 满意度调查struts1+spring+hibernate+dwr 项目 满意度调查
公文管理、申请审批、公告管理、会议管理、权限管理、个人办公、客户管理、人事等等。项目技术:Struts1.2 + Hibernate3.0 + Spring2 +DWR。java毕业设计 jsp毕业设计 ssh毕业设计
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个...
可能的文件包括Spring配置文件(如`applicationContext.xml`)、Hibernate配置文件(如`hibernate.cfg.xml`)、DWR配置文件(如`dwr.xml`)、实体类、DAO层、Service层以及前端的JavaScript文件。通过这些文件,...
【Spring + DWR 无刷新聊天室】 Spring框架和Direct Web Remoting (DWR) 是构建Web应用程序的强大组合,尤其适用于实现动态、实时的交互功能,如无刷新聊天室。这个项目展示了如何利用这两个技术来创建一个无需刷新...
Struts2、Hibernate、Spring 和 DWR 是四个在 Java Web 开发中广泛应用的框架和技术,它们结合在一起可以构建高效、可维护的用户注册系统。以下是对这些技术的详细解释及其在用户注册中的应用: 1. **Struts2**:这...
1. 配置Web应用的web.xml文件,包括Struts2的前端控制器DispatcherServlet、Spring的ContextLoaderListener以及DWR的相关配置。 2. 在Spring的配置文件中定义Bean,包括DAO、Service和Action类,并进行必要的依赖...
DWR+Struts+spring+hibernate的订货系统,自己添加的dwr功能
ajax,spring,hibernate,dwr,实现二级联动
在本篇配置手册中,我们将介绍如何在Spring MVC的环境下配置DWR环境,这包括web.xml的配置、创建dwr.xml文件、添加DWR的jar包、形成推送函数类以及在前台页面引入对应的JavaScript文件。 首先,web.xml的配置是整个...
**DWR (Direct Web Remoting)** 是一种JavaScript到Java的远程调用技术,允许在浏览器端直接调用服务器端的Java方法,从而实现Ajax无刷新更新页面的效果。在用户注册和多级下拉联动功能中,DWR起到了关键作用,它...
在这个"验证码 spring + dwr"的项目中,我们将探讨如何将这三者结合,构建一个高效且安全的验证码验证系统。 首先,Spring框架在这里的角色主要是负责服务层的构建和管理,以及与前端的交互。我们可以创建一个...
用户注册和登录是每个系统的必须存在的一部分,基于Dwr+Struts2+Spring+Hibernate写了一个用户登录注册系统。 其中用Dwr去进行用户注册的用户是否存在的验证。 全部业务控制交由Spring去进行处理。事务处理也...
为了运行或理解这个例子程序,需要解压这个文件并查看其内部结构,包括但不限于Java源码、配置文件(如Spring的`applicationContext.xml`、Hibernate的`hibernate.cfg.xml`和DWR的`dwr.xml`)、HTML/JS前端文件...