基于Struts2和iBATIS的JSP开发框架设计与实现

合集下载

基于STRUTS2.0+SPRING+IBATIS技术的WEB开发

基于STRUTS2.0+SPRING+IBATIS技术的WEB开发

基于STRUTS2.0+SPRING+IBATIS技术的WEB开发摘要:随着b/s多层应用已成为web开发的主流,本文首先介绍了struts2.0、spring、ibatis这三种框架,随后介绍了如何使用这三种框架组合来实现web开发。

关键词:b/s struts2.0 spring ibatis随着中国软件的发展,不同于c/s软件,用户不需要在每台电脑上安装客户端软件,b/s软件只需要在联网电脑的浏览器中输入网址就可以访问远程的信息,因此b/s软件越来越受到用户的欢迎。

b/s 软件的开发有很多种方式,有不同的语言,本文主要介绍在struts2.0、spring、ibatis三种框架组合的基础上实现高校宿舍智能化、信息化管理的研究与实现。

1、struts2.0struts2的体系使用了webwork的设计核心,并大量使用拦截器来处理用户请求,从而允许用户的业务逻辑控制器与servlet api分离。

从数据流图上来看,struts2与webwork相差不大,struts2同样使用拦截器作为处理,以用户的业务逻辑控制器为目标,创建一个控制器代理。

控制器代理负责处理用户请求,处理用户请求时回调业务控制器的execute方法,该方法的返回值将决定了struts 2将怎样的视图资源呈现给用户。

2、springspring是目前java ee 领域中比较流行的一个开源框架,它的目的是为了解决企业应用程序开发的复杂性。

spring框架的分层架构允许在不同的层次上选择各种组件,所以spring可以和hibernate、struts以及jsf等框架结合起来。

spring框架是一个分层架构,由7个定义良好的模块组成。

spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式。

组成spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。

3、ibatisibatis是以sql为中心的持久化层框架。

安全员月度总结 安全员工作月报(精彩6篇)

安全员月度总结 安全员工作月报(精彩6篇)

安全员月度总结安全员工作月报(精彩6篇)指报关方面的。

在电子口岸系统用电子申报的方式报关出口,然后在次月集中向海关报关。

这里的6篇安全员月度总结安全员工作月报是作者小编为您分享的安全月报的相关范文,欢迎查看参考。

安全月报篇一21世纪将是一个信息时代,会计作为社会经济生活不可缺少的一部分,必将更多地运用信息技术。

在今年的短学期,学校有组织、有计划地为我们安排了用友erp-u8财务软件的实训。

在当前经济迅速发展及企业业务的多元化与复杂化加剧的情况下,企业实际需要对于会计人员做账水平的要求也日益提高。

传统的手工做账既费时间又费人力而且容易出错,已不能满足企业需要。

因此在信息技术的空前发展的今天,传统的会计手工操作已逐步被计算机取代。

计算机操作即会计电算化,它主要是应用电子计算机代替人工记账、算账、报账,以及代替一部分由我们人工完成的对会计信息的处理、分析和判断的过程。

是我们财务管理专业学习和提高运用计算机处理会计流程能力的重要组成部分。

通过本实践课程的学习,模拟真实的经济业务,使我们真正具备会计岗位所应具备的分析、判断和操作能力,锻炼我们运用财务软件对企业经济业务进行会计处理的技能。

以用友财务软件erp-u8为实习教材,精心创设仿真的会计电算化工作环境,模拟真实的企业经济业务,使理论与实践相结合。

从财务软件的基础概念开始,循序渐进地介绍了用友财务软件的系统管理、总账管理、ufo 报表管理、薪资管理、固定资产管理这五大系统的基本理论知识,进行建立账套、基础设置、日常经济业务处理、期末账务处理、会计报表的编制等全过程的具体实践操作训练。

(一)用友财务软件系统管理财务软件系统管理这部分,主要学习了系统管理的相关概念,功能及基础设置。

系统管理是用友erp-u8管理系统中一个非常特殊的组成部分。

其主要功能是对该软件管理系统的各个产品进行统一的操作管理和数据的维护,具体包括账套管理、年度账管理、操作员及权限的集中管理、系统数据及运行安全的管理等方面。

ssi学习手记

ssi学习手记

Spring2.5、Struts2、Ibatis开发框架搭建(一)ssi, ibatis网站:http://114.80.201.3/tag.php?name=ssiCsdn网站:/一、框架下载1.1 Struts2框架Struts2框架发展于WebWork,现在捐献给了Apache开源组织,最新版本的Struts2框架可以从位于Apache官方网站的Struts2项目中获取,Struts2框架的项目主页地址为:/,下载页面地址为: /download.cgi,打开下载地址以后自己选择最新发布的版本即可,新手的话下载Full Distribution的版本,例如/download.cgi#struts2014中的struts-2.0.14-full.zip。

为了让struts2能够支持json格式的返回数据,还需要下载json插件,下载地址为/p/jsonplugin/,下载文件为jsonplugin-0.31.jar 文件。

1.2 Spring2.5 框架Spring框架的官方网站地址:/,下载页面为:/download,打开下载页面以后选择Get the latest Spring releases here中的发行包去下载使用,注意Spring官方网站中包含的框架有很多,包括流程处理、安全、Web服务等很多种框架,我们需要下载的框架是Spring FrameWork 的某个版本,不是其它的那些框架。

1.3 Ibatis框架iBATIS框架的主页是/,在打开的网站界面中选择选择左边的Get software中的for java连接,在打开的界面中选择下载连接。

1.4 其它(数据库缓冲池框架等)如果需要使用Ms Sql Server数据库的话,还需要在项目中加入jtds 的JDBC驱动程序,下载地址/,找到download连接,按提示信息下载即可。

下载DBCP数据库缓冲池框架,下载地址为/dbcp/,下载最新版本即可,因为DBCP框架是apache开源软件组织的众多框架中的一部分,要让DBCP工作的话,还需要common-pool框架,自行到apache官方网站下载二、向项目中加入Spring Struts iBATIS框架2.1 准备工作将下载的三个框架分别解压缩。

基于JSP(java)购物网站的设计和实现

基于JSP(java)购物网站的设计和实现

基于JSP购物网站的设计和实现指导老师:班级:组员:基于JSP的网上购物系统的设计与实现——小萌购物网摘要在当今这种信息化、网络化时代,网上购物作为一种全新的理念影响着人们的生活,网上购物系统的诞生就是由此而来。

本次设计的内容是设计并且实现一个基于JSP 技术的网上购物系统,主要使用了Struts+Spring+Hibernate等多种框架的结合使用,用MyEclipse作为开发工具,以MySQL作为数据库,Tomcat作为应用服务器。

应用Macromedia公司的Dreamweaver作为界面美化工具,使用Java语言开发,页面采取JSP动态页面开发技术。

该系统界面简单、操作方便,容易维护。

系统分前台部分和后台部分,前台部分由用户使用,主要包括用户注册,购物车管理,个人资料管理等功能。

后台部分由管理员使用,主要包括商品管理,处理订单,用户信息管理,新闻信息管理等功能。

建立后的网站系统是一个动态、交互式、具有商品提供、系统管理等功能的电子商务网站.关键字:网上购物饰品JSP MySQL目录1 引言 (4)1.1 网上购物的发展与现状 (4)1.2 系统实现的目标 (5)1.3 系统的开发意义 (5)2 可行性分析 (6)2.1 技术可行性 (6)2.2 经济可行性 (6)2.3 操作可行性 (7)2.4 硬件、软件可行性 (7)3 需求分析 (7)3.1 消费需求分析 (7)3。

2 效益需求分析 (8)3。

3 功能需求分析 (9)4 概要设计 (13)4.1 系统功能模块设计 (13)4.2 数据库设计 (16)5 详细设计 (18)5.1 系统功能实现的主要架构 (18)5。

2 系统各功能模块的实现 06. 系统测试 06。

1 系统测试的目的 06.2 系统测试的方法 06。

3 系统测试的环境 06.4 本系统测试 07总结 0参考文献 01.引言1。

1 网上购物的发展与现状随着网络、通信和信息技术的突破性进展,Internet在全球爆炸性增长并迅速普及。

管理个人信息系统的设计与实现

管理个人信息系统的设计与实现

JAVAEE期末综合设计题目:管理个人信息系统的设计与实现学院:信息工程与自动化学院专业:计算机应用技术目录摘要: (4)第一章绪论 (5)1.1选题背景、目的及意义 (5)1.2开发工具介绍 (5)1.3论文的组织结构 (5)1.4作者的工作 (6)第二章可行性分析与软件项目计划 (7)2.1经济可行性 (7)2.2技术可行性 (7)2.3操作可行性 (7)2.4软件项目计划 (7)2.4.1项目概述 (7)2.4.2项目组织 (7)2.4.3风险管理 (8)2.4.4进度安排 (8)第三章需求分析 (10)3.1用户需求 (10)3.1.1环境需求 (10)3.1.2功能需求 (10)3.1.3性能需求 (11)3.1.4系统的界面需求 (11)3.1.5安全性与可靠性 (11)3.1.6系统管理 (11)3.2系统用例图 (12)3.3数据流图 (12)第四章系统设计 (14)4.1系统设计任务 (14)4.2系统组织结构与功能模块 (14)4.2.1系统功能结构 (15)4.3 数据库设计 (15)4.3.1数据库简介 (15)4.3.2概念结构设计 (16)4.3.3逻辑结构设计 (16)第五章系统实现 (18)5.1登录界面实现 (18)5.2系统主界面实现 (19)5.3任务管理模块实现 (19)5.4笔记管理模块实现 (20)5.5相册管理模块实现 (21)5.6订阅管理模块实现 (22)5.7文档管理模块实现 (22)5.8账目管理模块实现 (23)5.9系统管理模块实现 (24)第六章系统测试 (25)6.1测试目的 (25)6.2测试内容 (25)6.3测试结果 (27)6.4测试分析 (27)附工程代码 (29)管理个人信息系统的设计与实现摘要:随着经济技术的不断发展,以及社会生活节奏的不断加快,人们每天需要处理的事务变的越来越繁重,人们也因此经常忘记一些重要的事情。

本文介绍的是一个个人信息系统管理系统的设计与实现。

基于Struts2的信息管理系统设计与实现论文.doc

基于Struts2的信息管理系统设计与实现论文.doc

【关键词】Struts2;信息系统;系统设计;系统实现0 引言21世纪是一个信息时代,谁拥有信息,谁就拥有优势。

想要提高信息管理水平,最大限度发挥信息资源优势,以获得最大经济效益目标,离不开对信息管理系统的应用。

信息管理系统是利用现代管理思想和方法,以电子计算机为载体,采用计算机软件和网络通讯技术,对各种信息进行收集、处理、存储、分析、管理的系统。

基于Struts2的信息管理系统结构研究,能够实现信息资源采编、交流、维护、发布、管理等功能的一体化,能够有效提高信息发布的时效性、准确性,更有利于信息资源管理和开发,目前已广泛应用到了各个领域,研究Struts2的信息管理系统设计与实现具有重要意义。

1 信息管理系统信息管理系统是随着信息技术、计算机技术、网络技术的普及发展起来的新型产物。

通过信息管理系统便能够对相关信息进行收集、加工、处理、传递、储存、共享、利用、交流、管理。

以当代处理信息方法为依据,附加进电子计算机技术,来进行进一步的信息分析。

信息管理系统的应用能够充分利用信息资源获得最大信息资源利用率。

该系统涉及经济学、管理学、计算机科学等很多学科,具有辅助决策功能。

信息管理系统作为一种新型的信息集成中心而存在,它不仅可以提供当前信息的分析与处理,还可以对未来一段时间内的信息进行合理性预测。

这样的系统可以作为企业信息的核心来工作,并在企业发展中起到非常重要的作用。

在信息化的时代,企业需要这种信息系统来为企业的运行指引方向,同时信息管理系统也可以在企业的竞争当中起到至关重要的积极作用。

目前在医疗、教育以及企业等方面,信息管理系统已经得到广泛应用。

不同类型的信息管理系统设计思路不同,系统结构不同,功能不同,特征不同,所以适用范围也不同。

目前市面上常见的信息管理系统绝大多数是从社会活动需要和将来发展战略角度出发进行设计,以提高系统的针对性和科学性。

如企业信息管理系统,往往针对企业实际情况而设计,无法应用于医院管理或校园管理当中。

基于web校园网的在线自测系统的设计与实现

基于web校园网的在线自测系统的设计与实现

基于web校园网的在线自测系统的设计与实现作者:王咏梅来源:《科技资讯》2012年第27期摘要:针对目前学生课后自测完成情况的种种不足,为了提高教学效果和减轻教师的工作负担,基于J2EE的web技术,采用struts+ibatis的B/S架构,结合课后自测的特点开发了一个在线自测系统。

主要功能包括试题管理、出题、自测、自动批改、成绩分析等。

在实际应用中,该系统较传统测试节省了大量的人力和时间,取得了满意的效果。

关键词:JAVA,Jquery,struts,ibatis,B/S中图分类号:TP311.52 文献标识码:A 文章编号:1672-3791(2012)09(c)-0011-01现阶段,学校的各种测试大都采用传统的测试方式。

在此方式下,组织一次测试至少要经过五个步骤,即人工出卷、学生自测、人工阅卷、成绩评估和试卷分析。

显然,随着考试类型的不断增加及考试要求的不断提高,教师的工作量将会越来越大,其工作将是一件十分烦琐和非常容易出错的事情,可以说传统的考试方式已经不能适应现代考试的需要。

随着计算机应用的迅猛发展,网络应用不断扩大,迫切要求利用信息化技术来实现在线考试系统,以减轻教师的工作负担及提高工作效率。

在线自测系统使用信息化手段来帮助教师完成一个考试的题目设计,考试实施,考卷批改到分数统计等方面的工作,使繁重的测试工作变得简单、快捷和准确;同时提供在线自测,可以使学生能更好地学习和掌握课程的内容,充分利用业余时间及时检测自己的学习效果,查漏补缺,提高学习效率。

1 系统技术框架系统采用基于J2EE技术的三层BS Web应用架构,使用先进的基于struts的MVC架构来进行开发,表现层采用基于Ajax技术的Jquery组件库实现,系统的数据访问操作通过数据集成层的DAO抽象接口访问数据库等数据资源,采用ORM产品iBatis实现。

系统使用数据库技术进行存储和管理,试题数据的存放和处理通过一定的安全性保障进行保密。

struts2+ibatis+spring整合开发

struts2+ibatis+spring整合开发

Struts2+ibatis+spring整合开发1.工程结构图2.配置文件web.xml<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4"xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd"> <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext.xml</param-value> </context-param><listener><listener-class>org.springframework.web.context.ContextLoaderList ener</listener-class></listener><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>如图:Struts.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><constant name="struts.objectFactory.spring.autoWire" value="type" /><constant name="struts.objectFactory" value="spring" /><include file="struts-default.xml"/><package name="struts2" extends="struts-default"><default-interceptor-ref name="paramsPrepareParamsStack" /> <!-- aciton的class为applicationContext.xml中的注册名 --><action name="login" class="LoginAction"><result name="success">/success.jsp</result><result name="input">/login.jsp</result></action><action name="save" class="LoginAction" method="save"><result name="success"type="redirect-action">show.action</result><result name="error">/error.jsp</result></action><action name="edit" class="LoginAction" method="edit"><result name="success">update.jsp</result></action><action name="update" class="LoginAction" method="update"> <result name="success"type="redirect-action">show.action</result><result name="error">/error.jsp</result></action><action name="delete" class="LoginAction" method="delete"> <result name="success"type="redirect-action">show.action</result><result name="error">/error.jsp</result></action><action name="show" class="LoginAction" method="findAllUser"> <result name="success">/list.jsp</result><result name="error">/error.jsp</result></action></package></struts>如图:Struts.properties#struts.url.http.port=8080struts.devMode=truestruts.configuration.xml.reload=truestruts.locale=zh_CNstruts.i18n.encoding=UTF-8struts.objectFactory=spring如图:sql-map-config.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapConfigPUBLIC "-////DTD SQL Map Config 2.0//EN""/dtd/sql-map-config-2.dtd"><sqlMapConfig><sqlMap resource="cn/hsw/model/user.xml"/></sqlMapConfig>如图:applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans default-autowire="byType"xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.0.xsd"> <bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://127.0.0.1:3306/debug" /><property name="username" value="root" /><property name="password" value="123456" /></bean><bean id="client"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource"><ref local="dataSource"/></property><property name="configLocation"><value>classpath:sql-map-config.xml</value></property></bean><!-- bean中的class为实现接口的类;property的name为类中引用的属性名称;ref 为spring注册的名称,如上面的client--><bean id="userDao"class="erDAO"><property name="client" ref="client" /></bean><bean id="userService"class="erService"><property name="userDAO" ref="userDao"></property> </bean><bean id="LoginAction" class="cn.hsw.action.Login"><property name="userService" ref="userService"></property> </bean></beans>如图:3.Login.javapackage cn.hsw.action;import java.util.List;import er;import cn.hsw.service.IUserService;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.opensymphony.xwork2.Preparable;public class Login extends ActionSupport implements ModelDriven<User>,Preparable {private IUserService userService=null;private String id;private int pageIndex=1;private String pageBar;private List<User> list;private User user;public void prepare()throws Exception{if(id==null||id.length()==0){user=new User();}else{user=getUserService().getUserById(Integer.parseInt(id));}}public String execute()throws Exception{if(getUserService().isLogin(user)){return SUCCESS;}return INPUT;}public String save()throws Exception{if(getUserService().insertUser(user)){return SUCCESS;}return ERROR;}public String edit(){return SUCCESS;}public String update()throws Exception{if(getUserService().updateUser(user)){return SUCCESS;}return ERROR;}public String delete()throws Exception{if(getUserService().deleteUser(Integer.parseInt(id))){return SUCCESS;}return ERROR;}public String findAllUser()throws Exception{try {list=getUserService().getAllUser();} catch (Exception e) {}return SUCCESS;}public String getId() {return id;}public void setId(String id) {this.id = id;}public int getPageIndex() {return pageIndex;}public void setPageIndex(int pageIndex) { this.pageIndex = pageIndex;}public String getPageBar() {return pageBar;}public void setPageBar(String pageBar) { this.pageBar = pageBar;}public List<User> getList() {return list;}public void setList(List<User> list) {this.list = list;}public User getUser() {return user;}public void setUser(User user) {er = user;}public void setUserService(IUserService userService) { erService = userService;}public IUserService getUserService() {return userService;}public User getModel() {// TODO Auto-generated method stubreturn user;}}如图:IUserDAO.javapackage cn.hsw.dao;import java.util.List;import er; public interface IUserDAO {public List<User> getAllUser();public User getUserById(Integer id);public boolean isLogin(User user);public boolean insertUser(User user);public boolean updateUser(User user);public boolean deleteUser(Integer id);}如图:UserDAO.javapackage cn.hsw.dao;import java.util.List;import org.springframework.orm.ibatis.SqlMapClientTemplate;import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; import er;import com.ibatis.sqlmap.client.SqlMapClient;public class UserDAO implements IUserDAO {private SqlMapClient client = null;public boolean deleteUser(Integer id) {try {client.delete("deleteUser", id);return true;} catch (Exception e) {return false;}}public List<User> getAllUser() {List<User> list=null;try{list=client.queryForList("getAllUser");}catch(Exception e){e.getStackTrace();}return list;}public User getUserById(Integer id) {User user=null;try {user=(User) client.queryForObject("getUserById",id);return user;} catch (Exception e) {e.getStackTrace();}return user;}public boolean insertUser(User user) {try{client.insert("insertUser",user);return true;}catch(Exception e){return false;}}public boolean isLogin(User user) {try {User u=(User) client.queryForObject("checkUser",user);if(u!=null){return true;}} catch (Exception e) {e.getStackTrace();}return false;}public boolean updateUser(User user) {try {client.update("updateUser",user);return true;} catch (Exception e) {return false;}}public void setClient(SqlMapClient client) { this.client = client;}}如图:User.javapackage cn.hsw.model;public class User {private int id;private String username;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) { ername = username;}public String getPassword() {return password;}public void setPassword(String password) { this.password = password;}}如图:user.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapPUBLIC "-////DTD SQL Map 2.0//EN""/dtd/sql-map-2.dtd"><sqlMap namespace="User"><typeAlias alias="user" type="er"/><!-- 查询表中记录条数 --><select id="recordCount" resultClass="int"><![CDATA[select count(*) from user]]></select><select id="getUserById" parameterClass="int" resultClass="user"> <![CDATA[select * from user where id =#id#]]></select><select id="getAllUser" resultClass="user"><![CDATA[select * from user]]></select><select id="checkUser" parameterClass="user" resultClass="user"> <![CDATA[select * from user where username =#username# and password =#password#]]></select><!-- --><select id="firstPage" resultClass="user" parameterClass="user"> <![CDATA[select top $pagesize$ * from user order by id desc ]]></select><delete id="deleteUser" parameterClass="int"><![CDATA[delete from user where id= #id#]]></delete><update id="updateUser" parameterClass="user"><![CDATA[update user set username= #username#,password= #password# where id =#id#]]></update><insert id="insertUser" parameterClass="user"><![CDATA[insert into user(username,password)values(#username#,#password#)]]></insert></sqlMap>如图:IUserService.javapackage cn.hsw.service;import java.util.List;import er;public interface IUserService {public List<User> getAllUser();public User getUserById(Integer id);public boolean isLogin(User user);public boolean insertUser(User user);public boolean updateUser(User user);public boolean deleteUser(Integer id); }如图:UserService.javapackage cn.hsw.service;import java.util.List;import cn.hsw.dao.IUserDAO;import erDAO;import er;public class UserService implements IUserService { private IUserDAO userDAO=null;public void setUserDAO(UserDAO userDAO) { erDAO = userDAO;}public boolean deleteUser(Integer id) {return userDAO.deleteUser(id);}public List<User> getAllUser() {return userDAO.getAllUser();}public User getUserById(Integer id) {return userDAO.getUserById(id);}public boolean insertUser(User user) { return userDAO.insertUser(user); }public boolean isLogin(User user) { return userDAO.isLogin(user); }public boolean updateUser(User user) { return userDAO.updateUser(user); }}如图:4.页面adduser.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags" %><html><head><title>My JSP 'adduser.jsp' starting page</title></head><body><s:form action="save" method="post"><s:textfield label="username" name="username"/><s:password label="password" name="password"/><s:submit value="save"/></s:form></body></html>如图:error.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags" %><html><head><title>My JSP 'error.jsp' starting page</title></head><body>This is my JSP page. <br></body></html>如图:list.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags" %><html><head><title>My JSP 'list.jsp' starting page</title></head><body><s:form action="show" method="post"><table width="50%" align="center"><tr><td align="center">userid</td><td align="center">username</td><td align="center">password</td></tr><s:iterator value="list" id="user" status="st"><tr><td align="center"><s:property value="id"/></td><td align="center"><s:property value="username"/></td><td align="center"><s:property value="password"/></td><td align="center"><s:url id="update" action="edit"><s:param name="id"><s:property value="id"/></s:param></s:url><s:a href="%{update}">update</s:a></td><td align="center"><s:url id="delete" action="delete"><s:param name="id"><s:property value="id" /></s:param></s:url><s:a href="%{delete}">delete</s:a></td></tr></s:iterator><tr><td colspan="4"><s:property value="#request.pageBar" escape="false"/> </td></tr></table></s:form> </body></html>如图:login.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags" %><html><head><title>My JSP 'login.jsp' starting page</title></head><body><s:form action="login" method="post"><s:textfield label="username" name="username"/><s:password label="password" name="password"/><s:submit value="submit"/></s:form></body></html>如图:success.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags" %><html><head><title>success</title></head><body><a href="show.action">显示用户列表</a></br><a href="adduser.jsp">添加用户</a></body></html>如图:update.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags" %><html><head><title>update.jsp</title></head><body><s:form action="update" method="post"><s:textfield name="id" label="ID" value="%{id}" readonly="true"/> <s:textfield name="username" label="UserName" value="%{username}" required="true"/><s:textfield name="password" label="Password" value="%{password}" required="true"/><s:submit value="update"/></s:form></body></html>如图:5.jar包6.表userCREATE TABLE `user` (`id` int(11) NOT NULL auto_increment,`username` varchar(20) NOT NULL default '',`password` varchar(11) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=gbk。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Struts2和iBATIS的JSP开发框架设计与实现
摘要:在jsp应用程序存在异常处理分散、拼接sql语句繁琐易错、上下层次模块间耦合度高等问题,这些问题使系统难以扩展和维护。

本文设计并实现了一个基于struts2和ibatis的jsp开发框架,解决上述问题。

该框架已经实现并在实际开发中使用。

通过对比证明,该框架提高了jsp应用系统的灵活性和扩展性,同时也缩短了开发周期,降低了开发成本。

关键词:struts2;ibatis;jsp开发框架
中图分类号:tp311.52
jsp(java server pages)是常见的b/s架构(browser/server 架构)[1]实现技术之一。

在笔者为学校开发“奖助贷系统”和“认证考试报名系统”等jsp应用系统的过程中,遇到了以下问题:(1)为系统所有模块增加、修改或者移除一个功能时,需要改动大量代码,异常处理分散,当异常处理方式改变时,代码修改量也很大;(2)系统中需要大量动态拼接sql语句,在java中拼接sql语句非常繁琐,而且容易出错;(3)业务逻辑处理和数据存取之间的接口耦合度高,多个开发人员之间沟通成本也很高。

笔者通过对已开发的两个项目进行研究,设计了一个简单的jsp 开发框架,来解决上述三个问题。

1 关键技术简介
1.1 mvc和struts2框架
mvc框架模式全称是model-view-controller[2]。

其中,model
表示业务逻辑和数据存取,view表示数据显示,controller连接model和view两部分。

mvc把数据显示(v)和数据(m)隔离,同时也把两者之间的联系(c)独立出来,三个部分各司其职,互不干扰。

struts2框架[3]对应于controller部分。

它通过编写xml配置文件,控制页面跳转。

struts2的配置代码示例如下:
method=“query”>
/list_s.jsp
/list_t.jsp
struts2的拦截器机制还能对所有请求做相同的处理[4]。

struts2的拦截器机制如图1所示。

图1 struts2拦截器原理
图1中虚线框起来的部分显示,拦截器可以在action调用前后增加一些功能模块。

使用拦截器,不需要每个action自己去调用这些功能模块,而是由struts2的配置自动为action增加这些模块。

这可以解决引言中提出的第一个问题。

1.2 ibatis框架
ibatis是一个持久层框架。

笔者所在学校的web应用程序,其数据都来自数据中心,数据库结构对外是不开放的,仅对外提供必需的sql语句。

这种情况下hibernate等框架并不适用。

ibatis是半自动化的[5]。

它实现的是业务对象和sql语句的映射,非常适合
处理这类情况。

ibatis采用的是在sql语句中使用ibatis标签来拼接sql语句,示例代码如下:
select * from t1 where 1=1
column1 = #a#
从上述代码可以看出,ibatis比java拼接sql语句更简洁,也没有单引号匹配、遗漏逗号等问题。

2 jsp应用开发框架设计
按照mvc的思想,数据显示和业务处理是相互独立的,分开后可以降低耦合度,把model所代表的业务逻辑和数据存取分开,可以进一步降低耦合度。

因此,在笔者设计的框架中,后台采用了比较流行的action-service-dao三层结构。

开发框架结构如图2所示。

图2 jsp应用开发框架结构图
2.1 异常处理
系统运行过程中有可能会遇到网络中断,数据库崩溃等业务无关的问题,还有可能出现用户查找的数据不存在、重复提交数据等业务相关的错误。

框架提供了统一的方式处理这些异常和错误。

框架的异常处理结构如图3所示。

图3 异常处理结构图
图3中的systemexception和businessexception是自定义的两个异常类,分别表示业务无关的异常和业务相关的错误。

这两个异常类不需要有任何的实质性的处理,只需要能记录异常信息即可。

2.2 dao层接口设计
dao层的接口basicdao仅提供五个方法:
public interface basicdao{
public list select(basicvo vo);
public int selectcount(basicvo vo);
public void insert(basicvo vo);
public void update(basicvo vo);
public void delete(basicvo vo);
}
这样设计,避免了dao层方法过度重载和对外接口频繁改动。

dao 层接口简单固定,所以service层无需等待dao层完全实现就可以进行编码和初步测试,开发过程中也不需要和dao层的开发人员进行过多沟通。

假如某个具体的dao层的类因为性能或者其他原因,需要更多个性化方法,可以自行添加其他方法。

3 jsp应用开发框架的实现
实现这个框架,需要为其加上统一的权限验证和异常处理功能,并使用ibatis框架实现dao层。

3.1 权限验证和异常处理
权限验证应该添加在每次action调用之前,而异常处理应该是捕获action抛出的异常,发生在action调用之后。

这两个功能都可以借助struts2的拦截器机制实现。

因为权限验证和异常处理是针对整个系统的,所以笔者在同一个拦截器myinterceptor里实现(也可以分在两个拦截器里实现)。

myinterceptor的核心代码如下:
public class myinterceptor
extends abstractinterceptor {
@override
public string intercept(
actioninvocation arg0)
{
string result = “success”;
int errortype = 0;
if(用户未登录){
result = “error”;
errortype = “nologin”;
} else if(用户没有权限){
result = “error”;
errortype = “noauthor”;
} else {
try{
result = arg0.invoke();
} catch(exception e){
result = “error”;
errortype = “exception”;
}
}
return result;
}
}
系统中不管是出现异常还是业务相关的错误(包括未登录和没有权限),myinterceptor都会返回“error”。

在struts2里配置error 对应的result是一个链式请求mngerror.action,接下来就会进入mngerror对应的方法去处理。

3.2 dao层具体实现
首先用ibatis的配置文件sqlmapconfig.xml创建一个sqlmapclient对象,核心代码如下:
reader reader = resources.
getresourceasreader(”sqlmapconfig.xml”);sqlmapclient sqlmapper = sqlmapclientbuilder. buildsqlmapclient(reader);
reader.close();
接下来,在方法里使用sqlmapper进行增删改查等操作:sqlmapper.queryforlist(“select”, vo);
sqlmapper.queryforobject(“selectcount”, vo);sqlmapper.insert(“insert”, vo);
... ...
4 结语
目前,该框架已经在项目中得到了实际应用,笔者利用这个框架,重新开发了学校的奖助贷管理系统和等级考试报名系统。

该框架提高了web应用程序的灵活性和扩展性,也大大缩短了开发周期。

如何提高框架中数据存取的性能和效率是笔者下一步着重要考虑的
问题。

参考文献:
[1]徐秀敏,郝赫,曹占峰,尹洪苓,朱大勇.基于三层b/s的规划计划信息管理平台[j].计算机系统应用,2013,22(4):51-54.
[2]丁振凡.基于springmvc的网络存储系统[j].计算机系统应用,2013,22(2):178-181.
[3]丁波,晁爱农.基于struts2框架的ajax开发研究[j].计算机工程与设计,2009,30(16):3910-3913.
[4]卞世晖,李龙澍,陈圣兵,李浩.基于aop理念的struts2拦截器的研究与应用[j].电子设计工程,2010,18(1):8-9.
[5]clinton begin,brandon goodin,larry meadors.ibatis in action[m].北京:人民邮电出版社,2008.
作者简介:岳鹏(1986.1-),男,硕士,助理实验师,研究方向:计算机应用。

作者单位:山东大学(威海)网络与信息管理中心,山东威海264209。

相关文档
最新文档