Creato da pastuweb.com
Share My Page
My Social Accounts
Account FaceBook Account LinkedIn Account Twitter Account Google Plus Account Git Hub

In questo esempio vi mostrerò l'utilizzo di Struts 2, Spring e Hibernate per operare su un database MYSQL. 

Esempio Struts 2, Spring e HibernateHo creato due cartelle sorgenti:

  • src
  • config

e diversi package all'interno di esse:

  • appuntivari.esempio.actions
  • appuntivari.esempio.model (per i DTO)
  • appuntivari.esempio.service (per la logica)
  1. Prima cosa creaiamo, in MySQL, il database "appunti" con le relativa tabella "siti". 
  2. Modifichiamo il file hibernate.properties all'interno della cartella "config".
  3. Creaiamo il DTO, cioè la classe che mappera la tabella del database.
  4. Definiamo i descrittori per Hibernate, siti.hbm.xml (all'interno della cartella "config")
  5. Scriviamo la logica, cioè il Service che andrà ad operare sul database
  6. Definiamo il descrittore Spring: SpringConfiguration.xml
  7. Definiamo il descrittore web.xml e struts.xml

Infine scriviamo un index.jsp (con il form di rihiesta dei valori) e un success.jsp (per la visualizzazione della lista di records della tabella "Siti") .

Nota: quando uso Hibernate preferisco usare descrittori XML per descrivere il mappaggio dei DTO con le tabelle fisiche dela database. Ma volendo si possono anche usare le Annotazioni. Scegliete il metodo che preferite. Con l'XML rimane più ordinato.

 

 

 

Per avviare le Applicazioni Web scritte in Java J2EE avete bisogno di un Web Server in locale. In questo esempio ho utilizzato Tomcat v.7. A questo link potete trovare una guida su come configurarlo in Eclipse.

 

hibernate.properties
In questo file definisco delle "costanti" usate poi nel descrittore di Spring: spring_hibernate_config.xml.
 
#hibernate properties
connection.driverClassName=com.mysql.jdbc.Driver
connection.username=root
connection.password=
connection.url=jdbc:mysql://localhost/appunti
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.transaction.factory_class=org.hibernate.transaction.JDBCTransactionFactory

 

DTO
La classe mostrata qui sotto mappa le colonne/attributi della tabelle fisica. 
 
package appuntivari.spring.hibernate.dto;
 
public class Siti{
 
private Integer id_sito;
private String dominio;
private String tipologia;
 
public Integer getId_sito() {
return id_sito;
}
public void setId_sito(Integer id_sito) {
this.id_sito = id_sito;
}
public String getDominio() {
return dominio;
}
public void setDominio(String dominio) {
this.dominio = dominio;
}
public String getTipologia() {
return tipologia;
}
public void setTipologia(String tipologia) {
this.tipologia = tipologia;
}
 
}
 
siti.hbm.xml : descrittore XML per Hibernate
Questo descrittore informa Spring su come mappare il DTO con le tabella fisica del database.
Si poteve fare anche con le Annotazioni all'interno degli stesso DTO.
 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="appuntivari.esempio.model.Siti" table="siti" catalog="appunti">
<id name="id_sito" type="java.lang.Integer">
<column name="ID_SITO" />
<generator class="identity" />
</id>
<property name="dominio" type="string">
<column name="DOMINIO" length="40" not-null="true"/>
</property>
<property name="tipologia" type="string">
<column name="TIPOLOGIA" length="256" not-null="true"/>
</property>
  
</class>
 
</hibernate-mapping>
 
 
Parte logica: ServiceImpl.java
Questa classe è la logica vera e propria del programma. Vengono definiti dei metodi di interrogazione sul database.
 
package appuntivari.esempio.service;
 
import java.util.List;
 
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
 
import appuntivari.esempio.model.Siti;
 
public class ServiceImpl implements Service{
 
public static Log log = LogFactory.getLog("Service");
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
   this.sessionFactory = sessionFactory;
 }
 
 
@Override
public void createSito(Siti sito) {
 
Session session = null;
   session = sessionFactory.openSession();
   try{
    session.save(sito);
   }catch(Exception e){
    e.printStackTrace();
   }
   
}
 
@SuppressWarnings("unchecked")
@Override
public List<Siti> getSiti() {
 
Session session = null;
   session = sessionFactory.openSession();
   List<Siti> listaSiti = null;
   try{
    listaSiti = (List<Siti>) session.createQuery("from Siti").list();
   }catch(Exception e){
    e.printStackTrace();
   }
   
return listaSiti;
}
 
}
 
 
 
Parte Spring: SpringConfiguration.xml
In questo file configuro Spring andando ad impostare il dataSource, il sessioneFactory con riferimento ad Hibernate al posto di JDBC. In più creo il bean "dbService" che mi servirà all'interno della classe TestVari.java nel metodo Main per richiamare i metodi ad-hoc di accesso al database, come: createAutore(), elencoAutori(), createSito() ecc.
 
 
<?xml version="1.0"?>
 
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
       
      
      <bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:hibernate.properties" />
  <property name="placeholderPrefix" value="$HIBERNATE{" />
   </bean>
 
 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="$HIBERNATE{connection.driverClassName}"/>
<property name="url" value="$HIBERNATE{connection.url}"/>
<property name="username" value="$HIBERNATE{connection.username}"/>
<property name="password" value="$HIBERNATE{connection.password}"/>
 </bean>
 
       
      <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mappingResources">
      <list>
        <value>siti.hbm.xml</value>
      </list>
    </property>
    <property name="hibernateProperties">
      <value>
        hibernate.dialect=$HIBERNATE{hibernate.dialect}
      </value>
    </property>
   </bean>
      
      
    <bean id="dbService" class="appuntivari.esempio.service.ServiceImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
            
     
    <bean id="myAction" class="appuntivari.esempio.actions.MyAction"> 
<property name="dbService" ref="dbService"/>
</bean>
</beans>
 
 
 
 
Parte Struts 2: struts.xml
In questo descrittore andiamo a definire i nomi logici delle actions (classi Java speciali per Struts). Se ritorna "SUCCESS" allora carica la pagina "success.jsp".
 
<?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>
 
<package name="default" extends="struts-default">
       
       <action name="saveSito" class="appuntivari.esempio.actions.MyAction" method="saveSito">
           <result name="success">/success.jsp</result>
       </action>
        
</package>
  
    
</struts>
 
 
 
web.xml (descrittore di Applicazioni Java Web)
 
Questo invece è il descrittore dell'applicazione web. Come si può notare viene specificato l'uso di Spring con il path /WEB-INF/ e viene specificata l'home page dell'applicazione web: index.jsp.
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/SpringConfiguration.xml</param-value>
  </context-param>
  <filter>
    <filter-name>Struts2Filter</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>Struts2Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
 
 
MyAction.java
In questa classe posso definire UN UNICO METODO o più metodi. I nomi dei metodi devonono iniziare con "do". Vengono poi mappati nel file struts.xml.
 
package appuntivari.esempio.actions;
 
import java.util.ArrayList;
import java.util.List;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;
 
import appuntivari.esempio.model.Siti;
import appuntivari.esempio.service.Service;
import appuntivari.esempio.service.ServiceImpl;
 
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
 
public class MyAction extends ActionSupport implements ModelDriven{
 
 
private static final long serialVersionUID = 1L;
 
public static Log log = LogFactory.getLog("Action");
 
private Service dbService;
public void setDbService(Service dbService) {
this.dbService = dbService;
}
 
private Siti sito = new Siti();
private List<Siti> listaSiti = new ArrayList<Siti>();
 
public String doSaveSito(){
 
log.info("Domino: "+sito.getDominio());
log.info("Tipologia: "+sito.getTipologia());
 
 
dbService.createSito(sito);
 
 
listaSiti = dbService.getSiti();
return SUCCESS;
}
 
@Override
public String execute() throws Exception { /*default - NON USATO nell'esempio */
listaSiti = dbService.getSiti();
return SUCCESS;
}
 
public Siti getSito() {
return sito;
}
 
public void setSito(Siti autore) {
this.sito = sito;
}
 
public List<Siti> getListaSiti() {
return listaSiti;
}
 
public void setListaSiti(List<Siti> listaSiti) {
this.listaSiti = listaSiti;
}
 
 
@Override
 public Siti getModel() {
   return sito;
 }
 
 
}
 
 
index.jsp (JSP con il form di inserimento - 2 input text)
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Esempio Struts2 Spring e Hibernate - Inserimento</title>
</head>
<body>
<br />
<div style="width:500px;padding:10px;border:1px solid #000000;">
<h3>Crea nuovo sito:</h3>
<%-- 
Nota:
action="saveSito" equivale al name della Action nel file "struts.xml"
--%>
<s:form action="saveSito">
<s:textfield  name="sito.dominio" label="Dominio" value=""/><br/><br/>
<s:textfield name="sito.tipologia" label="Tipologia" value=""/><br/><br/>
<s:submit />
</s:form>
 
</div>
</body>
</html>
 
 
success.jsp (JSP in cui vengono visualizzati i nuovi inserimenti sul DB - una semplice tabella)
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Esempio Struts2 Spring e Hibernate - Lista</title>
</head>
<body>
<h3>Elenco Siti</h3>
<br>
<table>
<tr>
<th>ID_SITO</th>
<th>DOMINIO</th>
<th>TIPOLOGIA</th>
</tr>
<s:iterator value="listaSiti">
<tr>
<td><s:property value="id_sito" />
</td>
<td><s:property value="dominio" />
</td>
<td><s:property value="tipologia" />
</td>
</tr>
</s:iterator>
</table>
 
</body>
</html>
 
You can find this project on my GitHub Repository at this repository URL: https://github.com/pastuweb/java-spring-examples/tree/master/EsempioWebStruts2SpringHibernate
Average (1 Vote)
The average rating is 5.0 stars out of 5.