MyEclipse 2014搭建SSH环境后实现登录示例

一、前言

暂无

二、操作过程

①、创建数据库及表并填入数据

②、生成数据库表对应的Java类对象和映射文件

       Ⅰ、在Database Explorer视图中,点击连接的数据库,右键点击指定的数据库表,在弹出的快捷菜单中选着Hibernate Reverse Engineering。如下图所示,启动Hibernate反向工程向导界面。

       Ⅱ、选择生成的Java类和映像文件所在的位置,生成Hibernate映射文件和Java POJO类。

内容说明
Create POJO<>DB Table mapping information创建POJO与数据库表之间的映射信息,通俗点就是创建映射文件
Create a Hibernate mapping file (*.hbm.xml) for each database table为每个数据库表创建hibernate映射文件。
Add Hibernate mapping annotations to POJO (Hibernate 3.2 and above)添加hibernate映射注解到POJO (hibernate 3.2版本及以上支持)
Update Hibernate configuation with mapping resource location更新本地映射文件
Java Data Object(POJO<>DB Table)通过数据表创建java数据对象,即创建实体。其下两个选项分别是创建抽象类以及选择父类,这个按用户需求自行选择。
Java Data Access Object(DAO)(Hibernate 3 only)创建数据访问对象,即创建DAO。

       Ⅲ、选择主键生成策略Id Generate为identity

       Ⅳ(这一步可以直接忽略)、Include referenced tables (A->B) 和 Include referenced tables (A<-B) ,这两个一定要选择,否则myeclipse不能给你生成一对多、多对多等映射,如果只想生成单项映射,可以去掉一个,一般我们都选择,双项映射。

、创建Dao、Service、Action类

       分别在src目录下创建dao.system、service.system、action.system这3个包,然后分别在这3个包中创建3个类文件:UserDao.java、UserService.java、LoginAction.java

       其中UserDao.java文件代码如下

package dao.system;

import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import model.system.TUser;		//引入Hibernate的数据库表映射文件映射文件

public class UserDao extends HibernateDaoSupport{
	public void add(TUser m){
		getHibernateTemplate().save(m);
	}
	
	public List<TUser> showAllUser(){
		return getHibernateTemplate().find("from user");
	}
	
	public void update(TUser m){
		getHibernateTemplate().update(m);
	}
	
	public void delete(String id){
		getHibernateTemplate().delete(getHibernateTemplate().get(TUser.class, id));
	}
	
	public TUser getUserById(String id){
		TUser m = (TUser)getHibernateTemplate().get(TUser.class, id);
		return m;
	}
	
	public boolean checkUser(String userName,String userPassword){
		boolean flag = false;
		String hql = "from TUser as user where user.username = '" + userName + "' and user.password = '" + userPassword + "'";
		List<TUser> userList = this.getHibernateTemplate().find(hql);
		if(userList.size() > 0){
			flag = true;	//用户名和密码匹配正确,则flag变量返回true值
		}
		return flag;
	}
}

其中UserService.java文件代码如下

package service.system;

import dao.system.UserDao;
public class UserService {
	private UserDao userDao;
	
	public UserDao getUserDao(){
		return userDao;
	}
	public void setUserDao(UserDao userDao){
		this.userDao = userDao;
	}
	
	public boolean checkUser(String userName,String userPassword){
		return userDao.checkUser(userName, userPassword);
	}
}

其中LoginAction.java文件代码如下

package action.system;
import com.opensymphony.xwork2.ActionSupport;
import service.system.UserService;

public class LoginAction extends ActionSupport{
	private static final long serivalVersionUID = 6989533817661294988L;
	private String username;
	private String password;
	UserService userService = new UserService();
	
	public UserService getUserService(){
		return userService;
	}
	public void setUserService(UserService userService){
		this.userService = userService;
	}
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

	public String execute(){
		boolean flag = false;
		if(username == null || username.trim().equals("")){
			this.addFieldError("username", "用户名不能为空");
			return "fail";
		}else if(password == null || password.trim().equals("")){
			this.addFieldError("password", "密码不能为空");
			return "fail";
		}else{
			flag = userService.checkUser(username,password);
			if(flag){
				return "success";
			}else{
				return "fail";
			}
		}
	}
}

④、配置相关文件

(1).log4j配置文件 

          工程需要使用log4j作为日志输出工具,故需要log4j的配置文件。在src下创建log4j.properties文件,配置内容如下:

#log4j.properties
log4j.rootLogger=info, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] -%m%n

(2).修改Web.xml,添加如下代码

<!-- 以下3项参数与log4j的配置相关 -->
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
</context-param>
<context-param>
	<param-name>log4jRefreshInterval</param-name>
	<param-value>60000</param-value>
</context-param>
<listener>
	<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

(3).修改applicationContext.xml,添加如下代码

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            </props>
       </property>
     <!--  加载映射文件,指明hibernate配置文件的位置  -->
    <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
    <property name="mappingResources">
        <list>
            <value>model/system/TUser.hbm.xml</value>
        </list>
    </property>
</bean>

<!--  1、定义DAO  -->
<bean id="userDao" class="dao.system.UserDao">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

 <!--  2、配置LoginAction.java类文件  -->
<bean id="LoginAction" class="action.login.LoginAction" scope="prototype">
    <property name="userService" ref="userService"/>
</bean>

 <!--  3、配置service层   -->
<bean id="userService" class="service.system.UserService">
     <property name="userDao" ref="userDao"/>
</bean>

(4).修改struts.xml,添加如下代码

<struts>
	 <!-- 下述语句是将struts2交给spring管理  -->
	<constant name="struts.objectFactory" value="spring"/>
	 <!--将action内容放在package元素下,package元素的name值与extends值可以使用默认值,如下所示 -->
	<package name="ssh" extends="struts-default">
		<!--例如与用户登录相关的LoginAction,配置如下,其中,class值与applicationContext.xml文件中该action的id值相对应,name值作为标识-->
		<action name="loginAction" class="LoginAction">
			<!--result元素设置页面跳转值,其中name值为目标页面的字符串标识,如下,登录失败时回到fail.jsp页面,成功时,转向success.jsp页面 -->
			<result name="fail">/jsp/login/fail.jsp</result>
			<result name="success">/jsp/login/main.jsp</result>
		</action>
	</package>
</struts>

⑤、编写登录界面、登录成功和登录失败界面

       a.登录界面index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML>
<html>
  <head>
    <base href="<%=basePath%>">
    <title>登录</title>
  </head>
  
  <body>
    <div id="login">
    	<form action="loginAction" method="post">
			<input type="text" name="username"/>
		    <input type="text" name="password"/>
		    <input type="submit" value="登录"/>
		</form>
  	</div>
  </body>
</html>

       b.登录成功界面success.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML>
<html>
  <head>
    <base href="<%=basePath%>">
    <title>登录成功</title>
  </head>
  <body>
    	登陆成功。<br>
  </body>
</html>

       c.登录失败界面fail.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML>
<html>
  <head>
    <base href="<%=basePath%>">
    <title>登录失败</title>
  </head>
  <body>
    	非法用户,登陆失败。<br>
  </body>
</html>

三、运行结果

       a.登录界面

       b.登录成功

       c.登录失败

四、注意事项

列名内容/说明
错误类型java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;
原因

由于 hibernate 高版本已经又完善了好多功能,导致与之前跟 spring 整合的方法有些出入。

Hibernate 4之后,Spring 3.1将HibernateDaoSupport类去除了,包括数据访问都不需要Hibernatetemplate。

解决方法

方法一

       在Dao类中添加SessionFactory属性,再添上它的setter方法。使用sessionFactory.getCurrentSession()方法或者sessionFactory.openSession()方法(该方法需要手动打开和手动关闭)。

方法二

       将Hibernate的版本更改为3.3版本,即Spring和Hibernate同为3.*版本

方法三

       将Spring的版本改为4.*版本,即Spring和Hibernate同为4.*版本

        由于Hibernate4已经完全可以实现事务了, 与Spring3.1中的hibernatedao,hibernateTemplete等有冲突,所以Spring3.1里已经不提供Hibernatedaosupport,HibernateTemplete了,只能用Hibernate原始的方式用session:

Session session = sessionFactory.openSession();
Session session = sessionFactory.getCurrentSession();

        在basedao里可以用注入的sessionFactory获取session。 注意,配置事务的时候必须将父类baseServiceImpl也配上,要不然会出现错误:No Session found for currentthread,以前是不需要的。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值