SSH框架的用户登录小实例
Mysql+Tomcat+Myeclipse9.1M1
SSH框架四个主要配置文件及关联关系的介绍:SSH是struts,spring和hibernate的简称,简单来说,struts是控制用的,hibernate是操作数据库的,spring是用来解耦的。具体来说:
1)struts 负责 web 层 .ActionFormBean 接收网页中表单提交的数据,然后通过 Action 进行处理,再 Forward 到对应的网页。在 struts.xml 中义 <action-mapping>, ActionServlet 会加载。
2) spring 负责业务层管理,即 Service (或 Manager).service 为 action 提供统计的调用接口,封装持久层的 DAO.也可以写一些自己的业务方法。统一的 javabean 管理方法,声明式事务管理,集成 Hiberante等。
3)Hibernate,负责持久化层,完成数据库的增删改查操作,hibernate为持久层,提供 OR/Mapping。它有一组 .hbm.xml 文件和 POJO, 是跟数据库中的表相对应的。然后定义 DAO ,这些是跟数据库打交道的类,它们会使用 PO 。
在 struts+spring+hibernate 的系统中,对象的调用流程是: jsp-> Action - > Service ->DAO ->Hibernate 。数据的流向是 ActionFormBean 接受用户的数据, Action 将数据从 ActionFromBean 中取出,封装成 VO (value object值对象)或 PO(持久化对象),再调用业务层的 Bean 类,完成各种业务处理后再 forward 。而业务层 Bean 收到这个 PO 对象之后,会调用 DAO 接口方法,进行持久化操作。
spring:Aop管理事务控制,IoC管理各个组件的耦合,DaoTemplate作为常规持久层的快速开发模板
struts:控制层Action,页面标签和Model数据,调用业务层
Hibernate:负责数据库和对象的映射,负责DAO层(Data Access Object:数据访问)
spring整合hibernate和struts,只要在配好了applicationContext.xml,在struts的action中直接调用就可以了。hibernate访问数据库的操作都在spring中实现了,spring的调用又在stuts的action中实现了。通过以上思路这个ssh框架就连到了一起。
一般来说SSH框架主要包括四类配置文件web.xml,applicationcontext.xml(Spring),struts.xml(Struts),cfg.xml(Hibernate)。
实现简单用户登录操作(用户名和密码均为admin),用户将看到一个登录页面,要求用户输入用户名以及密码。如果用户名以及密码都是admin,提示登录成功。否则提示登录失败。
首先需要导入框架所需要的jar包。导入jar包的方法是将所需要的jar包复制到所建工程目录/WebContent/WEB-INF/lib文件夹下。所需要的包如下图PIC1所示:
PIC2
最后得到的工程结构图如下所示:
打开MyEclipse,进MyEclipse开发页面,新建一个web工程:
PIC3
3.2.1在Window选项中选择Show view选项中的Data Source Explorer,将其显示在控制台区域,如图所示:
PIC4
3.2.2 右键单击,选择new,弹出对话框,选择MySQL:如图所示
在工程的lib文件夹下选择数据库驱动jar。
PIC5
注:驱动版本和jar包版本要一样。
点击右下角,Test Driver,如果出现以下对话框,说明数据源配置成功:
PIC6
1.首先是用到Hibernate层将数据库映射对象,以后的我们操作数据库时只需要对对象进行操作,不需要再进入数据库操作。这部分主要用到两个文件,一个是将数据库建模,另一个是配置数据库的映射文件(.xml)。
在src文件夹下面,建立一个java包com.lyf.model,在这个包里建立一个UserLogin.java文件用来建模数据,语句如下:
PIC7
package com.lyf.model;
import java.io.Serializable;
public class UserLogin implements Serializable {
// 字段(Fields)
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private String pwd;
// 默认的构造函数(default constructor)
public UserLogin() {
}
// 完全构造函数(full constructor )
public UserLogin(String username, String pwd) {
this.username = username;
this.pwd = pwd;
}
// 获得get与set方法(Property accessors)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
数据库中id为主键,username和pwd分别为用户名和密码。
2.使用MyEclipse反向工程生成配置文件和POJO类(即数据库的映射文件(.hbm.xml))
【第一步】打开数据库设置器:依次单击【window】-->【Show View】-->【Other…】如下图所示:
PIC8
在弹出的窗口ShowView中选择DBBrowser,如下图所示:(PIC9)
在DBBrowser窗口中,选择显示的图标,单击右键执行新建命令,如下图示(PIC10
在弹出Database Driver对话框,在此会要求我们配置数据库的相关信息,具体设置如下图所示,设置完成,单击Finish.(PIC11)
【第二步】引入hibernate配置文件:选中我们的Web工程,依次单击鼠标右键-->MyEclipse-->Add HibernateCapabilities… 如下图所示:(PIC12)
在弹出的窗口中做如下设置:(PIC13)
【Next】,创建hibernate的配置文件(PIC14)
【Next】,指明hibernate与数据库的连接(PIC15)(由于在配置数据源的时候已经配置过了下面就是默认的)
【Next】,创建HibernateSessionFactory类,用来获得session。如果前面没有设置包名,要先单击New创建新的包。(PIC16)
单击【Finish】按钮
【第三步】添加hibernate映射文件和POJO类
1.新建com.lyf.model包
在前面设置的数据源上找到我们要操作的表:
在DBBrowser中选中新建的数据源,单击鼠标右键并选择open connection..(PIC17)
输入数据库的用户名和密码,以创建连接:(PIC18)
找到刚才新建的tb_ssh数据库,然后是TABLE,如下图所示:(PIC19)
生成POJO:(PIC19)
点击Next,配置映射类型(暂时未用到)(PIC20)
点击Next,配置反向工程细节(PIC21)
把bo接口放在文件夹com.lyf.bo,在这个文件夹下面建立UserLoginBo.java文件,具体内容如下:
package com.lyf.Bo;
import com.lyf.model.UserLogin;
public interface UserLoginBo {
publicUserLogin findbyNameAndPwd(String name,String pwd); //按用户名密码查找用户
}
在文件夹com.lyf.bo文件夹下建立继承实现接口的文件UserLoginBoImpl.java文件。具体内容如下:
package com.lyf.bo;
import java.util.List;
import org.hibernate.Query;
importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;
importorg.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.lyf.model.UserLogin;
public class UserLoginBoImpl extendsHibernateDaoSupport implements UserLoginBo {
@Override
@Transactional(propagation= Propagation.REQUIRED, readOnly = true)
publicUserLogin findbyNameAndPwd(String name, String pwd) {
Queryq = getSession().createQuery("FROM UserLogin WHERE username=? and pwd =?");
q.setString(0,name);
q.setString(1,pwd);
Listlist = q.list();
if(list.isEmpty()){
System.out.println("登录失败");
returnnull;
}else{
System.out.println("登录成功");
UserLoginuserLogin = (UserLogin) list.get(0);
returnuserLogin;
}
}
}
创建Session工厂,对数据进行持久化操作,对数据的每个操作都通过Session工厂来完成。
·SessionFactory接口:SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。 ·Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
MyEclipse反向工程,在文件夹com.lyf.model目录下建立文件会自动生成HibernateSessionFactory.java
以上主要涉及到Hibernate层的设置,接下来讨论spring层的文件配置:
主要包括业务逻辑接口和业务逻辑继承和实现的对象。(没有用到)
下面是struts层文件,主要涉及到action的创建,在文件夹com.lyf. action目录下有UserLoginAction.java文件,具体内容为:
package com.lyf.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import com.lyf.bo.UserLoginBo;
import com.lyf.model.UserLogin;
public class UserLoginAction extends Action {
//创建用户登录BO接口对象
private UserLoginBo userLoginBo;
public void setUserLoginBo(UserLoginBo userLoginBo) {
this.userLoginBo = userLoginBo;
}
public ActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequestrequest, HttpServletResponse response) {
DynaActionFormuserLoginForm = (DynaActionForm) form;
UserLoginuserLogin = userLoginBo.findbyNameAndPwd(userLoginForm
.getString("username"), userLoginForm.getString("pwd"));
if (userLogin == null) {
request.setAttribute("error", "用户登录失败,用户名或密码不正确!");
return mapping.findForward("index");
}else {
request.getSession().setAttribute("username",
userLogin.getUsername());
request.getSession().setAttribute("id", userLogin.getId());
return mapping.findForward("welcome");
}
}
}
3.3.5 .xml文件配置
配置好各层文件后下面配置.xml文件,将上述各个不同层次的文件连接起来。主要涉及到首先配置Hibernate与数据库相连接的文件hibernate.cfg.xml将其直接放在src文件夹下面,具体内容如下:
其次是struts配置文件,其主要内容是有不同的action组成,将structs.xml放在WebRoot/WebINF文件夹下。structs.xml文件内容如下:
接下来配置Spring配置文件applicationContext.xml,将这个文件放在WebContent\WEB-INF文件夹下面。具体内容如下:
最后配置Web.xml文件,其内容如下:
编辑2个jsp文件作为测试用,具体如下:
index.jsp主要用来登陆内容为:
Welocme.jsp当登陆成功时,跳转到此页面,具体内容为:
当登录失败时,跳转到此index.jsp页面
完成以上各步骤后,运行此项目,出现如下界面后(PCI22),
输入用户名admin密码admin得到PIC23。说明框架搭建成功。
窗体底端