高级WEB技术课程 Struts Hibernate Spring项目建设教程 目名称 SSHDEMO用户登录系统 版本 Version. 1 时间 2013年3月11日至2013年3月15日 老师 戴开宇 撰写人吉亚云 联系方式|Te:13764010311 Mail: 11212010013@fudan educn Addr:复旦大学软件楼109室
1 高级 WEB 技术课程 Struts Hibernate Spring 项目建设教程 项目名称 SSHDEMO-用户登录系统 版本 Version.1 时间 2013 年 3 月 11 日 至 2013 年 3 月 15 日 老师 戴开宇 撰写人 吉亚云 联系方式 Tel : 13764010311 Mail: 11212010013@fudan.edu.cn Addr: 复旦大学软件楼 109 室
第一章项目准备 1.1开发环境 开发DE: My Eclipse8x或以上,JDK1.5或以上。 数据库: My SQL5.5或以上, mysql-connector-java-51.23jar 框架版本: Struts2.0, Hibernate3X, Spring3x Web服务器: Tomcat60。 注意:数据库同学们不一定要使用Msα,也可以使用 Oracle等其他关系数据库管理系统软 件,我们会在配置 Hibernate的时候讲解与其他数据库软件如何配置 软件下载地址列表 yecLipsehttp://pt.vm.fudan.edu.cn/index.php?topic=1452.msg7635:highlight=myeclipse#tmsgz 635同学们可以直接在学校PT上直接下载 JDK http://www.oracle.com/technetworkliava/liavase/downloads/index.html My SQL http://www.mysgl.com官网下载。 MysqljdBcHttP://dev.mysql.com/downloads/connector/ia∠MsQL官网下载。 Struts http://struts.apacheorg/download.cgifstruts238 Hibernate http://www.hibernate.org http://www.springsource.org Tomcat nttp. tomcat. apache.org/ 1.2新建项目 这个SSH示例项目是一个简单的用户登录系统。首先,我们打开 MyEclipse新建一个Web项 目,项目名称为 SSHDemo。 操作: MyEclipse菜单->Fie->NeW-> Web Projecto 2EE版本:根据自己机器上安装的实际版本而定 2
2 第一章 项目准备 1.1 开发环境 开发 IDE:MyEclipse 8.x 或以上,JDK 1.5 或以上。 数据库:MySQL 5.5 或以上 , mysql-connector-java-5.1.23.jar。 框架版本:Struts2.0,Hibernate3.X,Spring 3.x。 Web 服务器:Tomcat 6.0。 注意:数据库同学们不一定要使用 MySQL,也可以使用 Oracle 等其他关系数据库管理系统软 件,我们会在配置 Hibernate 的时候讲解与其他数据库软件如何配置。 软件下载地址列表: MyEclipse http://pt.vm.fudan.edu.cn/index.php?topic=1452.msg7635;highlight=myeclipse#msg7 635 同学们可以直接在学校 PT 上直接下载。 JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html MySQL http://www.mysql.com/ 官网下载。 MySQL JDBC http://dev.mysql.com/downloads/connector/j/ MySQL 官网下载。 Struts http://struts.apache.org/download.cgi#struts238 Hibernate http://www.hibernate.org/ Spring http://www.springsource.org/ Tomcat http://tomcat.apache.org/ 1.2 新建项目 这个 SSH 示例项目是一个简单的用户登录系统。首先,我们打开 MyEclipse 新建一个 Web 项 目,项目名称为 SSHDemo。 操作:MyEclipse 菜单-> File-> New ->Web Project。 J2EE 版本:根据自己机器上安装的实际版本而定
d Create a Web Project Create a web project in the workspace or an external location Web Project details Directory. D: \SRCCODE\javacode\ SSHDemo Web root folder: WebRoot Context root URL: /SSHDemo 2EE Specification Level o Java EE50◎EE14◎卫EE13 JSTL Support L Add JSTL libraries to WEB-INF/lib folder? Back Next> L Cancel 我们将 SSHDemo发布到 Tomcat中,在 Myeclipse中启动 Tomcat,然后在浏览其中输入项 目地址预览它的indexjsp项目地址:httplocalhost8080/sshdemo/iNdex.iSp这样我们就新建 好了一个空的Web项目 13创建数据库 安装MySQ50以上的版本,会自带 MySQL的图形界面操作软件 MySQL Workbench。我们新 建一个数据库sh。并创建一个用户数据库表 CREATE DATABASE /*132312 IF NOT EXISTS*/ssh/*!40100 DEFAULT CHARACTER SET utf8*/; USE'ssh
3 我们将 SSHDemo 发布到 Tomcat 中,在 Myeclipse 中启动 Tomcat,然后在浏览其中输入项 目地址预览它的 index.jsp。项目地址: http://localhost:8080/SSHDemo/index.jsp 。这样我们就新建 好了一个空的 Web 项目。 1.3 创建数据库 安装 MySQL5.0 以上的版本,会自带 MySQL 的图形界面操作软件MySQL Workbench。我们新 建一个数据库 ssh。并创建一个用户数据库表。 CREATE DATABASE /*!32312 IF NOT EXISTS*/`ssh` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `ssh`;
/*Table structure for table user*/ DROP TABLE IF EXISTS user CREATE TABLE user'( user id'int(11)NOT NULL AUTO INCREMENT COMMENT'AHFID user name' varchar(20) NOT NULL DEFAULT ' New User COMMENT用户名称, user_ password varchar(20) NOT NULLCOMMENT"用户密码 user address varchar(100) DEFAULT NULLCOMMENT'用户地址 user mail varchar(100) DEFAULT NULL COMMENT用户邮箱 user telephone varchar((20) DEFAULT NULL COMMENT用户电话 PRIMARY KEY User id). UNIQUE KEYname unique (user name) ENGINE=InnoDB DEFAULT CHARSET=utf8 INSERT INTO ssh user User id, user name,user password,user address, user mail usertelephone)VALUES(NULL,'alice123456,'fudanuniversity,'alice@gmail.com,13764010311) INSERT INTO'sSh. user User id, user name, user_ password, user address, user_ mai usertelephone)VaLUES(NULL,john,123456,fudanuniversity,john@gmail.com,13764010311) 第二章 Struts使用 1添加 struts框架 基于大家已经学过,基础WEB开发。接下来,我们将 Struts框架到项目中 操作:工程名 SSHDemo,右键菜单> My Eclipse→ Add Struts Capabilities
4 /*Table structure for table `user` */ DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `user_id`int(11) NOT NULL AUTO_INCREMENT COMMENT '用户 ID', `user_name` varchar(20) NOT NULL DEFAULT 'New User' COMMENT '用户名称', `user_password` varchar(20) NOT NULL COMMENT '用户密码', `user_address` varchar(100) DEFAULT NULL COMMENT '用户地址', `user_mail` varchar(100) DEFAULT NULL COMMENT '用户邮箱', `user_telephone` varchar(20) DEFAULT NULL COMMENT '用户电话', PRIMARY KEY (`user_id`), UNIQUE KEY `name_unique` (`user_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `ssh`.`user` (`user_id`, `user_name`, `user_password`, `user_address`, `user_mail`, `user_telephone`) VALUES (NULL, 'alice', '123456', 'fudan university', 'alice@gmail.com', '13764010311'); INSERT INTO `ssh`.`user` (`user_id`, `user_name`, `user_password`, `user_address`, `user_mail`, `user_telephone`) VALUES (NULL, 'john', '123456', 'fudan university', 'john@gmail.com', '13764010311'); 第二章 Struts 使用 2.1 添加 struts 框架 基于大家已经学过,基础 WEB 开发。接下来,我们将 Struts 框架到项目中。 操作:工程名 SSHDemo,右键菜单-> MyEclipse-> Add Struts Capabilities…
File Edt Source Refacer Navigate Search Project Run MEtlpm wndaw He 国·1、02·2·日。·9d留·国·炉·0-91·④·留·b 中中 d甲 F4 Chl+CEOpeninBplore py Qualied Name Add and Remove Prgect Deployments, 某上品回 Comementhimwy/eem. n. jdkwn3251003imD如331下午03 tSh的+5 Add JSR 168 Poake Capablities Asgn Worting sets. Generate UMLZ CLsss Digram. A Add Struts Capabilities Struts Support for My Eclipse web Project Enable project for Struts development Web project: SSHDemo cb-root folder: /WebRoot Servlet specification: 25 Struts config path: /WEB-INF/struts-config xml Struts specification: O Struts l1 o Struts 1.2 Struts 13 Struts 2.1 ction Servlet name. URL pattem: odo /do/ struts Default application com fdu. struts. ApplicationResources v Install Struts TLDs View libranes. Back Next> 5
5
这里 Struts版本:选择Stts12。关于 Struts版本的区别会在第七章讲到。在Base package for new classes中用自定义的名称(fdu取代原来的 yourcompany L SSHDemo ≥ myeclipse struts e bean servce B Application Resources CN properties E Application ResourcesEN- properties c WebRoot C META-INF 色WEB-INF e classes eib x,struts-configmex r struts-config xml T struts-htmltld T' struts-logictld T struts-nested tld T' struts-tilestld x validator-rules xml xT web. xml 了 login_failed jsp 了 login_ succeed. jsp J login. jsp x. metadata X.mystrutsda 然后我们在 struts目录下,添加 action、form、 service、bean、dao等分层目录 2,2 Struts基本开发 2.21创建登录页面 首先,我们在 WebRoot目录下创建一个用户登录页面 login. jsp。该页面只有一个简单的用 户登录表格
6 这里 Struts 版本:选择 Struts 1.2。关于 Struts 版本的区别会在第七章讲到。在 Base package for new classes 中用自定义的名称(fdu)取代原来的 yourcompany。 然后我们在 struts 目录下,添加 action、form、service、bean、dao 等分层目录。 2.2 Struts 基本开发 2.2.1 创建登录页面 首先,我们在 WebRoot 目录下创建一个用户登录页面 login.jsp。该页面只有一个简单的用 户登录表格
UserName Password 页面显示效果为 Welcome to JIYAYUn Bank! PassWord 同时我们编写一个简单的登录成功页面 login_ succeed jsp和登录失败页面 login failed. jsp 2.22创建 User Action Form 接下来,我们在form目录下建立一个 UserForm java文件。 UserForm类继承 struts框架的 Action Form类。具体如下: import org. apache struts action. ActionForm public class UserForm extends ActionFormi private string username; private string password //get and set methods 注意:1)这里的 User form的属性 username和 password名称需要和 Ilogin jsp中的name保持一致 2)需要给这两个属性实现get和set方法 7
7 Welcome to Alice Bank! UserName: Password: 页面显示效果为: 同时我们编写一个简单的登录成功页面 login_succeed.jsp 和登录失败页面 login_failed.jsp。 2.2.2创建 UserActionForm 接下来,我们在 form 目录下建立一个 UserForm.java 文件。UserForm 类继承 struts 框架的 ActionForm 类。具体如下: import org.apache.struts.action.ActionForm; public class UserForm extends ActionForm{ private String username; private String password; //get and set methods … } 注意: 1) 这里的UserForm的属性username和password名称需要和login.jsp中的name保持一致。 2) 需要给这两个属性实现get和set方法
2.23创建用户 Action 然后,我们在 action目录下建立一个 UserAction. java文件。 UserAction类继承 struts框架的 DispatchAction类 在使用 Struts动作时,每一个 Action都需要编写一个类,并且要在 struts-config xm进行配 置。这对于一个拥有很多 Action的Web程序来说,工作量是非常大的。为此, Struts提供了 DispatchAction类,这个类允许将一个 Action作为一个方法来调用。在web浏览器中通过请求参数 来指定要调用的动作。虽然 DispatchAction类是一个抽象类,但其中却没有一个抽象方法。因此, DisplatchAction的子类不用实现任何 DisplatchAction类中的方法。但如果要处理 Action代码,就必 须根据相应的 Action来编写 Action方法。一个 Action方法除了方法名和 execute方法不一样外,其 他的都和 execute方法完全一样。但编写 Action方法时要注意, Action方法名必须和用于指定动作 的请求参数值一致(大小写也必须一致)。在下面的例子中演示了通过 DispatchAction类实现方法 和 Action的对应 方法名称可自定义,但方法的参数需要和 DispatchAction类的 execute方法参数一致。 import org. apache struts actions. DispatchAction; public class UserAction extends DispatchAction i public ActionForward login(ActionMapping mapping, ActionForm form, Httpservletrequest request htTpservletresponse response throws Exception User Form user Form=(UserForm) formi String userName=user Form. getUsername() String password=userForm getPassword)i if( equals(userName)&&!""equals(password &&"alice"equals(userName)&&123456.equals(password))i return mapping. findForward("loginsucceed")i Else return mapping. findForward("loginFailed")i public ActionForward logout(ActionMapping mapping, ActionForm form, Httpservletrequest request Httpservletresponse response throws Exception //TODO return mapping. findForward("index")i 这里我们实现用户的两个操作用户登录和登出,这里仅作简单的验证,用户名和密码不为空,且默认为 alice用户登录
8 2.2.3 创建用户 Action 然后,我们在action目录下建立一个UserAction.java文件。UserAction类继承struts框架的 DispatchAction类。 在使用Struts 动作时,每一个Action 都需要编写一个类,并且要在struts-config.xml 进行配 置。这对于一个拥有很多Action 的Web 程序来说,工作量是非常大的。为此,Struts 提供了 DispatchAction 类,这个类允许将一个Action 作为一个方法来调用。在Web 浏览器中通过请求参数 来指定要调用的动作。虽然DispatchAction 类是一个抽象类,但其中却没有一个抽象方法。因此, DisplatchAction的子类不用实现任何DisplatchAction 类中的方法。但如果要处理Action 代码,就必 须根据相应的Action 来编写Action 方法。一个Action 方法除了方法名和execute 方法不一样外,其 他的都和execute 方法完全一样。但编写Action 方法时要注意,Action 方法名必须和用于指定动作 的请求参数值一致(大小写也必须一致)。在下面的例子中演示了通过DispatchAction 类实现方法 和Action的对应。 方法名称可自定义,但方法的参数需要和DispatchAction类的execute方法参数一致。 import org.apache.struts.actions.DispatchAction; public class UserAction extends DispatchAction{ public ActionForward login(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception{ UserForm userForm=(UserForm)form; String userName=userForm.getUsername(); String password=userForm.getPassword(); if(!"".equals(userName)&&!"".equals(password) &&"alice".equals(userName)&&"123456".equals(password)){ return mapping.findForward("loginSucceed"); }else{ return mapping.findForward("loginFailed"); } } public ActionForward logout(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception{ //TODO ... return mapping.findForward("index"); } } 这里我们实现用户的两个操作用户登录和登出,这里仅作简单的验证,用户名和密码不为空,且默认为 alice 用户登录
2.24配置 Struts文件 我们打开 struts的配置文件 struts-config. xml,,该文件在 WebRoot>WEB-NF目录下。然后 将我们刚刚写的 User form和 UserAction配置起来。 标签中的属性含义描述如下: name:表示 Ac tionForm的名称。也就是标签中的name属性的值 path:表示 Struts动作,必须以“/”开头 scope:表示 Action form类的对象实例(在本例中是 UserForm类的对象实例)保存的范 围。这个属性值只能取 request和 session。默认值是 session。如果 scope的值为 request,表示将 UserForm类的对象实例以 User Form作为键值保存到了 request的属性 中。如果 scope的值为 sessi on,表示不将 User Form类的对象实例保存到 reques t的属 性中。但不管 scope的值是 request还是 session. struts都会将 User form类的对象实 例保存到 session的属性中 type:表示 UserAct ion类的全名 aid:表示是否使用 Struts的验证框架。 input:表示如果客户端提交的数据未通过简单验证后要跳转到的页面,也就是在 Userforr类的 validate方法中返回的 Ac tionerrors对象中含有错误描述信息。 Struts 会自动跳转到 Input属性所指的JSP页面 ·标签中的子标签定义了可以在动作类(在本例中就是 UserForm类) 中读取的 forward页的URL 2.2.5测试运行 我们重新发布这个项目,启动 Tomcat服务器。 在浏览器中输入地址:htp:/ localhost:8080/ SSHDemo/ ndex s进入 index. jsp页面。 Welcome to alice bank Please Login 9
9 2.2.4 配置 Struts 文件 我们打开 struts 的配置文件 struts-config.xml,该文件在 WebRoot->WEB-INF 目录下。然后 将我们刚刚写的 UserForm 和 UserAction 配置起来。 标签中的属性含义描述如下: • name:表示 ActionForm 的名称。也就是标签中的 name 属性的值。 • path:表示 Struts 动作,必须以“/”开头。 • scope:表示 ActionForm 类的对象实例(在本例中是 UserForm 类的对象实例)保存的范 围。这个属性值只能取 request 和 session。默认值是 session。如果 scope 的值为 request,表示将 UserForm 类的对象实例以 UserForm 作为键值保存到了 request 的属性 中。如果 scope 的值为 session,表示不将 UserForm 类的对象实例保存到 request 的属 性中。但不管 scope 的值是 request 还是 session。Struts 都会将 UserForm 类的对象实 例保存到 session 的属性中。 • type:表示 UserAction 类的全名。 • valid: 表示是否使用 Struts 的验证框架。 • input:表示如果客户端提交的数据未通过简单验证后要跳转到的页面,也就是在 UserForm 类的 validate 方法中返回的 ActionErrors 对象中含有错误描述信息。Struts 会自动跳转到 input 属性所指的 JSP 页面。 • 标签中的子标签 定义了可以在动作类(在本例中就是 UserForm 类) 中读取的 forward 页的 URL。 2.2.5 测试运行 我们重新发布这个项目,启动 Tomcat 服务器。 在浏览器中输入地址:http://localhost:8080/SSHDemo/index.jsp 进入 index.jsp 页面
登录页面,输入aice和123456: Welcome to alice bank 提交后成功登录 Welcome to alice bank You ve Logined in Successfully, and We will award you with 100 million RMB. Oyeah. 23 Struts功能应用 2.3.1 Struts标签 Struts框架本身提供 Struts标签,共分为以下几种bean、htm、 logic、 nested和tles。 9 struts-beant 3 struts-config-xml Tr struts-html tld T'struts-logictld struts-nested tld struts-tiles tld 现在我们尝试使用它的bean和htm标签,修改登录页面。首先将标签库引入到页面中: UserName
10 登录页面,输入 alice 和123456: 提交后成功登录: 2.3 Struts 功能应用 2.3.1 Struts 标签 Struts 框架本身提供 Struts 标签,共分为以下几种 bean、html、logic、nested 和 tiles。 现在我们尝试使用它的 bean 和 html 标签,修改登录页面。首先将标签库引入到页面中: 然后使用 struts 的 Html 标签代替原来的 HTML 标签元素。 UserName: UserName: