欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    使用SSH开发增删改查的综合用户管理例子.ppt

    • 资源ID:3470869       资源大小:2MB        全文页数:100页
    • 资源格式: PPT        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    使用SSH开发增删改查的综合用户管理例子.ppt

    创建新项目 用Struts 设计器制作前台业务流程 设计业务层功能 开发业务层和DAO 层代码 开发前台页面流程 整合Spring,Struts 和Hibernate 发布,运行,测试,使用SSH开发增删改查的综合用户管理例子,第一部分 创建新项目,创建新项目,创建Web 项目ssh2 加入 Struts 开发功能 使用Struts 工具开发 数据库student1 实现功能:对用户的增删改查 前台:需要加入增加,修改删除和查询用户所对应的页面 后台功能通过调用Struts Action 来完成,Struts 的Action 再委托给业务层StudentManager 类来完成 根据个人爱好的不同,你既可以先完成前台的页面,也可以先把后台的业务类写完整,或者是两个人分工的话一人负责一部分,创建Web 项目,选择菜单File New Web Project 在Project Name中输入ssh2 选中J2EE Specification Level下面的Java EE 5.0 单选钮 选择哪个版本的J2EE Specification Level 取决于你使用的服务器 Tomcat4,Weblogic 9 以下版本请选择J2EE 1.4 Tomcat 5,JBoss 4可以选择 Java EE 5.0 Java EE 5.0 可以直接使用 EL 表达式和JSTL 最后点击Finish按钮,加入 Struts 开发功能,项目根节点上右键点击,选择上下文菜单中的MyEclipse Add Struts Capabilities 或者选择菜单MyEclipse Project Capabilities Add Struts Capabilities 添加 Struts 功能对话框的默认值一般来说不需要修改就可以使用,点击单选钮 Struts 1.2 选择Struts 的版本为1.2 即可,添加Struts 功能对话框,指定了Struts 配置文件的存放位置,可选的Struts 的版本,指定了位于web.xml 中的Struts 核心Servlet 的名字,指定了将会交给Struts 控制的URL 类型,指定了生成 的类的默认包,指定了默认的国际化资源文件包,是否安装Struts 的标签库文件,添加了 Struts 的目录结构,Struts 1.2 的类库,struts-config.xml,Struts 的TLD 文件,验证器文件,在 src 目录下编写我们自己的类,第二部分 用Struts 设计器制作前台业务流程,软件开发的设计阶段,在实际项目开发中,第一步要做的可能是设计应用的整个流程,而不是立即着手制作JSP 或者编写Java 代码 做实际的项目开发,如果是大中型项目,思考项目到底该使用哪些技术和架构,用什么数据库和操作系统,最后应该实现成何种样子,有哪些模块,系统的工作流程如何等等,这些内容,相当于设计阶段,软件开发的设计阶段,对于我们要做的这个项目来说,具体的技术和系统结构已经选好,就是SSH 架构。那么现在,在加入Spring 整合功能之前,我们有必要把系统的表示层的工作流程搞清楚 做这个流程设计有很多办法,可以用画图工具例如Microsoft Visio,或者UML 建模工具开发一个活动图等等都可以。因为我们使用的是MyEclipse,所以我们这里可以用它自带的Struts 设计器快速的画出所有的应用流程来,Struts 配置文件编辑器,双击 WebRoot/WEB-INF/struts-config.xml 就可以打开Struts 配置文件编辑器 在设计器网格面板上点击右键,选择菜单来创建Action,Forward,JSP 等等 为了更好的反映系统的工作流程,我们还可以使用设计器工具栏上的 按钮来给一些页面加入连接关系,但是如果弹出对话框询问是否设置为Action 的input 元素时,我们选择No 按钮。大致来说,我们的应用需要增删改查四个模块,用户管理应用业务流程图,业务流程说明,需要说明的是为了便于编写一个默认的入口欢迎页面,方便用户的使用,我们已经把原来显示用户列表的index.jsp 重命名成了list.jsp。另外,到底这些功能该如何进行分工和组织,也没有绝对的标准,读者可以根据自己的需要或者习惯来进行分工和命名。例如,新建用户这个功能的命名可以是new,也可以起名为add 或者create。另外通用或者共用的Forward 路径可以设置成Global Forward,即全局转向,例如上图中所显示的所有到/error.jsp 的转向,可以统一定义为一个全局的名为error 的Forward,文档规范化,相比较于 Java 源代码来说,给JSP 页面加入一些文档比较困难些,因为Java 文件可以用Javadoc 格式的注释来加入并生成说明,但是JSP 没有这方面的规定和好用的文档工具 写必要的流程说明 便于自己核对是否全部页面都按照预期实现 方便自己或者别人日后对项目方便进行修改,升级和维护 软件开发本质上属于集体劳动,所以作为其中的一员,尽量不要只把系统的设计蓝图或者注意事项放在自己的脑子里,一定要想办法把它表示成可见的文档来便于大家的交流和日后维护。现在我们把JSP 页面的功能用表格的方式列出来,如下表所示:,Action 说明,还有个问题需要大家解决,就是进入修改和删除功能的Action 时,需要在URL 里以地址带参数的方式来传递到底是修改或者删除哪个用户 举个例子,修改用户我们用edit.do?id=1 这种形式。另外用户的ID 是不可修改的,因此如果表单里要传递这个参数,一般就以表单的hidden(隐藏)类型的输入域来表示,具体代码类似这样: ” 另外如果前台需要一些数据,后台可以通过request.setAttribute()方法来设置,前台则需要用request.getAttribute()方法或者EL 表达式来读取这些值,创建数据库,数据库:Student1 字段 Id:int 主键 Username:varchar(50) NOT NULL Password: varchar(20) NOT NULL Age: int,系统框架,到现在为止,应用的整个前台大框架已经确定,接下来就是考虑后台的业务层的功能了 我们已经确定要使用Spring + Hibernate 来完成后台功能。Struts 的Action 将会调用业务层,业务层再会去调用数据访问层和其它的一些辅助功能层(工具类或者第三方类库) 整个系统从横向分层就分成了下面的部分: 当然并没有人规定到底怎样分层才是完全正确的,表示层,控制层,业务层,数据访问层,辅助功能层,学习方法交流,系统分成一般来说大家可以按照软件工程书籍上的办法进行分层,然而更现实的却是大家都在按照自己公司的方式进行分层。 这时对于初学者来说必须避免的一个误区就是喋喋不休的对采用何种标准或者为什么教科书上所讲的东西和现实不一样或者说对于某个东西的原理进行一次次的争论,或者用大家熟悉的话来概括:钻牛角尖。 钻牛角尖表面看是勤奋好学,对某种内容具有韧性或者探索精神,然而我们却不得不面对这样一个场面:如果我们企图完全弄懂一个问题,就不得不把和它关联的问题也搞懂。但是尴尬的是,首先我们并不能无限制的得到任何自己需要的资料(大部分技术都是黑盒子,外人看不到内部实现的),另一方面,我们不得不承认人脑的记忆和理解是有限的这个现实。当你高高兴兴的以为自己弄懂了一个又一个问题时,最后却尴尬的发现似乎自己高兴过后只能记起其中的一两个(当然有个好办法就是把这些问题都记下来便于以后查找)。,学习方法交流,我想做程序员首先要有钻研精神,其次,也得有实用主义的精神。学技术,就是为了解决实际的问题的,如果你想为技术而技术,请先填饱肚子。遇到自己不会的东西怎么办?首先是能用就行,我们把它看成黑盒子就行了,就像用遥控器的人永远不需要还得懂红外线,集成电路,振荡器,发射器到底是怎么回事一样。说到这里似乎已经扯远了话题,然而看到过很多学生天天追求后台原理或者软件工程,然而却连简单的应用也作不出或者设计图都画不好。不是他们不努力,而是他们努力走向了另一个方向:钻研理论。 对于初学者,第一步要的就是:能用。其余的,在这基础之上才能去谈进一步提高。而且,在国内的现状就是,绝大多数人是开发应用(简单的说就是编写固定流程的东西),而不是深入软件的底层来做开发工具或者自己动手写或者改进虚拟机。,开发经验交流,对于这个项目来说,当前台的结构设计的差不多的时候,我们也可以转而先去做后台的业务层,将前台的功能进行提取,看看后台能不能先把大部分都实现了 这也是实际开发两人或者多人分工协作可能出现的情况,例如:一个写前台,一个写后台 当然我们并不是要让大家非得按照软件工程或者项目管理规范,把所有的文档都写好了才能真正开始编码,我们只需要让想法表示出来,就可以了 用代码来表示自己的想法,其实也是一种很不错的办法(一直备受赞扬的敏捷开发Agile,就是这样),第三部分 设计业务层功能,养成使用接口的习惯,对于业务层的设计,我们可以先写接口,然后再具体实现 当然直接写成类的方式也是没人禁止的,尤其是自己学习的时候也是很合适的做法 写接口就意味着我们并不需要写好具体的实现代码,所以设计阶段一般来说还是鼓励使用接口来做,这样大家只需要讨论好哪些功能需要,哪些不需要就行了 给这个接口加上足够多的注释(或者文档),进行业务层的具体设计,首先定义接口IStudentManager(这个以I 开头的名称来自于Eclipse 的源码中的定义接口的习惯,I 表示Interface,便于开发人员一眼看出这是个接口,当然请不要误会所有的接口必须以I 开头才能定义) 把它放在包service中,用来定义用户管理模块应有的功能。当然用manager 作为业务层的包还是别的名称都是无所谓的 显示用户列表时数据量大,需分页显示,分页部分的接口设计如下所示: public int getTotalCount(); / 得到用户总数 public int getTotalPage(int pageSize) ;/ 获取总页面数 public List findPagedAll(int currentPage, int pageSize);/ 分页显示数据,定义接口IStudentManager方法,本项目的主要功能是增删改查,结合我们前面所讨论的业务流程,并考虑到方法的参数和返回值等情况,我们一个个的定义这些功能所对应的方法声明 新建用户,我们定义一个方法即可,返回值告诉调用者是否保存成功。 public boolean save(Student student) 保存用户,我们前面的流程是首先通过ID 找到Student 对象,然后再保存更新,所以一共需要两个方法的定义: public Student findById(int id);/ 根据ID 查找 public boolean update(Student student);/ 更新用户对象,定义接口IStudentManager方法,删除用户,根据 ID 进行删除就可以了,所以定义一个方法即可,返回值同样是成功时返回true,其它情况下返回false public boolean delete(Student student) 查找用户,我们则只需要一个方法就可以了,在这里我们只提供根据用户名进行查找的功能,方法的参数是用户名,返回值则是包含找到的用户对象的列表,如果找不到的话就返回null public List findStudentByUsername(String username);,开发经验交流,至此,我们所有的初步设计工作都已完成了,下一步就可以着手进行详细设计了。但是因为这个项目相对比较规模小,所以我们接下来就进入具体的开发过程中 对于大型项目实际开发中一般会进行详细设计,要把所有的JSP 页面的样子画出来,每个类的UML 图也要画出来,以及每个页面和类的具体实现思路也得进行说明,例如:页面中加入的表单验证脚本代码,Action 类的工作流程,DAO 层采用何种技术实现等等(当然这里可以使用Spring 中的HibernateDaoSupport 或者HibernateTemplate) 不过实际开发中你会发现基本上所有的详细设计都会有纰漏或者错误之处,需要在开发过程中逐步进行必要的修改,开发经验交流,设计完成后,到底是先做前台页面还是先实现后台的功能类呢? 这个问题其实并无标准答案,全依赖于开发人员的习惯而决定 由于前面我们已经将业务层接口确定,所以如果假设这个项目有两个人进行开发的话,是可以分头进行的,只需要最后在Spring 配置文件中将接口的具体实现类指定就可以了 相对来说,这个项目的业务层代码比较简单,所以我打算先实现后台功能。前台的JSP,Struts 的部分则放在后面进行开发,第四部分 开发业务层和DAO 层代码,第四部分内容,添加Hibernate功能 添加Spring 功能 Spring 整合 Hibernate 用Spring 2.0 的aop 和tx 声明式配置解决事务提交问题 开发业务层,添加Hibernate功能,添加Hibernate功能,现在我们要把Hibernate功能添加到当前项目,这一步不反向工程生成DAO,因为我们最终的目的是使用Spring整合的Hibernate DAO 类,添加 Hibernate Capabilities,添加 Hibernate 类库 (JARs) 到项目的类路径 在项目中创建并配置 hibernate.cfg.xml 在项目中创建自定义的 Session Factory 类来简化 Hibernate 会话处理 添加 Hibernate 功能的步骤: 在Package Explorer 中选择 ssh2 项目 从 MyEclipse 菜单栏选择MyEclipse Project Capabilities Add Hibernate Capabilities . 来启动 Add Hibernate Capabilities 向导,Add Hibernate Capabilities向导,选择Hibernate 类库版本,可以添加到项目的构造路径的类库集合,选中的类库将会添加到项目的构造路径中, 但相应的JAR 文件将不会复制到项目中. 这些 JAR 文件 会在发布程序时复制,选中的类库 JAR 文件将会被复制到项目并添加到构造路径中去(这个方式在开发不依赖于MyEclipse 的项目的时候,或者解决JAR 包冲突的时候很有用),此处选用复制的方式,相对于现在项目的路径, 可以新建或者使用现有目录,Hibernate 类库将会被向导复制到这里,创建Hibernate XML 配置文件,上页选择Next 按钮前进到本页创建 Hibernate XML 配置文件,选择数据库连接,如果不想现在就设置数据库连接属性,去掉复选框即可跳过,选择以前创建好的数据库连接,相关的连接信息将会自动填入到对话框中,选中后则会自动加入相应的数据库驱动类库jar 文件到项目的类路径中,如果选中,那么Hibernate 将会自动根据映射文件来动态生成建表语句然后执行,然而这种方法不是很可靠,所以一般来说不要用,创建SessionFactory,这一页选择是否生成Session Factory 类,去掉复选框Create SessionFactory class?的选中状态,最后点击Finish 按钮完成整个添加过程,向导结束后将进行的操作,如果在第一页选择了复制类库到你的项目, 将复制 Hibernate 类库 (JARs) 到项目中 更新项目的构造路径来包含已安装的 Hibernate 类库 给项目创建并配置 hibernate.cfg.xml 文件,添加Spring 功能,给项目加入Spring 功能,项目创建完毕后就可以加入 Spring 开发功能了。要给项目添加Spring 功能,请按照下面的步骤进行: 在Package Explorer 视图中选择 ssh2项目; 接下来, 从 MyEclipse 菜单栏选择MyEclipse Project Capabilities Add Spring Capabilities . 来启动 Add Spring Capabilities 向导,对于这个项目来说,你可以直接点击Finish 按钮就行了,加入Spring 功能向导对话框的第1页,Spring 版本,一般选择Spring 2 单选钮,选择要加入项目类路径的类库,点击此链接可以修改类库设置,选择JAR 类库的安装方式,上面的单选钮只 是把引用的类库加入类路径,下面的则需要 指定一个目录把所有的JAR 文件和标签文件 加入到当前项目中,这种方式适用于不依赖 MyEclipse 进行开发或者手工管理类库,当选中了 Spring Web 的时候需要指定标签 库文件的安装目录,注意有些Myeclipse 的该窗口没有 Spring2.0 ORM/DAO/hibernate3 libraries类库, 要在添加完后手动添加,添加方法 Build path add libraries,加入Spring 功能向导对话框的第2页,创建Spring bean 定义文件,可以修改Spring 配置文件的名字(修改Folder 和File 选项),加入Spring 功能向导对话框的第3页,配置一个使用现有Hibernate配置文件的Spring下的LocalSessionFactory,采用默认的sessionFactory就可以了,Spring 整合 Hibernate,使用反向工程快速生成Java POJO 类,映射文件和DAO,术语解释 DAO 是Data Access Object,数据访问对象的缩写 POJO 是Plain and Old Java Object,普通和旧式的Java 对象的缩写,也就是普通Java 类的意思 打开MyEclipse Database Explorer透视图 点击工具栏上的点击 按钮可以显示多个透视图供切换 Window Open Perspective Other MyEclipse Database Explorer来显示打开透视图对话框,DB Browser 视图创建连接,点右键,选择New,启动反向工程向导,点右键,选择Open Connection,Hibernate 反向工程向导第 1 页,Spring 整合Hibernate 的项目文件内容,StudentDAO,StudentDAO类继承自HibernateDaoSupport,该类来自于Spring,它提供了获取HibernateTemplate 的方法:getHibernateTemplate(),这个DAO 也实现了保存,删除,查找实体类的方法,在此需要加入对应业务处理的分页和更新功能 public int getTotalCount() public List findPagedAll(int currentPage, int pageSize) public void update(Student1 transientInstance) public List findByUsername(Object username) 另外,它还缺少必要的功能:事务处理,用Spring 2.0 的aop 和tx 声明式配置解决事务提交问题,修改applicationContext.xml,Spring 1.2 方式的事务代理是非常繁琐的,现在我们用Spring 2.0 的声明式事务来完成。将上面的applicationContext.xml 将其内容修改为如下所示, “注意这里根据文件位置来定” ,测试并运行,写一个测试类 Spring2TransactionDAOTest.java,来测试这个新的基于声明式的AOP 配置文件,public class Spring2TransactionDAOTest public static void main(String args) ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext2.xml“); Student1DAO dao = (Student1DAO)ctx.getBean(“StudentDAO“); Student1 user = new Student1(); user.setPassword(“密码“); user.setUsername(“spring 2 事务代理测试“); user.setAge(new Integer(200); dao.save(user); ,运行结果: Exception in thread “main“ java.lang.ClassCastException: $Proxy1 cannot be cast to dao.Student1DAO at dao.Spring2TransactionDAOTest.main( Spring2TransactionDAOTest.java:13),这是什么原因呢?Spring 2.0 的文档中明明不是说它的AOP 可以自动根据要代理的类的类型来选择是基于JDK 的接口代理还是CGLib 的类代理嘛?然而没有办法,出错了,也许这是Spring 的一个Bug 吧,修改代码,现在只好按照要求,把类加入一个接口定义,先修改 Student1DAO.java,让它实现一个接口IStudentDAO:,public class Student1DAO extends HibernateDaoSupport implements IStudentDAO,编写接口,写一个接口IStudentDAO(可以通过重构功能来生成,选择菜单Refactory Extract Interface,在对话框的Interface name 处输入IStudentDAO,然后选中对话框中需要加入到接口中的方法列表,最后点击Finish 按钮即可,import java.util.List; public interface IStudentDAO / property constants public static final String USERNAME = “username“; public static final String PASSWORD = “password“; public static final String AGE = “age“; public abstract void save(Student1 transientInstance); public abstract void delete(Student1 persistentInstance); public abstract Student1 findById(java.lang.Integer id); public abstract List findByExample(Student1 instance); public abstract List findByProperty(String propertyName, Object value); public abstract List findByUsername(Object username); public abstract List findByPassword(Object password); public abstract List findByAge(Object age); public abstract List findAll(); public abstract Student1 merge(Student1 detachedInstance); public abstract void attachDirty(Student1 instance); public abstract void attachClean(Student1 instance); ,再次测试并运行,这时候对应的 Spring2TransactionDAOTest.java 里面的代码已经自动变成了:IStudentDAO dao = (IStudentDAO)ctx.getBean(“StudentDAO“); 再次运行测试类Spring2TransactionDAOTest,然后检查数据库,可以很高兴的看到数据已经插入进来了 这里会出现异常 关于主键是否自增长的问题通过修改student.hbm.xml ,开发业务层,开发StudentManager类代码,创建前面设计好的IStudentManager接口 修改或者新建类service.StudentManager,来实现先前定义的IStudentManager 接口中的功能 为了便于使用Spring 整合,我们将其中的DAO层设置成一个属性dao,通过方法getDao()和setDao()定义,类型为dao.Student1DAO。业务层的绝大部分功能都是委托给dao 来实现的,而对于那些需要返回布尔值来确定是否操作成功的方法,我们用try-catch 语句来实现这样的需求,即:没有异常时返回true,否则返回false,- private IStudentDAO dao; public int getTotalCount() return dao.getTotalCount(); public int getTotalPage(int pageSize) int totalCount = getTotalCount(); / 得到页面总数 int totalPageCount = (totalCount + pageSize) - 1) / pageSize; return totalPageCount; public List findPagedAll(int currentPage, int pageSize) return dao.findPagedAll(currentPage, pageSize); - public IStudentDAO getDao() return dao; public void setDao(IStudentDAO dao) this.dao = dao; ,因为这个类需要访问底层的数据库,在这里可以通过Spring 来设置对应的DAO 类的实例,因此我们还要在Spring 的配置文件applicationContext.xml 中加入下面的bean 配置:,测试并运行业务层,编写测试类test.StudentBizTest.java,package test; public class StudentBizTest public static void main(String args) ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml“); IStudentManager studentBiz = (IStudentManager)ctx.getBean(“studentBiz“); List studentList = studentBiz.findPagedAll(1, 3); System.out.println(“每页三行,第一页数据:“ ); for(Student1 student :studentList) System.out.println(“姓名:“ + student.getUsername()+“密码:“ + student.getPassword(); ,与前例类似,studentManager需要抽象出接口IStudentManager,运行这个类,得到如下的输出: log4j:WARN No appenders could be found for logger (org.springframework. context.support.ClassPathXmlApplicationContext). log4j:WARN Please initialize the log4j system properly. Hibernate: select top 3 student1x0_.id as id0_, student1x0_.Username as Username0_, student1x0_.Password as Password0_, student1x0_.Age as Age0_ from myssh.dbo.student1 student1x0_ 每页三行,第一页数据: 姓名:dd大多数 密码:1234 姓名:spring dao 密码:pa 姓名:spring dao2 密码:pa2,第五部分 开发前台页面流程,前台如何开发,前面我们已经完成了必要的功能设计,在此阶段给以编码实现 对于我们来说,按照业务流程说明表中的流程进行开发,遇到JSP,就创建或者修改JSP页面;遇到.do,就根据用户管理应用业务流程图流程开发或者修改Action类。这样一个流程一个流程的开发,最后再进行测试,就可以完成了 下面我们重温业务流程说明及用户管理应用业务流程图,重温业务流程,需要说明的是为了便于编写一个默认的入口欢迎页面,方便用户的使用,我们已经把原来显示用户列表的index.jsp 重命名成了list.jsp。另外,到底这些功能该如何进行分工和组织,也没有绝对的标准,读者可以根据自己的需要或者习惯来进行分工和命名。例如,新建用户这个功能的命名可以是new,也可以起名为add 或者create。另外通用或者共用的Forward 路径可以设置成Global Forward,即全局转向,例如上图中所显示的所有到/error.jsp 的转向,可以统一定义为一个全局的名为error 的Forward,重温用户管理应用业务流程图,开发前台代码,具体的编码过程不再赘述,按照流程创建一个个JSP页面,最后再修改后台的Action类代码 需要提示大家的是,像EditAction这样的功能的写法,需要根据ID查找一个用户然后传递给前台进行修改,虽然没有明确的在设计图中反映出来,如果不幸找不到用户信息的话,务必需要告诉使用人员要修改的用户找不到,可以转向到/error.jsp进行显示。接下来要做的就是先将传递过来的字符串类型的ID参数通过Integer.parseInt(String)方法转换成int,然后再将通过后台业务层(也即IStudentManager)找到的用户信息通过request对象设置属性传递给前台的JSP页面,前台页面则使用EL表达式加以显示。 实现过程中一定要全面考虑到客户端验证(JavaScript表单验证)和服务器端验证(在Action类中进行必要的数据验证),,解决中文问题,加入解决中文字符编码的过滤器TomcatFormFilter 在web.xml中进行配置 http:/blog.csdn.net/goodbyideal/archive/2006/04/25/676039.aspx,加入日志功能,因为Spring 用了LOG4J 做出错信息的输出,虽然后台有很多的真实出错信息,然而在这里却是看不到的。所以需要加入日志处理功能 在src 目录下创建配置文件,选择菜单File New File,文件名输入log4j.properties,文件内容如下所示:,log4j.rootLogger=WARN, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p %c - %m%n,项目ssh2源代码目录结构,表单验证脚本代码,文件 js/form.js 是抽取出来公用的表单验证功能的脚本代码,其代码清单如下所示:,function checkForm(form) / 验证表单输入不为空的脚本代码 if(form.username.value = “) alert(“用户名不能为空!“); form.username.focus(); return false; - / 确保年龄有效并在 0 120之间 if(isNaN(parseInt(form.age.value) | form.age.value 120) alert(“请输入有效的年龄!“); form.age.focus(); return false; return true; ,开发error.jsp, 出错了! 出错了! 详细信息是: $message 返回 ,出错的信息可以放在 request 的attribute 里面,例如调用request.setAttribute(“message”,” 出错了!”);之后相关的出错信息就可以显示在这个页面中。另外还提供了一个返回链接让用户能够回去继续操作,第一个流程 index.jsplist.do,index.jsp源码分析, 欢迎使用用户管理系统 查看用户列表 ,大家通过查看运行时的HTML源代码就可以看到其输出是:,这句话可以让我们的页面总能正确找到引用的图片,CSS等外部资源。假设页面有个图片写着:,那么即使这个页面的内容通过forward变成了/ssh2/user/welcome.do,而图片依然会从地址http:/localhost:8080/ssh2/gif/a.gif 来读取,点击超链接,浏览过去的是显示分页的Struts 的控制器ListAction.java,ListAction.java代码,/* 分页显示用户信息 */ public class ListAction extends Action public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) / 分析当前页码 String pageString=request.getParameter(“page“); if(pageString = null | pageString.length() = 0) pageString = “1“; int currentPage= 0 ; try currentPage = Integer.parseInt(pageString);/ 当前页码 catch(Exception e) if(currentPage = 0) currentPage = 1; int pageSize = 3;/每页显示的数据数 / 读取数据 List users = manager.findPagedAll(currentPage, pageSize);,request.

    注意事项

    本文(使用SSH开发增删改查的综合用户管理例子.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开