版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、高级WEB技术课程Struts Hibernate Spring 工程建设教程工程名称SSHDEMO-用户登录系统版本Version.1 时间2021年3月11日 至2021年3月15日老师戴开宇撰写人吉亚云联系方式Tel :ail: 11212021013 Addr: 复旦大学软件楼109室工程准备开发环境开发IDE: MyEclipse 8.x 或以上, JDK 1.5 或以上。数据库: MySQL 5.5 或以上 , mysql-connector-java-5.1.23.jar。框架版本:Struts2.0, Hibernate3.X, Sp
2、ring 3.x。Web效劳器: Tomcat 6.0。注意:数据库同学们不一定要使用MySQL,也可以使用Oracle等其他关系数据库管理系统软件,我们会在配置Hibernate的时候讲解与其他数据库软件如何配置。软件下载地址列表: MyEclipse HYPERLINK :/ /index.php?topic=1452.msg7635;highlight=myeclipse l msg7635 :/ /index.php?topic=1452.msg7635;highlight=myeclipse#msg7635 同学们可以直接在
3、学校PT上直接下载。JDK HYPERLINK :/ oracle /technetwork/java/javase/downloads/index.html :/ oracle /technetwork/java/javase/downloads/index.html MySQL HYPERLINK :/ mysql / :/ mysql / 官网下载。MySQL JDBC HYPERLINK :/dev.mysql /downloads/connector/j/ :/dev.mysql /downloads/connector/j/ MySQL官网下载。Struts HYPERLINK :
4、//download.cgi l struts238 ://download.cgi#struts238 Hibernate HYPERLINK :/ / :/ / Spring HYPERLINK :/ / :/ / Tomcat HYPERLINK :// :// 新建工程这个SSH例如工程是一个简单的用户登录系统。首先,我们翻开MyEcli
5、pse新建一个Web工程,工程名称为SSHDemo。操作:MyEclipse 菜单 - File- New -Web Project。J2EE版本:根据自己机器上安装的实际版本而定。我们将SSHDemo发布到Tomcat中,在Myeclipse中启动Tomcat,然后在浏览其中输入工程地址预览它的index.jsp。工程地址: HYPERLINK :/localhost:8080/SSHDemo/index.jsp :/localhost:8080/SSHDemo/index.jsp 。这样我们就新建好了一个空的Web工程。创立数据库安装MySQL5.0以上的版本,会自带MySQL的图形界面操
6、作软件 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 用户ID, user_name varchar(20) NOT N
7、ULL 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) EN
8、GINE=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, alicegmail ,;INSERT INTO ssh.user (user_id, user_name, user_password, user_address, user_mail, user_telephon
9、e) VALUES (NULL, john, 123456, fudan university, johngmail ,;Struts使用2.1 添加struts框架基于大家已经学过,根底WEB开发。接下来,我们将Struts框架到工程中。操作:工程名SSHDemo,右键菜单- MyEclipse- Add Struts Capabilities这里Struts版本:选择Struts 1.2。 关于Struts版本的区别会在第七章讲到。在Base package for new classes 中用自定义的名称 (fdu)取代原来的yourcompany。然后我们在s
10、truts目录下,添加action、form、service、bean、dao等分层目录。2.2 Struts根本开发2.2.1 创立登录页面首先,我们在WebRoot目录下创立一个用户登录页面login.jsp。该页面只有一个简单的用户登录表格。Welcome to Alice Bank! UserName: Password: 页面显示效果为:同时我们编写一个简单的登录成功页面login_succeed.jsp和登录失败页面login_failed.jsp。2.2.2 创立User ActionForm接下来,我们在form 目录下建立一个UserForm.java 文件。UserForm
11、类继承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.2.3创立用户Action然后,我们在action目录
12、下建立一个UserAction.java文件。UserAction类继承struts框架的DispatchAction类。在使用Struts 动作时,每一个Action 都需要编写一个类,并且要在struts-config.xml 进行配置。这对于一个拥有很多Action 的Web 程序来说, 工作量是非常大的。为此, Struts 提供了DispatchAction 类,这个类允许将一个Action 作为一个方法来调用。在Web 浏览器中通过请求参数来指定要调用的动作。虽然DispatchAction 类是一个抽象类,但其中却没有一个抽象方法。因此,DisplatchAction的子类不用实
13、现任何DisplatchAction 类中的方法。但如果要处理Action 代码,就必须根据相应的Action 来编写Action 方法。一个Action 方法除了方法名和execute 方法不一样外,其他的都和execute 方法完全一样。但编写Action 方法时要注意,Action 方法名必须和用于指定动作的请求参数值一致大小写也必须一致。在下面的例子中演示了通过DispatchAction 类实现方法和Action的对应。方法名称可自定义,但方法的参数需要和DispatchAction类的execute方法参数一致。import org.apache.struts.actions.Di
14、spatchAction;public class UserAction extends DispatchAction public ActionForward login(ActionMapping mapping, ActionForm form, ServletRequest request, ServletResponse response) throws Exception UserForm userForm=(UserForm)form; String userName=userForm.getUsername(); String password=userForm.getPass
15、word(); 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, ServletRequest request, ServletResponse respons
16、e) throws Exception /TODO . return mapping.findForward(index);这里我们实现用户的两个操作用户登录和登出,这里仅作简单的验证,用户名和密码不为空,且默认为alice用户登录。 2.2.4 配置Struts文件我们翻开struts的配置文件struts-config.xml,该文件在WebRoot-WEB-INF目录下。然后将我们刚刚写的UserForm和UserAction配置起来。 标签中的属性含义描述如下:name:表示ActionForm 的名称。也就是标签中的name 属性的值。path:表示Struts 动作,必须以“/开头
17、。scope:表示ActionForm 类的对象实例在本例中是UserForm 类的对象实例保存的范围。这个属性值只能取request 和session。默认值是session。如果scope 的值为request,表示将UserForm类的对象实例以UserForm作为键值保存到了request 的属性中。如果scope 的值为session,表示不将UserForm类的对象实例保存到request 的属性中。但不管scope 的值是request 还是session。Struts 都会将UserForm类的对象实例保存到session 的属性中。type:表示UserAction 类的全名
18、。valid: 表示是否使用Struts的验证框架。input:表示如果客户端提交的数据未通过简单验证后要跳转到的页面,也就是在UserForm类的validate 方法中返回的ActionErrors 对象中含有错误描述信息。Struts 会自动跳转到input 属性所指的JSP 页面。 标签中的子标签 定义了可以在动作类 在本例中就是UserForm类中读取的forward 页的URL。2.2.5测试运行我们重新发布这个工程,启动Tomcat效劳器。在浏览器中输入地址: HYPERLINK :/localhost:8080/SSHDemo/index.jsp :/localhost:808
19、0/SSHDemo/index.jsp 进入index.jsp页面。登录页面,输入alice 和 123456: 提交后成功登录:2.3 Struts功能应用2.3.1 Struts标签Struts框架本身提供Struts标签,共分为以下几种bean、html、logic、nested和tiles。现在我们尝试使用它的bean和html标签,修改登录页面。首先将标签库引入到页面中:然后使用struts的Html标签代替原来的HTML标签元素。 UserName: UserName: 2.3.2 Struts国际化处理为了方便的使一个页面多个不同语言的人都能看懂Struts提供了很好的国际化语言
20、处理解决方法。首先,我们删除了原来Struts添加时产生的ApplicationRperties文件,而是在src目录下新建了两个文件,如下列图所示。然后我们将这两个文件配置到struts-config.xml中。 这里的parameter是指语言文件所在的目录。然后我们修改登录页面为: : : 这里的用户名和密码都换掉成了,使用struts的bean标签的message元素。然后我们分别在ApplicationResourcesCN.properties文件和ApplicationResourcesEN.properties文件中,添加页面key所对应的键值对。和这样
21、,假设果你的浏览器语言是中文的,页面显示的就是中文,如果是英文的,那么显示英文页面。2.3.3 简单表格验证表格的验证可以由javascript做,但是那还是比拟烦的如果每个表格都要验证的话。Struts提供了很方便的验证框架。我们来试一下。我们需要验证,用户的用户名和密码不为空。那么我们只需要修改UserForm类即可,重写ActionForm的validate方法。Overridepublic ActionErrors validate(ActionMapping mapping, ServletRequest request) ActionErrors errors=new Action
22、Errors();if(username=null|.equals(username)errors.add(username,new ActionMessage(user.logininfo.form.no.username);if(password=null|.equals(password)errors.add(username,new ActionMessage(user.logininfo.form.no.password);return errors;然后再登陆页面添加错误显示标签。 这个标签所在的位置,错误信息就会显示在这个地方。 2.3.4 测试运行 我们重新发布系统,重启Tom
23、cat,重新翻开浏览器到登录页面。我们以空密码登录,然后页面响应为:Hibernate使用3.1 创立MyEclipse数据库驱动DB Driver操作:MyEclipse菜单- Window-Preferences-MyEclipse-Database Explorer-Drivers点击DB BrowserView 新建一个MySql数据库的DB Driver.Driver Name:mysql-testConnection URL:jdbc:mysql:/localhost:3306/ssh“Driver JARs添加“mysql-connector-java-5.1.4-bin.jar
24、“Driver classname选择“com.mysql.jdbc.Driver3.2. 创立数据库连接对象操作:MyEclipse菜单- Window-Open Perspective-MyEclipse Database Explorer在DB Browser中点击mysql-test, 右击选择连接。 用户名和密码根据实际MySql数据库的设置填写。连接后,我们可以看到界面:3.1 添加Hibernate功能框架操作:工程名SSHDemo右键菜单- MyEclipse- Add Hibernate CapabilitiesHibernate版本:选择Hibernate 3.2开发包li
25、braries选择MyEclipse Libraries下的全部JAR Library Installation选择“Copy checked Libraries Jars to “Library Folder项选择“/WebRoot/WEB-INF/lib这样的话所需的类库都将拷贝到工程目录,方便以后的部署, 点击Next 在Javapackage下新建一个目录com.fdu.hibernate,我们将HibernateSessionFactory文件放置在这里。3.2 配置Hibernate数据库连接翻开Hibernate.cfg.xml文件,内容: root123456com.mysql
26、.jdbc.Driverjdbc:mysql:/localhost:3306/ssh?useUnicode=true&characterEncoding=UTF-8org.hibernate.dialect.MySQLDialecttrue 3.3创立对象关系映射(O/R Mapping)的相关文件操作:MyEclipse菜单- Window-Open Perspective-MyEclipse hibernate选中刚刚创立的login-conn,点击按钮连接选中test库中的user_table表点击右键,选择“Hibernate Reverse Engineering这样Myeclips
27、e就自动的在bean目录下生成了两个文件,User.java 和User.hbm.xml。我们将User.hbm.xml配置到hibernate.cfg.xml文件中去:这里的resource为该映射文件的路径。我们翻开User.hbm.xml并对其进行修改。3.5 编写UserDAO文件接下来我们编写UserDAO接口文件,并在dao目录下新建impl目录,创立UserDAOImpl.java实现UserDAO接口。public class UserDAOImpl implements UserDAOpublic User getUserByName(String userName)Sess
28、ion session=null; try session=HibernateSessionFactory.getSession(); String queryString = from User as model where model.userName = ?; Query queryObject = session.createQuery(queryString); queryObject.setParameter(0, userName); List list = queryObject.list(); User user=null; if(list.size()0&list!=nul
29、l) user=(User)list.get(0); return user; catch (RuntimeException re) throw re; finally if (session != null)session.close(); 3.6 运行测试在UserDAOImpl类中编写一个main函数,测试运行:public static void main(String args) UserDAOImpl dao=new UserDAOImpl();User user=dao.getUserByName(alice);System.out.println(user.getUserNa
30、me();Spring使用4.1 添加Spring功能框架操作:工程名login右键菜单- MyEclipse- Add Spring Capabilities开发包libraries选择MyEclipse Libraries下的全部本例中其实只用到了局部,为了扩展方便建议选择全部,当然也可以选择User Libraries使用自己下载的Spring包,将lib文件夹下的所有jar包导入。JAR Library Installation选择“copy checked“Library Folder项选择“/WebRoot/WEB-INF/lib这样的话所需的类库都将拷贝到工程目录,方便以后的部署
31、点击“下一步(Next)创立配置文件,修改文件路径Folder到“WebRoot/WEB-INF目录以便和Struts配置文件一起管理,文件名称为默认的“applicationContext.xml点击Next按钮。点击Finish,如果出现局部jar包已经存在的提示,选择Keep Existing4.2 工程的三层开发一个大的工程一般都含有三层,action层作为控制层,service层为功能实现层,dao层为数据库访问层。现在,我们用三层来实现用户登录。建立UserService来实现登录功能。public class UserServiceImpl implements UserServ
32、iceprivate UserDAO userDAO=null;public UserDAO getUserDAO() return userDAO;public void setUserDAO(UserDAO userDAO) this.userDAO = userDAO;public boolean userLogin(ActionForm form, ServletRequest request, ServletResponse response)UserForm userForm=(UserForm)form; String userName=userForm.getUsername(
33、); String password=userForm.getPassword(); User user=userDAO.getUserByName(userName);if(password.equals(user.getUserPassword()request.getSession().setAttribute(user, user);request.getSession().setMaxInactiveInterval(1800); /设置Session失效时间30分钟 return true;elsereturn false;public boolean userLogout(Act
34、ionForm form, ServletRequest request, ServletResponse response) / TODO Auto-generated method stubreturn false;接下来,修改UserAction的登录方法。public ActionForward login(ActionMapping mapping, ActionForm form, ServletRequest request, ServletResponse response) throws Exception UserService loginService=new UserS
35、ervice(); boolean isSuccess=loginService.userLogin(form,request,response); if(isSuccess) return mapping.findForward(loginSucceed); else return mapping.findForward(loginFailed); 我们可以看到Action层的实现是很简单的,它直接调用了Service层提供的功能。4.3 简单的Bean依赖注入我们可以看到,action层调用了UserService的实现,service层调用了UserDAO的实现,这里我们是基于接口实现的
36、功能的,至于到底调用接口的实现在代码里并不知道,这就是利用Spring框架的好处,它实现了真正的控制反转。接下来我们翻开applicationConfigure.xml文件查看UserDAO,UserService在Spring中的配置。4.4 整合Struts框架整合Struts框架,就是把Struts的Action作为Bean配置到Spring中。首先我们翻开struts-config.xml文件,将Spring以插件的形式配置进去。 注意1配置Controller。 2plug-in 设置属性contextConfigLocation的值为Spring文件所在的目录,假设果有多个配置文件,那么以list的形式配置,具体查看我给大家的推荐阅读-Spring2.0技术手册。然后我们把action配置到applicationContext.xml文件中。注意,这里bean的name属性必须和struts配置里
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全新建设工程设计合同20242篇
- 2024年分手后个人财产保护合同2篇
- 副校长职位骋任合同(2024年版)2篇
- 2024年定制版劳动合同协议3篇
- 2024年全新矿泉水供应链管理合同2篇
- 二零二四年度无人机设备采购与安装合同2篇
- 2024年度金融科技领域创新合作合同2篇
- 2024年商品房预售合同全书3篇
- 2024年燃料油采购与供应合同3篇
- 2024年智能设备远程诊断与服务协议3篇
- 诊断学胸部体检课件
- 工商业储能商业模式分析及IRR测算
- 小学生主题班会-言语有温度 课件
- 《实验活动1 配制一定物质的量浓度的溶液》课件
- 2024年国家保安员考试题库附参考答案(考试直接用)
- 《“3S”技术及其应用》试卷
- 2024-电商控价协议范本
- 中药养颜秘籍智慧树知到期末考试答案2024年
- 手术切口感染PDCA案例
- 殡葬礼仪服务应急预案
- 校运会裁判员培训
评论
0/150
提交评论