English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Introducción
SSH no es un framework, sino varios frameworks (struts+spring+La integración de Hibernate es una de las integraciones de frameworks de aplicaciones web open source más populares en la actualidad, utilizada para construir aplicaciones web multi-capas flexibles y fáciles de expandir.
El sistema integrado del framework SSH se divide en cuatro capas desde el punto de vista de las responsabilidades: la capa de presentación, la capa de lógica de negocio, la capa de persistencia de datos y la capa de módulo de dominio (capa de entidad).
Struts como la infraestructura básica del sistema, se encarga de la separación de MVC, en la parte del modelo del framework Struts, controla la transición de negocios, y proporciona soporte a la capa de persistencia utilizando el framework Hibernate. Por un lado, Spring actúa como un contenedor IoC ligero, responsable de buscar, ubicar, crear y gestionar objetos y relaciones de dependencia entre objetos, y por otro lado, permite que Struts y Hibernate funcionen mejor.
Utilizar MyEclipse para integrar los tres marcos SSH y realizar un Demo de registro de usuario simulado, correspondiente a las versiones:
Versión de Struts:2.1;
Versión de Spring:3.1;
Versión de Hibernate:3.3;
Uno, preparativos antes de la integración
1.Crear un proyecto Web, como se muestra a continuación:
Nota:El nombre del paquete que admite action debe ser "action", y la clase action debe terminar en Action, es decir, en la forma XxxAction, como se muestra en la imagen anterior
2.Crear la base de datos y la tabla:
CREATE DATABASE sshdemo; CREATE table t_user( id INT PRIMARY KEY, username VARCHAR(10), password VARCHAR(20) )
3.Importar la conexión de la base de datos c3p0jar paquete, haga clic para descargar:
c3p0-0.9.2-pre1.jar、mysql-connector-java-5.1.13-bin.jar
Dos, la configuración del framework Struts:
1.Seleccione el proyecto, luego haga clic con el botón derecho y seleccione: MyEclipse -> Project Facets[Capacidades] -> Instalar Apache Struts (2.x) Facet, como se muestra a continuación:
2.Seleccione la versión, aquí he seleccionado2.1,haga clic en "Finalizar", como se muestra a continuación:
3.Después de completar los pasos anteriores, verá que en el directorio src se ha añadido un archivo struts.xml, como se muestra a continuación:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Fundación de Software Apache//DTD Configuración de Struts 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> </struts>
4.En WEB-.En el archivo web.xml del directorio INF se añade un fragmento de configuración del filtro struts, como se muestra a continuación:
5.Consulte la imagen anterior, y luego*.modifique "action" a"/*", hasta aquíLa configuración del framework struts se ha completado;
Tres, la configuración del framework Spring:
1.Referirse a la configuración de struts, seleccionar el proyecto, hacer clic con el botón derecho y seleccionar: MyEclipse -> Project Facets[Capacidades] -> Instalar el Facet de Spring, seleccionar la versión, aquí seleccione3.1Como se muestra a continuación:
2.Haga clic en "Finalizar", y verá que en el directorio src se ha añadidoapplicationContext.xmlarchivo, WEB-En el directorio INF se ha añadido un archivo spring-Los archivos form.tld y spring.tld, y se ha añadido un fragmento de código relacionado con la configuración de spring en el archivo web.xml, la construcción básica del framework spring está prácticamente completa (la introducción del espacio de nombres se hablará más adelante), como se muestra a continuación:
Cuatro, Configuración del framework Hibernate:
1.Referirse a la configuración de struts, seleccionar el proyecto, hacer clic con el botón derecho y seleccionar: MyEclipse -> Project Facets[Capacidades] -> Instalar HibernateFacet, seleccionar la versión, aquí seleccionar3.3Como se muestra a continuación:
2.Hacer clic en "Finalizar", se notará que en el directorio src se ha añadido un paquete predeterminado (puede eliminarse) y en el archivo web.xml se ha añadido un fragmento de código (se configurará de nuevo más adelante), como se muestra a continuación:
3.Importar paquetes jar que soportan la anotación "@Entity": Seleccionar el proyecto, hacer clic con el botón derecho y seleccionar: MyEclipse -> Project Facets[Capacidades] ->Gestionar... y luego seguir los pasos de la imagen siguiente:
Después de completar los pasos anteriores, las tres principales frameworks están básicamente construidos, a continuación, integraremos ellos.
Cinco, Integración
1Para que applicationContext.xml no se vea demasiado voluminoso y sea más fácil de gestionar, guardaremos las configuraciones relacionadas con Hibernate en otro archivo.xml y luego lo importaremos en applicationContext.xml, los pasos específicos son los siguientes:
(1Crear un archivo llamado)hibernateContext.xmlCopiar el contenido del archivo applicationContext.xml y luego realizar las modificaciones necesarias;
(2El contenido del archivo hibernateContext.xml:)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance xmlns:p="http://www.springframework.org/schema/p xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> !-- Configuración de sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> !-- Las propiedades de dataSource se configurarán en el archivo applicationContext.xml, aquí se realiza una referencia primero --> <property name="dataSource" ref="dataSource"></property> !-- Configurar los parámetros de configuración relacionados con hibernate --> <property name="hibernateProperties"> !-- La etiqueta props se utiliza para inyectar atributos de tipo Properties --> !-- La clave debe incluir el prefijo hibernate. --> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> !-- El propósito de show_sql es imprimir las sentencias SQL --> <prop key="hibernate.show_sql">true</prop> !-- Mejorar el formato de impresión de SQL --> <prop key="hibernate.format_sql">true</prop> !-- a) create-drop: Se creará la tabla de datos durante la ejecución del programa y se eliminará la tabla después de la ejecución, a menudo utilizado en el desarrollo real b) create: Se creará la tabla de datos cada vez que se ejecute el programa c) update: Durante la ejecución del programa, se evaluará si existe, no se creará la tabla, de lo contrario, se creará la tabla de datos y se agregarán automáticamente los campos en la tabla de datos según el aumento de los atributos de la clase de entidad (entorno de desarrollo) d) validate: Durante la ejecución del programa, se evaluará si los atributos de la clase de entidad no coinciden con los campos de la tabla, en caso de coincidencia, se generará un error (entorno de producción) --> <prop key="hibernate.hbm2ddl.auto">validate</prop> </props> </property> !-- Configuración de las clases de entidad de hibernate --> <property name="packagesToScan"> !--La etiqueta list se utiliza para inyectar atributos de tipo String[], los valores generalmente son los nombres completos de paquetes de bean, y las clases en los paquetes de bean generalmente corresponden a las tablas en la base de datos--> <list> <value>com.beauxie.bean</value> </list> </property> </bean> !-- Configuración del patrón hibernateTemplate --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> </beans>
(3En applicationContext.xm eliminamos la configuración de "sessionFactory" (porque ya está configurada en hibernateContext.xml), luego importamos el contenido de hibernateContext.xml modificado, después de importarlo, el contenido de applicationContext.xml es el siguiente:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance xmlns:p="http://www.springframework.org/schema/p xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> </bean> !-- Importar otros archivos de configuración de spring, si todos se colocan en un solo archivo, parecerá más voluminoso--> <import resource="hibernateContext.xml"/> </beans>
2.En el archivo applicationContext.xm, modificar la configuración (nombre de la base de datos, nombre de usuario, contraseña, etc.) del dataSource original, (Atención: ¡¡¡la etiqueta value no debe contener espacios ni saltos de línea!!!),como se muestra a continuación:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource> <property name="jdbcUrl"> !--Si se utiliza directamente la propiedad value, en lugar de la etiqueta value, se debe escapar “&” (ampersand), si se utiliza la etiqueta value, <span style="color:#FF0000;">la etiqueta no debe contener espacios ni saltos de línea, ya que convertirá los espacios en " "</span>,causando que la base de datos no pueda conectarse a menos que se reescriba la fuente de datos --> <value><![CDATA[jdbc:mysql://localhost:3306/sshdemo#63;useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true]]></value> </property> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="user" value="root"></property> <property name="password" value="root"></property> <property name="acquireIncrement" value="3></property> <property name="initialPoolSize" value="10></property> <property name="minPoolSize" value="2></property> <property name="maxPoolSize" value="10></property> </bean>
3.En applicationContext.xm, configurar el escaneo de spring, luego agregar anotaciones de componentes de spring a nuestras clases, y podemos lograr la carga automática de bean, los pasos específicos son los siguientes: (1)Introducir el espacio de nombres context, soportar etiquetas context, hacer clic en "Namespaces" en la parte inferior y marcar la opción context:
(2)Configurar el escaneo de spring:
!-- Configurar el escaneo de spring, luego agregar anotaciones de componentes de spring a nuestras clases, y podemos lograr la carga automática de bean-->
<context:component-scan base-package="com.beauxie.action,com.beauxie.service,com.beauxie.dao">
</context:component-scan>
Hasta aquí se ha completado la configuración del entorno de las tres grandes estructuras de ssh, a continuación, se realiza el registro de usuario en la base de ssh
Seis, caso: imitación simple de registro de usuario
1.Código de la página de registro frontal, index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + ://" + request.getServerName() + : + request.getServerPort() + path + "/"; > !-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>¡Bienvenido a la inscripción</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="Esta es mi página"> !-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="${pageContext.request.contextPath }/user/regist" method="POST"> !-- También se puede usar user.username para cargar automáticamente la propiedad user, pero aquí no es el punto principal, por lo que se obtiene manualmente su valor en el backend--> Nombre de usuario:<input type="text" name="username"><br> Contraseña Contraseña:<input type="password" name="password"><br> <input type="submit" value="Registrarse"> </form> </body> </html>
2.User类代码:
package com.beauxie.bean; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; /** * @author Beauxie * en este caso, las propiedades de User deben coincidir con los campos de la tabla t_user * de lo contrario, es necesario especificar manualmente los campos correspondientes de las propiedades diferentes */ @Entity//mapea la tabla de la base de datos @Table(name="t_user")//Sin esta anotación, por defecto se corresponde con la tabla user public class User { @Id//que corresponde a la clave primaria de la tabla t_user private int id;//ID de usuario private String username;//Nombre de usuario private String password;//Contraseña public int getId() { return id; } public void setId(int id) { this.id = id; } 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; } }
3.UserDao类代码:
package com.beauxie.dao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.stereotype.Repository; import com.beauxie.bean.User; /** * @author Beauxie * Dao层,对数据库进行操作 */ @Repository//这个属性对应的是持久层(一般为Dao层),说明交给spring管理,而对应的包下的类名也会有一个"S" public class UserDao { @Autowired//自动注入,不需要设值,因为在spring配置文件中已经配置过 private HibernateTemplate template; /** * 用户注册,即向表中添加一条新的记录 * @param user */ public void addUser(User user){ //往数据库中添加一条数据,一句话就可以搞定 template.save(user); } }
4.UserService类代码:
package com.beauxie.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.beauxie.bean.User; import com.beauxie.dao.UserDao; /** * @author Beauxie * Service层 */ @Service//这个属性对应的是业务层一般为Service层),说明交给spring管理,而对应的包下的类名也会有一个"S" public class UserService { @Autowired//同样是自动注入 private UserDao userDao; public void addUser(User user){ //调用Dao层的addUser方法 userDao.addUser(user); } }
5.UserAction类代码:
package com.beauxie.action; import javax.servlet.http.HttpServletRequest; import org.apache.struts;2.ServletActionContext; import org.apache.struts;2.convention.annotation.Action; import org.apache.struts;2.convention.annotation.Namespace; import org.apache.struts;2.convention.annotation.Result; import org.apache.struts;2.convention.annotation.Results; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import com.beauxie.bean.User; import com.beauxie.service.UserService; /** * @author Beauxie * */ @Controller//Se utiliza para marcar componentes de capa de control @Namespace("/user")//prefijo de url @Scope("prototype")//Action predeterminado es singleton, pero en el desarrollo real, generalmente es multiton, porque generalmente un Action puede corresponder a múltiples solicitudes diferentes //@ParentPackage("struts-default")//Heredar un paquete específico, el predeterminado es “struts-default”,por lo tanto, se puede omitir @Results({ @Result(name="registSuccess",location="/msg.jsp") }) public class UserAction { @Autowired//Inyección automática private UserService service ; //struts predeterminado intercepta“.action” y sin ningún sufijo adicional @Action(value="regist")//Acceder a:/user/regist.action o /user/regist public String regist(){ //Obtener request HttpServletRequest request = ServletActionContext.getRequest(); //Obtener los datos enviados por el formulario String username = request.getParameter("username"); String password = request.getParameter("password"); //Encapsular userBean User user = new User(); user.setId(1000); user.setUsername(username); user.setPassword(password); //Llamar al método del nivel de service, agregar un registro a la base de datos service.addUser(user); //La información de提示 se almacena en el dominio de request, se utiliza para mostrar en la interfaz frontal request.setAttribute("msg", "¡Felicidades, se ha registrado con éxito! <br> Nombre de registro: ")}+username); return "registSuccess"; } }
6.Interfaz de notificación de mensaje: código de msg.jsp como se muestra a continuación:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + ://" + request.getServerName() + : + request.getServerPort() + path + "/"; > !-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>Notificación de mensaje</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="Esta es mi página"> !-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> ${msg } </body> </html>
7.Añadir el proyecto al servidor, iniciar el servicio, abrir el navegador y visitar: http://localhost/SSHDemo/user/regist
8.Ingrese el nombre de usuario y la contraseña, haga clic en "Registro", y se mostrará el resultado:
9.Escribir la sentencia sql en la consola (ya se ha configurado y mejorado la salida de SQL en el archivo hibernateContext.xml):
10.Ver los resultados de la base de datos:
Este caso simple ya ha terminado, no se ha abordado la validación de datos de envío de formularios ni problemas de caracteres no válidos, ¿se actualizará en el futuro?......
Resumen: VII,
1.La integración de las tres grandes frameworks debe comenzar por introducir cada framework después, y luego integrar;
2.Definitivamente recuerde importar el paquete jar de la base de datos;
3.La clase Action debe estar en el paquete llamado "action", y el nombre de la clase debe terminar en Action, como "XxxAction";
4.Al configurar Hibernate, debe importar el paquete jar que admite la anotación @Entity;
5.Puede definir el tipo de solicitud interceptada por struts en el archivo struts.xml, el valor predeterminado es .action y sin sufijo
6.Puede definir el tipo de filtro del filtro struts en el archivo web.xml, el valor predeterminado es*.action debe cambiarse a/*;
7.En el archivo applicationContext.xm se debe configurar: sessionFactory, clase de entidad de hibernate, plantilla hibernateTemplate, fuente de datos dataSource, escáner de spring (que incluye hibernateContext.xml);
8.En cada clase debe incluir la anotación correspondiente, y también debe agregar anotaciones a los métodos en Action.
Descarga de código de ejemplo:http://xiazai.jb51.net/201610/yuanma/SSHzhuce(jb51.net).rar
Esto es todo el contenido de este artículo, espero que sea útil para su aprendizaje y que todos apoyen y alienten el tutorial de grito.
Declaración: el contenido de este artículo se obtiene de la red, pertenece al propietario original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente y no asume la responsabilidad legal relevante. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar, y proporcione evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.