SSH集積開発例(Struts 1.2+Spring 3.1+Hibernate 3.2)

11737 ワード

<1>LoginnAction.java
package action;

import idao.ICustomerDao;

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 po.Customer;
import dao.CustomerDao;
import form.LoginForm;


public class LoginAction extends Action {
    private ICustomerDao icdao;
    
	public ICustomerDao getIcdao() {
		return icdao;
	}

	public void setIcdao(ICustomerDao icdao) {
		this.icdao = icdao;
	}

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		// TODO Auto-generated method stub
		LoginForm loginForm = (LoginForm) form;
		String account = loginForm.getAccount();
		String password = loginForm.getPassword();
		Customer cus = icdao.getCustomerByAccount(account);
		if(cus!=null && cus.getPassword().equals(password)){
		
		}else{
		
		}
		return mapping.findForward("SUCCESS");
	}
      
}
<2>CustoomerDao
package dao;

import org.hibernate.Session;

import po.Customer;
import util.HibernateSessionFactory;

public class CustomerDao {
	public Customer getCustomerByAccount(String account){
	     Customer cus = null;
	     Session session = HibernateSessionFactory.getSession();
	     cus = (Customer) session.get(Customer.class, account);
	     HibernateSessionFactory.closeSession();
	     return cus;
	}
}
<3>Login Form.java
package form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class LoginForm extends ActionForm {
	private String account;
	private String password;
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		// TODO Auto-generated method stub
		super.reset(mapping, request);
	}
	@Override
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		// TODO Auto-generated method stub
		return super.validate(mapping, request);
	}
}
<4>ICustomerDao
package idao;
import po.Customer;
public interface ICustomerDao {
	public Customer getCustomerByAccount(String account);
}
<5>Custoomer.java
package po;

public class Customer {
	private int id;
	private String account;
	private String password;
	private String cname;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getCname() {
		return cname;
	}
	public void setCname(String cname) {
		this.cname = cname;
	}
}
<6>Cusstomer.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   
  package="po">
  
  <class name="Customer">
      <id name="id">
          <generator class="native"/>
      </id>
      
      <property name="account"/>
      <property name="password"/>
      <property name="cname"/>
  </class>
  
</hibernate-mapping>
<7>Hbernate Session Factory.java
package util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

/**
 * Configures and provides access to Hibernate sessions, tied to the
 * current thread of execution.  Follows the Thread Local Session
 * pattern, see {@link http://hibernate.org/42.html }.
 */
public class HibernateSessionFactory {

    /** 
     * Location of hibernate.cfg.xml file.
     * Location should be on the classpath as Hibernate uses  
     * #resourceAsStream style lookup for its configuration file. 
     * The default classpath location of the hibernate config file is 
     * in the default package. Use #setConfigFile() to update 
     * the location of the configuration file for the current session.   
     */
	private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private static org.hibernate.SessionFactory sessionFactory;
	
    private static Configuration configuration = new Configuration();
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    private static String configFile = CONFIG_FILE_LOCATION;

	static {
    	try {
			configuration.configure(configFile);
			sessionFactory = configuration.buildSessionFactory();
		} catch (Exception e) {
			System.err.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
    }
    private HibernateSessionFactory() {
    }
	
	/**
     * Returns the ThreadLocal Session instance.  Lazy initialize
     * the <code>SessionFactory</code> if needed.
     *
     *  @return Session
     *  @throws HibernateException
     */
    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();

		if (session == null || !session.isOpen()) {
			if (sessionFactory == null) {
				rebuildSessionFactory();
			}
			session = (sessionFactory != null) ? sessionFactory.openSession()
					: null;
			threadLocal.set(session);
		}

        return session;
    }

	/**
     *  Rebuild hibernate session factory
     *
     */
	public static void rebuildSessionFactory() {
		try {
			configuration.configure(configFile);
			sessionFactory = configuration.buildSessionFactory();
		} catch (Exception e) {
			System.err.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
	}

	/**
     *  Close the single hibernate session instance.
     *
     *  @throws HibernateException
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);

        if (session != null) {
            session.close();
        }
    }

	/**
     *  return session factory
     *
     */
	public static org.hibernate.SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	/**
     *  return session factory
     *
     *	session factory will be rebuilded in the next call
     */
	public static void setConfigFile(String configFile) {
		HibernateSessionFactory.configFile = configFile;
		sessionFactory = null;
	}
	/**
     *  return hibernate configuration
     *
     */
	public static Configuration getConfiguration() {
		return configuration;
	}

}
<8>ヒベルナツ.cfg.xml
<?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">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
         <property name="connection.url">jdbc:mysql:///test</property>
         <property name="connection.username">root</property>
         <property name="connection.password">root</property>
         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    
         <property name="hbm2ddl.auto">create</property>
         <mapping resource="cn/itcast/hibernate/domain/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
<9>アプリContect.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
   "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
     <bean id="dao" class="dao.CustomerDao"></bean>
     <bean name="/login" class="action.LoginAction">
         <property name="icdao">
              <ref local="dao"/>
         </property>
     </bean>
</beans>
<10>struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  <form-beans>
       <form-bean name="loginForm" type="form.LoginForm"></form-bean>
  </form-beans>
  
  <action-mappings>
       <action path="/login" name="loginForm" scope="request" type="org.springframework.web.struts.DelegatingActionProxy">
            <forward name="SUCCESS" path="/loginSuccess.jsp"></forward>
            <forward name="FAIL" path="/loginFail.jsp"></forward>
       </action>
  </action-mappings>
  
  <plug-in className="org.springframework.web.struts.contextLoaderPlugIn">
       <set-property property="contextConfigLocation"
              value="/WEB-INF/applicationContext.xml" />
  </plug-in>
</struts-config>
<11>login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Login.jsp</title>
  </head>
  <body>
    <form action="/login.do" method="post">
                          :<input name="account" type="text"><br>
                          :<input name="password" type="password">
        <input type="submit" value="  ">
    </form>
  </body>
</html>
<12>login Fail.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>LoginSuccess.jsp</title>
  </head>
  <body>
                  
  </body>
</html>
<13>ロゴSuccess.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>LoginSuccess.jsp</title>
  </head>
  <body>
                  
  </body>
</html>
<14>プロジェクトディレクトリ