使用SSH开发增删改查的综合用户管理例子共102页
SSH程序开发参考文档
SSH程序开发参考文档一、简单查询页面程序开发1.阅读相关Use Case,并检查是否有问题。
2.根据Use Case,查看相关表及其对应的Model文件。
3.创建相应的资源文件。
4.创建Form文件5.创建action配置文件这里的action页面就是action-mapping对象,通过它给定URI以及需要用到的frombean,的UserManagementForm在struts配置中的饿逻辑名是userManagementForm,所以name指定其逻辑名。
Forward是页面的跳转,现在我们需要做一个查询主控页面,逻辑名字定义为info(名字最好能定义的明确一点),黄色标记的path就是这个页面对应的jsp,等我们把jsp 编辑完后就可以在这添加了。
同样,这个配置文件也得在src/config/struts/struts-config.xml中的相应位置追加此文件(同上)6.创建jsp页面以没有特殊情况就不必要在在这页面指定其它的formbean了。
大家注意,这里用蓝色标记的东西都是这个formbean的类文件里定义的,在这里,formbean的作用是数据交互的载体。
<s:grid name=" " >标签是定义网格的,它的name元素是指定在grid配置文件中对应的gri配置<s:menu name=" " />标签是用于网格上面按钮显示以及触发事件的配置。
7.创建action文件http://localhost:8088/pwdev//usermanagement/UserAction.do?p=userControl8.创建SQL文件因为这个是个查询页面,所以必须得与数据库交互,来获得信息,所有就必须写个中添加就OK了。
如果写其他模块的,可以按照这个格式写,放在同一个目录下即可。
9. 创建DAO文件这个业务要求是初始进这个页面时,导出user的所有数据,然后可以在页面中对10. 创建service业务逻辑java文件,并且创建Spring文件因为在service文件里写业务时必须要用到userManagementDAO类文件,所以必须要依赖注入,注意Spring配置文件,注入内容都在里面。
在eclipse里基于SSH实现增删改查源代码
<!-- <LINK href="css/admin.css" type="text/css" rel="stylesheet">-->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询</title>
</tr>
<tr class="editFooterTr">
<td class="editFooterTd" colspan="2">
<input type="submit" value="保存"/> <input type="reset" value="重置">
</td>
</tr>
</table>
</head>
<body>
<table class="position">
<tr class="position">
<td class="position">学生信息</td>
</tr>
</table>
<s:form action="editStudent">
基于SSH框架整合开发用户管理信息系统
用 S r g的 IcIvr o f o t l控 制 反 转 ) 器 来 负 责 创 建 信 息 系统 无 论 是 在 整 体 结 构 上 还 是 在 局 部 的 复 杂 业 务 模 型 中 都 pi n o ( cs nO nr , n i C o 容 和管 理 组 件 . 些 组 件 包 括 前 端 的业 务 控 制 器 。 间 的 业 务 逻 辑 有 了更 低 的耦 合 性 . 们 的 灵 活 性 与 可维 护性 也得 到 了 提 高 . 这 中 它 从 组件 , 以及 底 层 的 D O 组 件 。这 些 组 件 都 处 于 S r g的 I A pn i o e容 而 消 除 了单 独 使 用 这 三种 框 架 开 发 系统 的不 足 。 器 中 . 而大 大 降低 了各 组 件 之 间 的耦 合 度 。 从 31Sr t . t s与 S r g的 整 合 u pn i
21 0 0年第 6期
福
建
电
脑
13 2
基 于 S H框 架整合 开发用户 管理信 息 系统 S
陈 有 为 .冯 楠 z
10 1) ( . 安 邮 电 学 院 计 算 机 学 院 陕 西 西安 7 0 2 2西安 医 学 院 陕西 西安 7 0 2 1 西 111 .
【 摘
要 】 用P管理信息 系统采 用 S H(t s+ pig Hi ma ) : S smt S f + b t 框架 来实现功 能需求。通过框 架的使 用 , 2 n e e 降低 了代码
耦 合 度 , 少 了 开发 周 期 , 到 了快 速 , 减 达 高效 的 开 发 目的 , 而 为程 序 开发 者 提 供 了便 利 。 从
ssh增删改查流程
1)拷贝下面所讲的.java文件,9个java文件和相应的包名,这些根基上大果任封装好的文件,能够直截了当用。
manager包里面有:IBaseManager.javaIManager.javaIUserLoginManager.javarties还有一个action包:BaseAction.javaIAction.javautils包里面有:MyActionProxy.javaObjectUtils.java再把log4j.properties贴到src包下面。
2〕把applicationContext.xmlstruts-config.xmlstruts-html.tldstruts-logic.tldstruts-tiles.tldvalidator-rules.xml这些往常写过的都能够贴过来,你能够直截了当把那个工程里的都贴过往,以后就直截了当在那个地点该代码就行了。
以上两个步骤样确实是根基为了完成手写SSH代码3〕新建一个pojo包:创立一个实体:先让那个类实现序列接口如:然后写相应的字段:利用get和set方法生成每个字段的get()和set()。
例如:4)为了更够生成因此为每一个字段写出相应的元数据:1.生成相应的表:讲明:利用hibernate生成UserLogin表。
2.字段id的映射,元数据要写在get〔〕方法前面:3.字段username的映射,元数据要写在get〔〕方法前面:4.字段password的映射,元数据要写在get〔〕方法前面:如此那个UserLogin.java就完成了。
5〕右键工程名称寻到“属性〞选项:寻到:XDoclet点击那个出来相应的界面:单击按钮,出现:选中:并单击确定按钮。
出现:点击“确定〞按钮。
6〕右键工程名称:执行RunXDocle后只要出现:就讲明你的UserLogin类的创立成功了!!7〕新建一个UserLogin.jsp的页面(带Form的那种页面):生成相应的页面后把属性名称,改成:给相应的action后面添加一个名字,如:8〕寻到双击:在代码标签中手写action(确实是根基上面表单提交后的那个/***.do):在寻到标签,写上form-bean的代码:讲明:依据jsp页面提交的/UserLogin.do寻到struts-config.xml里面的path属性,依据name属性寻到form-bean标签里的name属性,以及它对应的type属性,type属性写应该实是根基pojo类中UserLogin的全名(包括包名和类名),Parameter属性是讲明表单提交后要执行check方法,Validate=〞false〞属性讲明不使用表单验证框架,Scope=〞request〞讲明作用域是request,Type=〞〞属性写得确实是根基你一会要创立的UserLoginAction的全名(包括包名和类名),Fj,失败就跳转failed.jsp页面。
ssh命令——精选推荐
ssh命令常⽤的ssh命令cd 切换⽬录1.查看⽇志:举例: tail -f tomcat/apache-tomcat-6.0.26/logs/catalina.2010-11-10.out2.pwd 查看当前⽬录3.cd ../ 回上⼀级⽬录4. ./ shutdown.sh,./ startup.sh关闭和启动tomcat服务 ./catalina.sh run 带tomcat 控制台输出的tomcat 启动5.拷贝⽂件cp6.删除⽂件rm (-rf,表⽰强制删除),移动⽂件mv7.查看及终⽌进程 ps -ef | grep tomcat ,kill - 9 进程ID8.查看⽂件列表ll或ls或dir查看⽂件⼤⼩ du -sh (⼦⽬录)单位是M9.mkdir 创建⽬录 mkdir -P /www/ep/aaa/bbb10.tar -zcvf xxxxxxxxx.tar.gz 源⽂件(⽂件夹或⽂件都⾏)tar -zxvf xxxxxxxxx.tar.gz 解压⽂件su - (以root登录) root密码baidu123cp *。
imp 到/home/oracle/database_bak更改⽤户组 chown oracle:oracle .chown -R res:res ⽂件名切换到 oracle ⽤户 : su - oracle 密码:abc123执⾏导⼊命令 imp common/cnnic file=xxxx tables=xxx导出命令: exp common/cnnic file=xxxx tables =xxx编辑⽂件vi ****.txti ----表⽰进⼊插⼊模式,可以进⾏编辑了编辑好之后,按“ESC”,然后再输⼊“:”,然后输⼊“wq”就表⽰保存退出,若不想保存,输⼊“q!”,就退出了linux⽂件管理是以层级式⽅式管理根⽬录就是“/”,重要⽬录root:存放root⽤户相关的⽂件home:存放普通⽤户的相关⽂件bin:存放常⽤命令的⽬录sbin:存放需要⼀定权限才能使⽤的命令mnt:默认的挂载光驱软驱的⽬录(也可以不挂载在这)boot:存放引导相关的⽂件etc:存放配置相关⽂件,⽐如环境变量,mysql配置等等var:存放变化的⽂件usr:⽂件默认安装的⽂件夹添加⽤户useradd xiaoming设密码passwd xiaoming然后输密码即可,su - xiaoming 以⼩明的⾝份来操作 #号变$符号删除⽤户(两种)userdel xiaoming 此命令只删除⽤户,但xiaoming⽂件夹还在userdel -r xiaoming 此命令删除⽤户和⽤户的主⽬录linux运⾏级别(0,1,2,3,4,5,6)七个级别,重要概念(在 etc/inintab⽂件中改)0,关机(系统开机了就关机)1,单⽤户2,多⽤户没⽹络服务3,多⽤户有⽹络服务(⽤的最多)4.,系统未使⽤保留给⽤户5,图形界⾯(⼀开机就进⼊图形界⾯)6,系统重启(⼀直重启)ls 显⽰⽂件和⽬录的命令ls -a 显⽰隐藏⽂件ls -l 显⽰长列表格式ls -al 兼容上⾯两种形式显⽰mkdir 建⽴⽬录 mkdir aaarmdir 删除空⽬录 rmdir aaatouch 建空⽂件 cp mv rmmore 带分页显⽰ “空格”下⼀页 “PageUp”上⼀页“|”,管道命令(把前⾯命令的结果交给后⾯的命令处理)grep 查找⽂本 grep abc tt.txt (在tt.txt中查找abc)man ⼿册的意思(相当于windows下⾯的help)find 查找⽂件find /home/res/tmp/android/ -name readme.txt 在这个⽬录下以name查找,也就是查找⽂件名为readme.txt的⽂件重定向命令ls -l > a.txt 把列表的内容写到a.txt中 (覆盖写)ls -l >> a.txt 把列表的内容写到a.txt中(追加写)⽂件权限⽤户组groupadd aaa --添加组aaavi /etc/group 或 cat /etc/group --查看组useradd -g aaa yanxing --创建⽤户yangxing并添加到aaa组vi /etc/passwd 或 cat /etc/passwd --查看⽤户 res:x:608:608::/home/res:/bin/bash 第⼀个608是⽤户id,第⼆个608是组的id,/home/res 是该⽤户主⽬录,/bin/bash 是shell解析器举例说明:-rw-r--r-- 1 res res 4829 May 13 14:11 dom4j.txt-rw-r--r-- 表⽰各类⽤户对该⽂件的访问权限,第⼀个“-”表⽰⽂件类型,如果是“-”表⽰是普通⽂件rw- 表⽰⽂件所有者对该⽂件的权限(r(或4),可读,w(或2),可写,x(或1)可执⾏)r-- ⽂件所在组对该⽂件的权限r-- 其他组(的⽤户)对该⽂件的权限res res 分别表⽰⽤户和组修改⽂件的访问权限的问题chmod 777 res --第⼀个7对所有者修改,第⼆个7对所在组修改,第三个7表⽰对其他组的权限(4,2,1)usermod -g 组名⽤户名 --更改⽤户的⽤户组chown ⽤户名⽂件名 ---修改⽂件的所有者chgrp 组名⽂件名 --修改⽂件所在的组linux 分区基本分区扩展分区(不能直接使⽤,要分成逻辑分区)逻辑分区(理论上没有数量限制)基本分区+扩展分区<=4 个安装(略)samba (⽤于linux和windows的⽂件共享、传输等)shell (解析命令给内核,shell编程),常⽤的有三种:bash,csh,kshenv --查看当前操作系统的环境变量chsh -s 新的shell(如:/bin/csh) --改变系统的shell命令补全 tab键history --查看输⼊的命令的历史记录history 10 --最近执⾏的10条命令!5 --执⾏编号为5的命令tcp/ipln -s 源⽬标 ---建⽴连接⽂件,类似于windows的快捷⽅式mv 源⽂件⽬标⽂件unzip 解压⽂件rm -rf 删除⽂件1 :连接oraclesu - oracleabc123sqlplus /nologconn /as sysdbalsnrctl status 监听状态2:scp -rp /home/oracle/test/test.dmp oracle@218.241.108.14:/home/oracle/test 3: netstats - anp |grep oracle wl -c。
搭建第一个web项目:实现用户的增删改查
搭建第⼀个web项⽬:实现⽤户的增删改查 好久没写这个web的代码了,再不写估计以前的也忘记的差不多了,赶紧复习下,顺便把⾃⼰的想法慢慢实现了。
最近在公司发现以前的项⽬有⽤easyUI搭建的。
赶紧copy回来学习下。
感觉写⽇志真的很有必要,⾃⼰总结的肯定要⽐每次从⽹上查阅来的靠谱。
每次搭建⼀个基本的web项⽬都都要查ssh的配置真的很忧伤啊,有⽊有 把jar包的截图截了⼀下,要不总是记不清该⽤到的基本jar有啥。
其中Struts中⽤到的jar有:commons-fileupload.jar commons-io.jar freemarker.jar ognl.jar struts2-core.jar xwork-core.jar 因为⽤到的是Struts的注解形式,所以加⼊了Struts的插件jar:struts2-convention-plugin.jar hibernate中⽤到的jar有:hibernate核⼼包:hibernate.jar hibernate必须包:antlr.jar commons-collection.jar dom4j.jar javassist.jar jta.jar slf-4j.jar 数据库连接池:c3p0 数据库驱动jdbc:mysql-connector.jar spring中⽤到的jar有:核⼼包:spring.jar AOP:aspectjrt.jar aspectjweaver.jar 动态代理(和aop也有关)cglib.jar ⽇志有关commons-logging.jar 其他的插件包需要的时候⼀个⼀个添加,上⾯的是最基本的。
好了,这回基本jar包也记录下来了。
下⾯开始好好研究下公司项⽬,实现最基本的⽤户增删改查了。
现在最⿇烦的就是项⽬⾥的基础通⽤类不知道该怎么部署,啊啊啊啊啊 马丹,把项⽬拷到公司电脑上之后包了个这个错误,我也是醉了好不,明明都是⼀样的MySQL和Eclipse,为啥就不⾏了呢。
基于SSH框架的用户管理系统的设计与实现
基于SSH框架的用户管理系统的设计与实现SSH是指结合了Spring、Hibernate和Struts这三个框架的开发模式,它将这三个框架的优点融合在一起,来实现开发的便捷性和高效性。
在开发用户管理系统时,可以使用SSH框架来实现,下面将详细介绍基于SSH框架的用户管理系统的设计与实现。
一、系统设计用户管理系统主要包括用户信息管理、权限管理和角色管理三个主要模块。
1.用户信息管理用户信息管理模块主要包括用户的增加、删除、修改和查询等功能,其中包含用户的基本信息以及与用户相关的其他信息。
2.权限管理权限管理模块主要包括对用户权限的设置和管理,可以对用户进行授权,设置用户可以访问的功能和操作,以及对用户权限的修改和删除等操作。
3.角色管理角色管理模块主要包括对用户角色的设置和管理,可以创建不同的角色并分配给用户,不同的角色可以拥有不同的权限,可以进行角色的增加、删除、修改和查询等操作。
二、系统实现1.数据库设计用户管理系统数据库可以设计为三个表,分别是用户表、权限表和角色表。
用户表包含用户的基本信息,权限表包含用户权限的设置,角色表包含不同角色的定义和权限的关联。
2.前端页面设计前端页面可以使用HTML、CSS和JavaScript来实现,可以使用Bootstrap等前端框架进行美化和响应式布局。
3.后端代码实现后端代码可以使用Java来编写,使用SpringMVC来实现控制器层的开发,使用Spring和Hibernate来实现业务逻辑和数据持久化层的开发。
控制器层通过接收来自前端的请求,并调用Service层的方法来处理请求。
Service层主要处理业务逻辑,包括对用户信息、权限和角色的增加、删除、修改和查询等操作。
数据持久化层使用Hibernate来实现数据的持久化操作,包括对数据库的增删改查等操作。
4.配置文件系统的配置文件主要包括Spring的配置文件和Hibernate的配置文件。
Spring的配置文件包含Bean的定义和配置,包括配置数据库连接信息、事务管理等。
SSH实例(简单地增删改查功能)
SSH实例(简单地增删改查功能)SSH (Secure Shell) 是一种安全协议,用于在不安全的网络环境中安全地远程访问和控制计算机。
它提供了加密和身份验证机制,确保远程连接的安全性。
SSH通常用于通过命令行界面远程管理Linux和Unix系统,但也可以用于其他操作系统和用途。
在本篇文章中,我们将介绍如何使用SSH在远程计算机上实现简单的增删改查功能。
我们将使用SSH客户端的命令行界面,该界面可用于执行远程命令和管理文件。
我们将使用以下步骤来完成这个任务:1.配置SSH客户端:首先,我们需要配置SSH客户端以连接到远程计算机。
我们需要提供远程计算机的IP地址、用户名和密码或SSH密钥。
如果远程计算机已经配置了SSH服务器,我们可以直接使用SSH命令连接到远程计算机。
例如,使用以下命令连接到远程计算机:``````2. 创建增加数据的脚本:在远程计算机上,我们可以使用各种脚本语言编写脚本来实现增加数据的功能。
例如,我们可以使用Python编写一个脚本,在数据库中插入一条新的记录。
我们可以通过SSH命令在远程计算机上执行该脚本。
例如,使用以下命令执行脚本:``````3. 创建删除数据的脚本:类似地,我们可以编写一个脚本来删除数据库中的记录。
例如,我们可以使用Python编写一个脚本,在数据库中删除指定的记录。
我们可以通过SSH命令在远程计算机上执行该脚本。
例如,使用以下命令执行脚本:``````4. 创建修改数据的脚本:同样地,我们可以编写一个脚本来修改数据库中的记录。
例如,我们可以使用Python编写一个脚本,在数据库中更新指定的记录。
我们可以通过SSH命令在远程计算机上执行该脚本。
例如,使用以下命令执行脚本:``````5. 创建查询数据的脚本:最后,我们可以编写一个脚本来查询数据库中的记录。
例如,我们可以使用Python编写一个脚本,从数据库中检索指定的记录。
我们可以通过SSH命令在远程计算机上执行该脚本。
使用SSH开发增删改查的综合用户管理例子共102页PPT
•
26、我们像鹰一样,生来就是自由的 ,但是 为了生 存,我 们不得 不为自 己编织 一个笼 子,然 后把自 己关在 里面。 ——博 莱索
•27、法律如果不讲Fra bibliotek理,即使延续时 间再长 ,也还 是没有 制约力 的。— —爱·科 克
•
28、好法律是由坏风俗创造出来的。 ——马 克罗维 乌斯
谢谢!
•
29、在一切能够接受法律支配的人类 的状态 中,哪 里没有 法律, 那里就 没有自 由。— —洛克
•
30、风俗可以造就法律,也可以废除 法律。 ——塞·约翰逊
理例子
61、奢侈是舒适的,否则就不是奢侈 。——CocoCha nel 62、少而好学,如日出之阳;壮而好学 ,如日 中之光 ;志而 好学, 如炳烛 之光。 ——刘 向 63、三军可夺帅也,匹夫不可夺志也。 ——孔 丘 64、人生就是学校。在那里,与其说好 的教师 是幸福 ,不如 说好的 教师是 不幸。 ——海 贝尔 65、接受挑战,就可以享受胜利的喜悦 。——杰纳勒 尔·乔治·S·巴顿
SSH实现的增删改查实例
SSH实现的增删改查实例分类:ssh 2010-10-01 17:12 1487人阅读评论(5) 收藏举报一.整合步骤1. 通过MyEclipse向导,添加struts功能2. 通过MyEclipse向导,添加Hibernate3功能:生成会话工厂的那个步骤中一定要将那个对号要去掉,不能由hibernate来生成,而是交给Spring来生成;还有就是导入jar包的时候选择复制到lib目录下这一项。
3. 通过MyEclipse向导,导入实现Spring功能,注意导入jar包的时候选择复制到lib目录下这一项。
3. 利用MyEclipse反向工程的方法,以Spring<dao>生成dao对象的方式创建Hibernate DAO,相关POJO及其xxx.hbm.xml。
4. DAO实现类加入@Transactional标记。
5. 修改applicationContext.xml文件,增加Spring事务管理、DAO等bean的配置。
6. 编写action类。
7. 在applicationContext.xml文件中添加Action的代理bean。
8. 在struts的配置文件中,添加相应的Action,类名指向Spring中的代理bean,并加入<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />和<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation"value="/WEB-INF/classes/applicationContext.xml" /></plug-in>。
使用SSH开发增删改查的综合用户管理例子
托给业务层StudentManager 类来完成 根据个人爱好的不同,你既可以先完成前台的页面,也可以
先把后台的业务类写完整,或者是两个人分工的话一人负责 一部分
指定了位于web.xml 中的 Struts 核心Servlet 的名字
指定了默的国 际化资源文件包
是否安装Struts 的标签库文件
添加了 Struts 的目录结构
在 src 目录下编写我们自己 的类
Struts 1.2 的类库
struts-config.xml Struts 的TLD 文件
验证器文件
这也是实际开发两人或者多人分工协作可能出现的情 况,例如:一个写前台,一个写后台
当然我们并不是要让大家非得按照软件工程或者项目 管理规范,把所有的文档都写好了才能真正开始编码, 我们只需要让想法表示出来,就可以了
用代码来表示自己的想法,其实也是一种很不错的办 法(一直备受赞扬的敏捷开发――Agile,就是这样)
用户管理应用业务流程图
业务流程说明
功能模块 分页列出用户 创建新用户(new) 删除用户(delete) 修改用户(edit) 查找用户(search)
流程 index.jsp→list.do new.jsp→new.do→list.do Delete.do→list.do edit.do→edit.jsp→save.do→list.do Search.do→search.jsp
Struts 配置文件编辑器
双击 WebRoot/WEB-INF/struts-config.xml 就可以打开 Struts 配置文件编辑器
ssh实例
Struts+Spring+Hibernate开发实例一介绍本文并不想介绍Struts,Spring,Hibernate的原理系统架构等,本文地目的是通过一个较复杂地实例介绍如何整合Struts,Spring,Hibernate,网上现有的例子虽然也能达到目的,但功能都比较单一,复杂的例子时会有意想不到的麻烦。
本文对读者假设已经具备了以上框架的基础知识。
以及那些已经了解Struts,Spring,Hibernate的基本概念,但是还没有亲身在较复杂的项目中体验Struts+Spring+Hibernate的开发人员。
1 Struts虽然不打算过多介绍Struts的原理,但是大概介绍一下还是有必要的。
Struts本身就是 MVC 在这里负责将用户数据传人业务层,以及将业务层处理的结果返回给用户,此系统属于较简单WEB应用,采用了OpenSessionInView模式处理LazyLoad问题,这样我们可以在用户视图中使用 get,set方法来方便地获取关联对象。
为了处理庞大的Action和ActionForm问题,在此我门准备使用DynaActionForm (DynaValidatorForm)和DispatchAction以及动态验证框架来解决。
及使用Tile来解决框架问题。
使用自定义标签处理分页和身份验证问题。
2 SpringSpring Framework最得以出名的是与Hibernate的无缝链接,虽然Spring 对Hibernate提供了90%以上的封装,使我们不必去关心Session 的建立,关闭,以及事务使我们能够专心的关注业务逻辑。
但是一些特殊情况如有时需要Query以及Criteria 对象,分页等,Spring不能给我们提供支持,总不能每次都在你的DAO上写个HibernateCallBackup()吧?Spring的作用不是把Hibernate再封装一层,而是让你接触不到Hibernate的API,而是帮助你管理好Session和Transaction。
ssh整合用户登录案例
ssh整合用户登录案例一、整体架构介绍在软件工程领域,为了降低模块耦合度,提高模块的可重用性,分层一直是广为采纳的一个方法。
其实分层还可以使开发人员专注于某一层进行开发,使得软件开发的分工变细,提高生产效率(这一点上堪比福特发明的流水线生产汽车的做法,各个工人负责特定部件的生产,最后组装)。
一个企业级的java应用,通常分为以下几层:UI层,业务逻辑层,数据持久层,域对象层。
下面对这几层分别作简要介绍:1.UI层:负责与用户交互,包括:接受用户的请求,把处理结果返回给用户。
这里我们采用struts来UI层,虽然比起Tapestry以及JSF这些事件驱动的表现层技术而言,Struts的设计显得有些老土,但它目前仍是表现层事实上的标准,所以我们还是选用它。
2.业务逻辑层:主要负责具体的业务处理。
通过Spring的IOC以及AOP实现各个功能的耦合相连3.数据持久层:主要负责与底层的数据库打交道。
这里我们采用Spring封装的Hibernate操作来简化实际的编码。
主要的操作为CRUD(create ,read, update, delete)4.域对象层:具体的实体类,如老师,学生等等这些具体的类(注意:需要与数据库中的某一标对应)。
以上只是简单介绍了各个层的划分以及各层所对应的开源框架,要详细了解各层的具层信息,需要访问struts, hibernate, spring的官方网站。
二、实例分析实例说明:一个网站登录的例子,比较简单,但能说明各层是如何协调工作的。
工具:jdk1.5,eclipse3.2,myeclipse5.0GA,mysql5.0,tomcat5.5,至于这几个工具到底该怎么装这里我就不多说了,大家不清楚的可以到网上搜搜。
下面是具体操作步骤:预备工作:用mysql创建一个test数据库,再创建一个user表,再创建两个字段username和password。
脚本如下DROP DATABASE IF EXISTS `test`;CREATE DATABASE `test`USE `test`;CREATE TABLE `user` (`id` int(11) NOT NULL auto_increment,`username` varchar(30) NOT NULL default '',`password` varchar(30) default '',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=gb2312;打开myeclipse的database explore透视图右键单击左侧的空白区域,点击new 按钮单击“configure database driver”来配置数据库的驱动,你必须有mysql的jdbc驱动,没有的到mysql的官方网站上下载。
IDEA下写出第一个SSH整合框架练手项目(四,部门和员工的增删改查完成)
IDEA下写出第⼀个SSH整合框架练⼿项⽬(四,部门和员⼯的增删改查完成)视频地址:我的整个完整源码地址:这是SSH 整合项⽬的第三章,第⼀章基于Meavn 整合 Spring 和 Hibernate 框架并进⾏了进⾏了⾃动建表,第⼆章则在此基础上加⼊ Struts 2 框架以及完成⼀个简单的登陆页⾯。
第三章主要侧重于分页查询功能的实现,第四章则着重完善增删改查代码,因为重复性太⼤,直接将代码粘上来,⽐较难的会写上注释。
⾸先写Employee 的增删改查,直接写Action--->Service---->DaoEmployeeAction.java 中新增的代码/*** ⾸先获取到所有的部门,更改员⼯所在的部门,然后跳转到真正添加员⼯的jsp*/public String saveUI() {//查询部门List<Department> list = departmentService.findAll();//集合⽤ set ⽅法,对象⽤ pushActionContext.getContext().getValueStack().set("list", list);return "saveUI";}/*** 保存员⼯的 save()*/public String save() {employeeService.save(employee);return "saveSuccess";}/*** 更新员⼯信息的⽅法*/public String edit() {//根据员⼯ID 查询员⼯employee = employeeService.findById(employee.getEid());List<Department> list = departmentService.findAll();ActionContext.getContext().getValueStack().set("list", list);return "editSuccess";}public String update() {employeeService.update(employee);return "updateSuccess";}/*** 删除员⼯使⽤的⽅法*/public String delete(){employeeService.delete(employee);return "deleteSuccess";}EmployeeService.java(Service 的接⼝全部代码)package com.test.ssh.service;import com.test.ssh.domain.Employee;import com.test.ssh.domain.PageBean;public interface EmployeeService {public Employee login(Employee employee);PageBean<Employee> fingByPage(Integer currPage);void save(Employee employee);Employee findById(int eid);void delete(Employee employee);void update(Employee employee);@Overridepublic void save(Employee employee) {employeeDao.save(employee);}@Overridepublic Employee findById(int eid) {return employeeDao.findById(eid);}@Overridepublic void delete(Employee employee) {employeeDao.delete(employee);}@Overridepublic void update(Employee employee) {employeeDao.update(employee);}此时在/web/frame 下新增⼀个 editEmployee.jsp<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html;charset=UTF-8"><title></title><body><table border="0" width="600px"><tr><td align="center" style="font-size:24px; color:#666"> 员⼯修改</td></tr><tr><td align="right"><a href="javascript:document.getElementById('saveForm').submit()">保存</a><a href="javascript:history.go(-1)">退回</a></td></tr></table><br/><s:form action="employee_update" method="post" namespace="/" id="saveForm" theme="simple"><s:hidden name="eid" value="%{model.eid}"/><table border='0' cellpadding="0" cellspacing="10"><tr><td>姓名:</td><td><s:textfield name="ename" value="%{model.ename}"/></td><td>性别:</td><td><s:radio name="sex" list="{'男','⼥'}" value="%{model.sex}"/></td></tr><tr><td>出⽣⽇期:</td><td><input type="text" name="birthday" value="<s:date name="model.birthday" format="yyyy-MM-dd"/>"/></td> <td>⼊职时间:</td><td><input type="text" name="joinDate" value="<s:date name="model.joinDate" format="yyyy-MM-dd"/>"/></td> </tr><tr><td>所属部门:</td><td><s:select name="department.did" list="list" listKey="did" listValue="dname"value="%{model.department.did}" headerKey="" headerValue="-----请--选--择----"/></td><td>编号:</td><td><s:textfield name="eno" value="%{model.eno}"/></td></tr><tr><td>⽤户名:</td><td><s:textfield name="username" value="%{ername}"/></td><td>密码:</td><td><s:password name="password" value="%{model.password}" showPassword="true"/></td></tr></table></s:form></body></html>在同⼀位置新增⼀个editDepartment.jsp<head><meta http-equiv="content-type" content="text/html;charset=UTF-8"><title></title></head><body><table border="0" width="600px"><tr><td align="center" style="font-size:24px; color:#666"> 部门编辑</td></tr><tr><td align="right"><a href="javascript:document.getElementById('saveForm').submit()">保存</a><a href="javascript:history.go(-1)">退回 </a></td></tr></table><br/><br><s:form id="saveForm" action="department_update.action" method="post" namespace="/" theme="simple"> <s:hidden name="did" value="%{model.did}"/><table style="font-size::16px"><tr><td>部门名称:</td><td><s:textfield name="dname" value="%{model.dname}"/></td></tr><tr><td>部门介绍:</td><td></td></tr><tr><td width="10%"></td><td><s:textarea cols="50" rows="5" name="ddesc" value="%{model.ddesc}"/>"/></td></tr></table></s:form></body></html>测试发现出现Bug,org.springframework.dao.InvalidDataAccessApiUsageException:object references an unsaved transient instance - save the transient instance before flushing:com.test.ssh.domain.Department; nested exception is org.hibernate.TransientObjectException: object r查询后更改applicationContext.xml将<!--开启注解式事务管理 --><tx:annotation-driven transaction-manager="transactionManager"/>改为<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="search*" read-only="false" /></tx:attributes></tx:advice>然后更改DepartmentAction.java(直接放全部代码)package com.test.ssh.action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.test.ssh.domain.Department;import com.test.ssh.domain.PageBean;import com.test.ssh.service.DepartmentService;import com.test.ssh.service.impl.DepartmentServiceImpl;public class DepartmentAction extends ActionSupport implements ModelDriven<Department> {//模型使⽤的驱动* 查询并设置页数的操作* 先默认当前页⾯ currPage = 1*/private Integer currPage = 1;public void setCurrPage(Integer currPage) {this.currPage = currPage;}public String findAll() {PageBean<Department> pageBean = departmentService.findByPage(currPage); //将pageBean 存⼊到值栈中ActionContext.getContext().getValueStack().push(pageBean);return "findAll";}//添加部门public String save() {departmentService.save(department);return "saveSuccess";}/*** 我们在findAll页⾯⾥点击了编辑按钮后,调⽤edit ⽅法,* 主要是获取想要修改的部门的属性,并展现在⽹页中,* 待⽤户修改完成后,点击保存,则调⽤的是 update() ⽅法进⾏更新*///编辑部门的执⾏的⽅法public String edit() {department = departmentService.findById(department.getDid());return "editSuccess";}//修改部门的执⾏的⽅法public String update() {departmentService.update(department);return "updateSuccess";}/*** 为了完成级联删除,即删除某⼀个部门,对应的所有员⼯都被删除* 需要先查询,后删除*/public String delete() {department = departmentService.findById(department.getDid());departmentService.delete(department);return "deleteSuccess";}public void setDepartment(Department department) {this.department = department;}public void setDepartmentService(DepartmentService departmentService) {this.departmentService = departmentService;}@Overridepublic Department getModel() {return department;}}DepartmentServiceImpl.java(接⼝中的⽗⽅法⼿动补全)package com.test.ssh.service.impl;import com.test.ssh.dao.DepartmentDao;import com.test.ssh.domain.Department;import com.test.ssh.domain.Employee;import com.test.ssh.domain.PageBean;import com.test.ssh.service.DepartmentService;import java.util.List;public class DepartmentServiceImpl implements DepartmentService {private DepartmentDao departmentDao;public void setDepartmentDao(DepartmentDao departmentDao) {this.departmentDao = departmentDao;PageBean<Department> departmentPageBean = new PageBean<Department>();// 封装当前的页数departmentPageBean.setCurrPage(currPage);//封装每页显⽰的记录数,默认为3int pageSize = 3;departmentPageBean.setPageSize(pageSize);//封装总记录数,总记录数通过查询数据库获得int totalCount = departmentDao.findCount();departmentPageBean.setTotalCount(totalCount);//封装总页数double tc = totalCount;Double num = Math.ceil(tc / pageSize);departmentPageBean.setTotalPage(num.intValue());//封装每页显⽰的数据int begin = (currPage - 1) * pageSize;List<Department> list = departmentDao.findByPage(begin, pageSize);departmentPageBean.setList(list);return departmentPageBean;}@Overridepublic List<Department> findAll() {return departmentDao.findAll();}@Overridepublic void save(Department department) {departmentDao.save(department);}@Overridepublic void update(Department department) {departmentDao.update(department);}@Overridepublic void delete(Department department) {departmentDao.delete(department);}@Overridepublic Department findById(int did) {return departmentDao.findById(did);}}DepartmentDaoImpl.java(接⼝中的⽗⽅法⼿动补全)package com.test.ssh.dao.impl;import com.test.ssh.dao.DepartmentDao;import com.test.ssh.dao.EmployeeDao;import com.test.ssh.domain.Department;import com.test.ssh.domain.Employee;import org.hibernate.criterion.DetachedCriteria;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import java.util.List;public class DepartmentDaoImpl extends HibernateDaoSupport implements DepartmentDao { @Overridepublic int findCount() {//查询个数String hql = "select count(*) from Department ";List<Long> list = this.getHibernateTemplate().find(hql);//如果个数if (list.size() > 0) {return list.get(0).intValue();//将Long 类型转为 int 类型后返回.}return 0;DetachedCriteria criteria = DetachedCriteria.forClass(Department.class);List<Department> list = this.getHibernateTemplate().findByCriteria(criteria,begin,pageSize);return list;}@Overridepublic List<Department> findAll() {//查询到所有语句的 hql 语句。
用SSH2实现简单的用户登录注册删除功能
第一次尝试把SSH2整合起来,这里记下编写当中遇到的问题和自己的思考一、使用struts编写登陆注册等界面Java代码1.<body>2.This is my Register page. <br>3.<form action = "register!register" method = "post">ername:<s:textfield name ="username"/><br>5.password:<s:password name = "password1"/><br>6.repeatpassword:<s:password name = "password2"/><br>7.email:<s:textfield name ="email"/><br>8.<s:submit value ="submit"/><br>9.<s:reset value ="reset"/><br>10. <s:actionerror /> <s:actionmessage />11. </form>12. </body>注意这里的 <s:actionerror /> <s:actionmessage />用法表示出Action中的this.addActionError("the username repeated");字符串参数。
由于之前分析过很多类似的界面,这里不再赘述二、在spring框架中引入hibernate框架首先我引入spring框架,在其配置文件中,引入hibernate框架。