系统架构

  • 应用服务器:
  • Servlet容器:Tomcat
  • 数据库服务器:MySQL

第三方工具(插件)应用

  • 图表工具:JFreeChart

学知识点

  • 使用jsp+struts2+jdbc+JFreeChart进行开发
  • 学习MySQL的基本使用
  • 学会简单的使用JFreeChart画柱状图
  • 学会使用Cookie防止多用户多次投票


页面及一些图片资料就没有做了,是从网上下载的资料直接使用的。

事前准备:一些用到的工具类:Page(分页)和JDBC连接工具。

开始从struts2的mvc配置开始:

首先struts2使用的是filter做为入口去启动整个框架的,所以要在web.xml中做如下配置:

<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>

然后编写实体类:Channel,Vote,Vote,VoteOption,VoteResult.以及对增删改查的各种接口和实现类,进行代码编写。目前处于学习阶段,所以并没有自己设计数据库以及dao操作,都是根据网上源码的接口去一一对应实现其接口提供的方法,一对应action

最后进行action的编写:

struts2的mvc会根据struts.xml的配置文件进行mapping对应,根据配置文件配置的url路径去寻找对应的action,如下

<action name="addVote" class="com.dian.action.AddVoteAction">
   <result name="success">/admin/addVote.jsp</result>
</action>


配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,如果其他包要继承该包,必须通过该属性进行引用,包的namespace属性用于定义该包的命名空间,命名空间作用为访问该包下的action路径的一部分,见示例.namespace属性可以不配置,如果不指定该属性,默认的命名空间为””



 



通常每个包都应该继承struts- default 包,因为struts2很多核心功能都是拦截来实现的,如,从请求中把请求参数封闭到action,文件上传和数据验证等都是通过拦截器实现的,struts- default 定义了这些拦截器和Result类型,可以这么说,当包继承了struts- default 才能使用struts2提供的核心功能,struts- default 包是在struts2-core- 2 .xx.jar文件中的struts-defalut.xml中定义,struts- default .xml也是struts2默认配置文件,struts2每次都会自动加载struts- default .xml文件.



 



Action 元素method属性,默认值为method=”execute”,也就是当action接收到请求后,交给哪个方法去处理,默认的是交给execute方法去处理,当然,也可以交给其他方法,{ 1 }代表通配符,比如你上面的{ 1 }index,我访问 aaidex,bbindex都能够跳到此控制机器定义的这个方法



 



<result name= "success" >/WEB-INF/JspPage/chapter1/HelloWorld.jsp</result> 



result元素主要定义视图的跳转和返回的行为及类型.
以上就是整个项目的流程。

从中学习到的一些小知识:
1.使用Cookie防止多用户多次投票
//在进行投票前检查



 for (Cookie cookie : cookies) {// 遍历cookies

            if (cookie.getValue().equals(Integer.toString(voteID))) {// 如果用户已经投过票
                this.addActionError("您今天已经投过票了,请明天再来!");
                return INPUT;
            }
        }


//投票完成后添加 Cookie
// 更新完成后,添加cookie,防止重复投票
            Cookie cookie = new Cookie("hasVote" + voteID, Integer.toString(voteID));
            ServletActionContext.getResponse().addCookie(cookie);


2.JFreeChart画柱状图

根据一些JFReeChart手册,和查询出来的条件,搭建出合适的模型。

 chart = ChartFactory.createBarChart3D(
                voteName,
                "投票选项",
                "投票数",
                dcd,
                PlotOrientation.VERTICAL ,
                false,
                true,
                false);

3.一些工具类的使用和搭建,Page,DBConnection。


代码只是粗略的写完,还没有自测,明天再传