eclipse下用J2EE(hibernate,struts2,spring)实现的简单登录、注册系统

本文介绍了如何在Eclipse环境下使用JavaEE技术栈,包括Hibernate、Struts2和Spring,来实现一个基本的登录注册系统。主要涉及配置WEB-INF/web.xml文件的调整。
最近加入了大四学长们的开源项目,本想在里面凑个人数,仅仅体验下开发的流程,没想到学长们竟然安排了精心的培训,向我们细致的介绍了J2EE的实现框架,着重强调了SPRING,HIBERNATE,STRUTS三者的分工,与合作,so,不用心也难啊~~~他们说的时候都明白,但真正到了自己做又是另一码事,在断断续续近两周的时间,我终于自己成功配置出一套登录注册系统,平台是在ECLIPSE下,虽然非常简单,但适合初学者学习!

把WEB-INF/web.xml文件稍微修改下

<?xml version="1.0" encoding="GBK"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<welcome-file-list>
    <welcome-file>/login.jsp</welcome-file>
      </welcome-file-list>
</web-app>
在mysql里面有一个lyoproject的库,里面有张register的表,分别有字段id(int),name(varchar),password(varchar),然后开始在SRC下配置domain层

package domain;
 
public class Person {
	private int id;
	private String name;
	private String password;
	public Person()
	{
	}
	public Person(String name , String password)
	{
		this.name = name;
		this.password = password;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}
接着将Person.java映射入数据库,在与其同一级的包里建立一个Person.hbm.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
 
 
<hibernate-mapping> 
    <class name="domain.Person" table="register" catalog="lyoproject">
    <id name="id" >
    	<column name="id" length="2"></column>
    	<generator class="identity"/>
    </id>
    <property name="name" >
    	<column name="name"></column>
    </property>
	 <property name="password" >
    	<column name="password"></column>
    </property>
    </class>
</hibernate-mapping>
此时配置hibernate.cfg.xml文件,放在SRC的目录下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory name="sessionFactory">
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/lyoproject</property>
        <property name="connection.username">root</property>
        <property name="connection.password"> 填自己密码</property>
		<property name="hibernate.default_catalog">lyoproject</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="connection.useUnicode">true</property>
		<property name="connection.characterEncoding">UTF8</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">false</property>
		<!-- 最大连接数 -->
		<property name="hibernate.c3p0.max_size">20</property>
 
		<!-- 最小连接数 -->
		<property name="hibernate.c3p0.min_size">5</property>
 
		<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
		<property name="hibernate.c3p0.timeout">120</property>
 
		<!-- 最大的PreparedStatement的数量 -->
		<property name="hibernate.c3p0.max_statements">100</property>
 
		<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒 -->
		<property name="hibernate.c3p0.idle_test_period">120</property>
 
		<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
		<property name="hibernate.c3p0.acquire_increment">2</property>
 
		<!-- 每次都验证连接是否可用 -->
		<property name="hibernate.c3p0.validate">true</property>
 
		<mapping resource="domain/Person.hbm.xml" />
	</session-factory>
</hibernate-configuration>
建一个包,配置domine上面的dao层,新建一个PersonDao.java

package dao;
import java.util.List;
 
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import domain.Person;
 
public class PersonDao extends HibernateDaoSupport{
	public Person get(Integer id){
		return getHibernateTemplate().get(Person.class, id);
	}
 
	public  Integer save(Person person){
		return (Integer)getHibernateTemplate().save(person);
	}
 
	public void delete(Person person){
		getHibernateTemplate().delete(person);
	}
 
	public boolean auth(String username,String password){
		String hql = "from Person p where p.name=? and password=?";
		List<Person> personList = getHibernateTemplate().find(hql,username,password);
		if(personList.size()==1){
			return true;
		}
		return false;
 
	}
}
接着配置他的service层,我在这边做了一个接口,便于管理,建立Lyoservice.java文件

package service;
import domain.Person;
 
public interface Lyoservice {
	boolean register(Person person);
	boolean login(String usename,String password);
}
她的实现部分命名为LyoserviceImpl.java

package service.impl;
import domain.Person;
import dao.PersonDao;
import service.Lyoservice;
 
public class LyoserviceImpl	implements Lyoservice
{
	private PersonDao persondao;
 
	public void setPersondao(PersonDao persondao) {
		this.persondao = persondao;
	}
 
	public boolean register(Person person){
		int result = persondao.save(person);
		if(result>0)
			return true;
		else
			return false;
	}
 
    public boolean login(String username,String password){
    	boolean result = persondao.auth(username,password);
    			if(result)
    				return true;
    			else
    				return false;
    }
}
暂时把Action放一下,我们先来配置前台的JSP文件,分别为login.jsp与regist.jsp,我放在了WEB-ROOT下,登录或注册成功的四个JSP文件自行创立

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
	String path =request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>用户登录系统</h3>
<form action="<%=basePath%>input/login">
	<s:textfield name="person.name" label="用户名"/>
	<s:textfield name="person.password" label="密  码"/>
	<s:submit value="登录" theme="simple"/>
	<s:reset value="重填" theme="simple"/> 
	<a href="regist.jsp">注册新用户</a>
</form>
</body>
</html>
注册的页面:

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
	String path =request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>注册</title>
</head>
<body>
<h3>用户注册系统</h3>
<form action="<%=basePath%>input/register">
	<s:textfield name="person.name" label="用户名"/>
	<s:textfield name="person.password" label="密  码"/>
	<s:submit value="注册" theme="simple"/>
	<s:reset value="重填" theme="simple"/> 
</form>
</body>
</html>
配置struts.xml文件,放在SRC目录下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"></include>
<package name="struts" extends="struts-default" namespace="/input">
	<action name="register" class="registerAction">
		<result name="success" >/welcome.jsp</result>
		<result name="error">/error.jsp</result>
	</action>
	<action name="login" class="loginAction">
		<result name="success" >/loginY.jsp</result>
		<result name="error">/loginN.jsp</result>
	</action>
	<action name="input">
		<result>/login.jsp</result>
	</action>
</package>
</struts>
此时可以编写Action文件了,新建一个包并创建LoginAction.java文件

package action;
import com.opensymphony.xwork2.Action;
import service.Lyoservice;
import domain.Person;
 
public class LoginAction {
	private Person person;
	private Lyoservice lyoservice;
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
	public void setLyoservice(Lyoservice lyoservice) {
		this.lyoservice = lyoservice;
	}
	public String execute() throws Exception
		{
		if (lyoservice.login(person.getName(),person.getPassword()))
			{
				return "success";
			}
			else
			{
				return "error";
			}
		}
}
RegisterAction.java文件:

package action;
import com.opensymphony.xwork2.Action;
import domain.Person;
import service.Lyoservice;
 
public class RegisterAction implements Action{
	private Person person;
	private Lyoservice lyoservice;
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
	public void setLyoservice(Lyoservice lyoservice) {
		this.lyoservice = lyoservice;
	}
	public String execute() throws Exception
		{
			//调用业务逻辑组件的regist方法来处理请求
		if (lyoservice.register(person))
		{
			return "success";
		}
		else
		{
			return "error";
		}
		}
 
}
现在我们需要最后配置下spring的配置文件,文件名为applicationContext.xml,必须放在与WEB.XML文件同级的地方

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Spring配置文件的Schema信息 -->
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
	<!-- 定义数据源Bean,使用C3P0数据源实现 -->
	  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
       <property name="configLocations">  
           <value>classpath:hibernate.cfg.xml</value>  
       </property>  
     </bean>  
 
	<!-- 定义DAO Bean-->
	<bean id="persondao" class="dao.PersonDao">
		<!-- 注入持久化操作所需的SessionFactory -->
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	<!-- 配置一个业务逻辑组件 -->
	<bean id="lyoservice" class="service.impl.LyoserviceImpl">
		<!-- 注入持久化访问所需的DAO组件 -->
		<property name="persondao" ref="persondao"/>
	</bean>
 
	<bean id="registerAction" class="action.RegisterAction">
		<property name="lyoservice" ref="lyoservice"/>
	</bean>
 
		<bean id="loginAction" class="action.LoginAction">
		<property name="lyoservice" ref="lyoservice"/>
	</bean>
 
	<!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 -->
	<!-- 该类实现PlatformTransactionManager接口,是针对Hibernate的特定实现-->
	<bean id="transactionManager" 
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<!-- 配置HibernateTransactionManager时需要依注入SessionFactory的引用 -->
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	<!-- 配置事务增强处理,指定事务管理器 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<!-- 用于配置详细的事务语义 -->
		<tx:attributes>
			<!-- 所有以'get'开头的方法是read-only的 -->
			<tx:method name="get*" read-only="true"/>
			<!-- 其他方法使用默认的事务设置 -->
			<tx:method name="*"/>
		</tx:attributes>
	</tx:advice>
	<aop:config>
		<!-- 配置一个切入点 -->
		<aop:pointcut id="lyoPointcut"
			expression="bean(lyoservice)"/>
		<!-- 指定在leePointcut切入点应用txAdvice事务增强处理 -->
		<aop:advisor advice-ref="txAdvice" 
			pointcut-ref="lyoPointcut"/>
	</aop:config>
 
</beans>
此处我们的所有文件就配置齐全了!Hava a try,Good luck!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值