您的位置:首页 > 编程语言 > Java开发

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

2013-07-04 11:01 666 查看
最近加入了大四学长们的开源项目,本想在里面凑个人数,仅仅体验下开发的流程,没想到学长们竟然安排了精心的培训,向我们细致的介绍了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 e
4000
xtends 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!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息