1. Preparación
Antes de comenzar, consulte el artículo anterior:
Struts2.3.24 + Spring4.1.6 + Hibernate4.3.11 + MySQL5.5.25 La construcción del entorno de desarrollo y las explicaciones relacionadas son las mismas, pero Struts2 se reemplaza con MVC de primavera
2. Diferentes lugares
Directorio de proyectos y paquete JAR:
Cambiar el paquete de acción al controlador;
Elimine el paquete JAR STRUTS2 y agregue el paquete Spring MVC (si ya existe, no necesita agregarlo);
Configuración web.xml:
La diferencia de antes es que el filtro Struts2 se reemplaza con un servlet, el objetivo principal es enrutar la URL y entregarla a MVC de resorte para su procesamiento;
<? xml versión = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" " xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" <Spant-Name> SSH </splay-name> <context-param> <amamname> contextConfigLocation </amamname> <amam-value> classpath: applicationContext.xml </param-value> </text-param> <searcher> <searcher-class> org.springframework.web.context.conteteperlistener </oyeveer-clas <Devene-File-List> <Devene-File> Index.jsp </Welcome-File> </Welcome-File-List> <Servlet> <Servlet-name> SpringMVC </servlet-Name> <ervlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <ic-param> <amamname> contextconfiglocation </paramcocation> <Amam-Value> classpath: springmvc-servlet.xml </param-value> </ init-param> <load-on-startup> 1 </load-on-startup> </servlet> <ervlet-mapping> <servlet-name> springmvc </ servlet-name> <url-pattern>*. do </url-pattern> </servlet-mapping> </web-name> <uRl-Pattern>*.
Configuración de applicationContext.xml:
La diferencia es principalmente al configurar el escaneo automático, se debe excluir el componente @Controller. Estos frijoles son generados por Spring MVC;
Otras configuraciones son las mismas que en el artículo anterior;
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: p = "http://www.springframework.org/schema/p" "" "" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: jdbc = "http://www.springframework.org/schema/jdbc" xsi: schemalocation = "http://wwww.springframe http://www.springframework.org/schema/Beans http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd http://www.springframework.org/schema/context/spring-context-4.1.xsd "> <!-escanea el classpath para componentes anotados (incluido @Repostory y @service que se registrará automáticamente como beans de primavera-> <contexto: componente-scan-package =" ssh "> <! se escanea mediante el archivo de configuración de SpringMVC-> <context: Exclude-Filter type = "Annotation" Expression = "org.springframework.steretype.controller" /> < /context: component-scan> <!-selección de la fuente de datos-> <bean name = "dataSource" destruye-method = "cero"> <name de propiedad = "conductclass" Value = "Com.mysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqlysqy /> <propiedad name = "jdbcurl" value = "jdbc: mysql: // localhost: 3306/demo"/> <propiedad name = "user" value = "root"/> <propiedad name = "contraseña" valor = "root"/> <propiedad = "adquiririncrement" value = "1"> </propiedad> <name de propiedad = "inicialpoolsize" value "80" 80 " nombre = "maxiDletime" valor = "60"> </propiedad> <propiedad name = "maxpoolSize" value = "80"> </propiedad> <propiedad name = "minpoolSize" value = "50"> </propers> <Property name = "adebireretryDelay name = "breakafterAcquireFailure" value = "false"> </property> <!-Si aparecen demasiadas conexiones, preste atención a la modificación del archivo de configuración my.ini de mysql para aumentar el número máximo de elementos de configuración de las conexiones (consulte el comando de conexión actual: mostrar la lista name = "HibernateProperties"> <Props> <prop key = "Hibernate.dialect"> org.hibernate.dialect.mysqldialect </pr> <prop key = "hibernate.show_sql"> true </prop> <prop key = "hibernate.hbm2ddl.auto"> Última </actualización <prop> key = "Hibernate.hbm2ddl.auto"> update </prop> <prot key = "Connection.pool_size"> 10 </prop> <proping key = "current_session_context_class"> Thread </prop> <proping key = "hibercernate.cache.use_second_level_cache"> verdadero </prop> <prop> <prop> key = "Hibernate.cache.region.factory_class"> org.hibernate.cache.ehcache.ehcacheregionFactory </prop> <proping key = "hibernate.cache.use_Query_cache"> verdadero </pp> <propir key = "Hibernate.cache.provider_configuration_file_resource_path"> ehcache.xml </prop> </props> </propiety> <Property name = "mappingLocations"> <List> <sale> classpath: ssh/model/user.hbb.xml </valor> </list> </propiedad> <! Nombre de propiedad> "namepath: ssh/model/user.hbb.xml </valor> </list> </Property> <! Nombre de la propiedad>" n. <LiC> <value> ssh.model.user </value> </list> </property>-> </bean> <!-Configurar transacciones administrador-> <bean id = "transaccionManager"> <propiedad name = "sessionFactory" ref = "sessionFactory"/> </bean> <!-Características de propagación de transacciones-> <tx: asesoramiento = "txadvice" Transation -Manager " <tx: atributes> <tx: método name = "add*" propagation = "required" read-only = "false" reversback-for = "java.lang.exception"/> <tx: método name = "delete*" propagation = "requerido" requerido = "falso" reversión-for = "java.lang.Exception"/> <tx: método = "deletero*" falso "requería" requirido "" requirido " lectura a la sola = "false" rollback-for = "java.lang.exception"/> <tx: método name = "update*" propagation = "requerido" lectura a-"falso" rollback-for = "java.lang.exception"/> <tx: método name = "salvar*" propagation = "requerido" lectura de lectura = "falso" rollback-for = "java.lang.lang.exception"//xception "//xception"/ </tx: atributos> </tx: consejo> <aop: config> <aop: pointCut id = "pcmethod" expresion = "ejecution (*ssh.service ..*.*(..))"/> <aop: asesor point-ref = "pcmethod" consejo-refin id = "aOpTest"> </bean> <bean id = "myaop"> </reme> <aop: config proxy-target-class = "true"> <aop: aspecto ref = "myaop"> <aop: punto id = "pcmethodtest" expresión = "expresión (* ssh.aop.aoptest.test* (..))"/> <aop: antes de la expresión (* ssh.aop.aoptest.test* (..)) " PointCut-REF = "PCMethodTest" Method = "Before"/> <aop: After PointCut-Ref = "PCMethodTest" Method = "After"/> </aop: aspecto> </aop: config> </ beans>
Configuración de SpringMVC-Servlet.xml:
Configure el escaneo automático de @Controller en el paquete ssh.controller. Aquí debe restaurar el Filter excluido configurado en ApplicationContext.xml;
Configurar View Parser, hay muchos analizadores, aquí tomamos internereurceViewResolver como ejemplo;
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: context = "http://www.springframework.org/schema/context" " xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: p = "http://www.springframework.org/schema/p" xmlns: xsi = "http://wwww.w3.org/2001/xmlschema: xsi =" http://wwww.w3.org/2001/xmlschema: xsi = "http://wwww.w3.org/2001/xmlschema: xsi =" http://wwww.w3.org/2001/xmlschema: xsi = "http://wwww.w3.org/2001/xmlschemLschemLschema" xmlns: tx = "http://www.springframework.org/schema/tx" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/scoans/spring-4. http://www.springframework.org/schema/context http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd "> <!-Iniciar escaneo automático de todos los granos bajo este paquete (por ejemplo, @Controller) > <!-Restaure el excluido-filtrado establecido por el contenedor principal, preste atención a la ruta de escaneo de paquetes ssh.controller-> <context: include-filter type = "annotation" expresion = "org.springframework.steretype.controller" /> < /context: component-scan> <!-Vista definitiva PARSER-> <Bean> <MOURPIEMENECHE = "PRESECHIX"> <value>/web-inf/jsp/</value> </propiT-<Property Name = "Suffix"> <value> .jsp </value> </property> </beans>
Controlador de escritura:
Dado que Spring MVC se usa para reemplazar Struts2, no hay un paquete de acción. Eliminar y crear un nuevo paquete de controlador. Cree una nueva clase de UserController bajo el paquete;
@RequestMapping: MAP URL;
@ResponseBody: el contenido se devuelve directamente como un cuerpo;
UserController.java
paquete ssh.controller; import java.io.printwriter; import java.util.list; import javax.annotation.resource; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import.apache.log4j.loger; org. com.google.gson.gson;@controler@requestmapping ("/user") clase pública Usercontroller {logger logger = logger.getLogger (UserController.class); @Resource Private UserSerervice UserService; @Resource Private Aoptest Aoptest; @RequestMapping (value = "/adduser") @ResponseBody public void adduser (solicitud httpservletRequest, respuesta httpservletreSponse) {printWriter out = null; intente {Response.SetContentType ("Text/Html; Charset = UTF-8"); Cuenta de cadena = request.getParameter ("cuenta"); Name de cadena = request.getParameter ("nombre"); Dirección de cadena = request.getParameter ("dirección"); Usuario user = nuevo usuario (); user.setAccount (cuenta); user.setaddress (dirección); user.setName (nombre); UserService.Add (usuario); out = respuesta.getWriter (); out.write (new Gson (). Tojson ("éxito")); } catch (Exception e) {E.PrintStackTrace (); logger.error (e.getMessage ()); if (out! = null) out.write (new Gson (). TJson ("Fail")); } finalmente {out.flush (); out.close (); }} @RequestMapping (valor = "/Queryuser") @ResponseBody public void QueryAlluser (HTTPServletRequest Solicitud, respuesta httpServletResponse) {printWriter out = null; aoptest.test1 (); aoptest.test2 (); intente {Response.SetContentType ("Text/Html; Charset = UTF-8"); Gson gson = new Gson (); List <Serem> UserList = Userservice.queryAllUser (); Cadena gsonstr = gson.tojson (userList); out = respuesta.getWriter (); out.write (gsonstr); } catch (Exception e) {E.PrintStackTrace (); logger.error (e.getMessage ()); if (out! = null) out.write (new Gson (). TJson ("Fail")); } finalmente {out.flush (); out.close (); }}} 3. Ejecute el programa
Ejecute el programa, agregue usuarios y consulte usuarios. La función es normal;
Además, el caché secundario también funciona normalmente, y la base de datos ya no funciona en la segunda consulta;
@Author un codificador de viento
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.