• 投票系统开发总结struts2,jfreechart,cookie应用,以及前端技术


    struts2配置web.xml+struts.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <filter>                                <!--定义核心Filter FilterDispatcher -->
            <filter-name>struts2</filter-name>    <!-- 定义核心Filter的名称 -->
            <filter-class>                        <!--定义核心Filter的实现类 -->
                org.apache.struts2.dispatcher.FilterDispatcher
            </filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name><!--核心Filter的名称 -->
            <url-pattern>/*</url-pattern><!--使用该核心Filter过滤所有的Web请求 -->
        </filter-mapping>
    </web-app>

    struts.xml里配置action:

    <?xml version="1.0" encoding="UTF-8" ?><!-- XML声明 -->
    <!DOCTYPE struts PUBLIC
     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
     "http://struts.apache.org/dtds/struts-2.1.dtd"><!-- 指定Struts 2配置文件的DTD信息 -->
    <struts><!-- 根节点 -->
        <constant name="struts.i18n.encoding" value="gb2312"></constant>
        <package name="struts2" extends="jfreechart-default">
             <action name="addVote" class="com.sanqing.action.AddVoteAction">
                 <result name="success">/admin/addVote.jsp</result>
             </action>
             <action name="showVote" class="com.sanqing.action.ShowVoteAction">
                 <result name="success">/admin/showVote.jsp</result>
             </action>
             <action name="deleteVote" class="com.sanqing.action.DeleteVoteAction">
                 <result name="success" type="chain">showVote</result>
             </action>
             <action name="showVoteByChannel" class="com.sanqing.action.ShowVoteByChannelAction">
                 <result name="success">index.jsp</result>
                 <result name="input">index.jsp</result>
             </action>
             <action name="voteResult" class="com.sanqing.action.VoteResultAction">
                 <result name="success" type="chart">
                     <param name="width">400</param>
                     <param name="height">300</param>
                 </result>
             </action>
             <action name="doVote" class="com.sanqing.action.DoVoteAction">
                 <result name="success" type="chain">voteResult</result>
                 <result name="input" type="chain">showVoteByChannel</result>
             </action>
         </package>    
    </struts>

     AddVoteAction.java:

    package com.sanqing.action;
    
    import java.util.UUID;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.sanqing.bean.Vote;
    import com.sanqing.bean.VoteOption;
    import com.sanqing.dao.VoteDAO;
    import com.sanqing.dao.VoteOptionDAO;
    import com.sanqing.daoFactory.VoteDAOFactory;
    import com.sanqing.daoFactory.VoteOptionDAOFactory;
    
    public class AddVoteAction extends ActionSupport {
        private int channel;        // 封装channel参数
        private String voteName;    // 封装voteName参数
        private String[] voteOption;// 封装voteOption参数
    
        public int getChannel() {
            return channel;
        }
    
        public void setChannel(int channel) {
            this.channel = channel;
        }
    
        public String getVoteName() {
            return voteName;
        }
    
        public void setVoteName(String voteName) {
            this.voteName = voteName;
        }
    
        public String[] getVoteOption() {
            return voteOption;
        }
    
        public void setVoteOption(String[] voteOption) {
            this.voteOption = voteOption;
        }
    
        public String execute() throws Exception {
            VoteDAO voteDAO = VoteDAOFactory.getVoteDAOInstance();//获得VoteDAO实例
            VoteOptionDAO voteOptionDAO = 
                VoteOptionDAOFactory.getVoteOptionDAOInstance();//获得voteOption实例
            //首先保存投票,然后再保存投票选项
            Vote vote = new Vote();
            vote.setChannelID(channel);
            vote.setVoteName(voteName);
            voteDAO.addVote(vote);
            //查询投票ID
            int voteID = voteDAO.findVoteByName(voteName).getVoteID();
            //保存投票选项
            for(String voteOptionName : voteOption) {
                VoteOption vp = new VoteOption();
                vp.setVoteID(voteID);
                vp.setVoteOptionName(voteOptionName);
                voteOptionDAO.addVoteOption(vp);
            }
            return this.SUCCESS;
        }
    
    }

     struts2下面JfreeChart,参考:http://www.cnblogs.com/rixiang/p/5249560.html

    struts.xml下配置action:

       <action name="voteResult" class="com.sanqing.action.VoteResultAction">
        <result name="success" type="chart">
         <param name="width">400</param>
         <param name="height">300</param>
        </result>
       </action>

    action:

    package com.sanqing.action;
    
    import java.util.List;
    
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.category.DefaultCategoryDataset;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.sanqing.bean.Vote;
    import com.sanqing.bean.VoteOption;
    import com.sanqing.dao.VoteDAO;
    import com.sanqing.dao.VoteOptionDAO;
    import com.sanqing.daoFactory.VoteDAOFactory;
    import com.sanqing.daoFactory.VoteOptionDAOFactory;
    
    public class VoteResultAction extends ActionSupport {
        private JFreeChart chart;
        private int voteID;//投票ID
        
        public int getVoteID() {
            return voteID;
        }
    
        public void setVoteID(int voteID) {
            this.voteID = voteID;
        }
    
        public JFreeChart getChart() {
            VoteDAO voteDAO = VoteDAOFactory.getVoteDAOInstance();//获得VoteDAO实例
            VoteOptionDAO voteOptionDAO = 
                VoteOptionDAOFactory.getVoteOptionDAOInstance();//获得voteOption实例
            //根据投票ID得到的投票
            Vote vote = voteDAO.findVoteById(voteID);
            String voteName = vote.getVoteName();    //得到投票名称
            
            //根据投票ID得到所有的投票选项
            List<VoteOption> voteOptions = voteOptionDAO.findVoteOptionByVoteID(voteID);
            
            DefaultCategoryDataset dcd = new DefaultCategoryDataset();//数据源
            
            //设置数据
            for(VoteOption voteOption : voteOptions) {
                dcd.setValue(voteOption.getTicketNum(),"",voteOption.getVoteOptionName());
            }
            //使用工厂类创建柱状图
            JFreeChart chart = ChartFactory.createBarChart3D(
                    voteName,
                    "投票选项",
                    "投票数", 
                    dcd,
                    PlotOrientation.VERTICAL ,
                    false, 
                    true,
                    false);
            
            return chart;
        }
    
        public void setChart(JFreeChart chart) {
            this.chart = chart;
        }
        
        public String execute() throws Exception {
            return SUCCESS;
        }
    }

     在项目中,如何防止用户一天之内重复投票呢?

    有两种方法,一种是,数据库里保存投票记录,一种是使用cookie。

    package com.sanqing.action;
    
    import javax.servlet.http.Cookie;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.sanqing.bean.VoteOption;
    import com.sanqing.dao.VoteOptionDAO;
    import com.sanqing.daoFactory.VoteOptionDAOFactory;
    
    public class DoVoteAction extends ActionSupport{
        private int voteOptionID;
        private String otherOption;
        private int voteID;
        private int channelID;
    
        public int getChannelID() {
            return channelID;
        }
        public void setChannelID(int channelID) {
            this.channelID = channelID;
        }
        public int getVoteID() {
            return voteID;
        }
    
        public void setVoteID(int voteID) {
            this.voteID = voteID;
        }
    
        public int getVoteOptionID() {
            return voteOptionID;
        }
    
        public void setVoteOptionID(int voteOptionID) {
            this.voteOptionID = voteOptionID;
        }
    
        public String getOtherOption() {
            return otherOption;
        }
    
        public void setOtherOption(String otherOption) {
            this.otherOption = otherOption;
        }
    
        public String execute() throws Exception {
            VoteOptionDAO voteOptionDAO = VoteOptionDAOFactory
            .getVoteOptionDAOInstance();
            //首先判断用户是否能进行投票
            Cookie cookies[]= ServletActionContext.getRequest().getCookies();//取出cookies
            
            for(Cookie cookie : cookies) {//遍历cookies
                
                if(cookie.getValue().equals(Integer.toString(voteID))) {//如果用户已经投过票
                    this.addActionError("您今天已经投过票了,请明天再来!");
                    return this.INPUT;
                }
            }
            //判断是否选择其他选项
            if(voteOptionID == 0) {
                //添加该选项
                VoteOption voteOption = new VoteOption();
                voteOption.setVoteID(voteID);
                voteOption.setVoteOptionName(otherOption);
                voteOption.setTicketNum(1);
                voteOptionDAO.addVoteOption(voteOption);
            }else {
                //取出以前的投票选项
                VoteOption voteOption = voteOptionDAO.findVoteOptionById(voteOptionID);
                int ticketNum = voteOption.getTicketNum();
                //更新选项的投票数
                voteOption.setTicketNum(ticketNum + 1);
                voteOptionDAO.updateVoteOption(voteOption);
                //更新完成后,添加cookie,防止重复投票
                Cookie cookie = new Cookie("hasVote" + voteID,Integer.toString(voteID));
                ServletActionContext.getResponse().addCookie(cookie);
            }
            return this.SUCCESS;
        }
        
    }
  • 相关阅读:
    WPF MVVM模式开发实现简明教程 1 开篇简介
    ArcGIS Runtime WPF(.net C#)开发简明教程 1 -初识 & 第一个项目
    WPF MVVM模式开发简明实现教程 8 完结 附全部代码
    WPF MVVM模式开发简明实现教程 7 DevExpress MVVM
    WPF MVVM模式开发简明实现教程 6 其他绑定
    WPF MVVM模式开发简明实现教程 5 使用MultiValueConverter进行多参数事件绑定
    WPF MVVM模式开发实现简明教程 4 ViewModelBase
    WPF MVVM模式开发实现简明教程 3-1 BaseCommand
    WPF MVVM模式开发简明实现教程 3 事件绑定
    WPF MVVM模式开发实现简明教程 2 初识 INotifyPropertyChanged
  • 原文地址:https://www.cnblogs.com/rixiang/p/5249492.html
Copyright © 2020-2023  润新知