Aquí hay un ejemplo más simple
1. Cree un nuevo proyecto estándar de Javaweb
2. Importar algunos paquetes básicos de JAR requeridos para la primavera
3. Configure el archivo web.xml
<? xml versión = "1.0" encoding = "utf-8"?> <web-app versión = "2.5" 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 http://java.sun.com/xml/ns/javaeeee/web-app_2_5.xsd"> <! <param-name>contextConfigLocation</param-name> <param-value> classpath*:applicationContext*.xml, </param-value> </context-param> <!-- spring context loading listener--> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <velceed-file-list> <Welcome-file> index.jsp </leadde-file> </le bienvenido-file-list> </beb-app>
4. Agregue el archivo de configuración de Spring ApplicationContext
5. Haga la configuración más fácil del archivo ApplicationContext.xml
<? xml versión = "1.0" encoding = "utf-8"?> <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-3.0.xsd" default-lazy-init="false" default-autowire="byName"> <bean id="user"> <property name="name" value = "Zhang San"/> </bean> </beans>
frijoles: el nodo raíz del archivo XML.
XMLNS - Es la abreviatura del espacio de XMLNames. Debido a que los nombres de etiquetas de los archivos XML están personalizados, es probable que las etiquetas escritas por sí mismas y definidas por otros se dupliquen, pero las funciones son diferentes, por lo que se debe agregar un espacio de nombres para distinguir este archivo XML de otros archivos XML, similar al paquete en Java.
XMLNS: XSI: se refiere al archivo XML que cumple con las especificaciones XML. El nombre completo de XSI: XMLSChemainStance se refiere a las especificaciones que son estrictamente seguidas por los elementos definidos en el archivo de recursos de esquema utilizado. Es decir, ¿qué estándares cumplen los elementos definidos en el archivo /spring-beans-2.0.xsd?
XSI: Schemalocation: se refiere a las especificaciones con las que cumple el elemento XML en este documento. La propiedad de esquema se utiliza para hacer referencia al documento de esquema (esquema). El analizador puede usar este documento para verificar el documento de instancia XML si es necesario. Su valor (URI) aparece en pares, el primer valor representa el espacio de nombres, y el segundo valor representa la ubicación específica del documento de patrón que describe el espacio de nombres, separado por espacios.
6. Cree un usuario de clase de nueva entidad. Java
paquete com.po; Usuario de clase pública {nombre de cadena privada; edad de cadena privada; public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public String getAge () {return Age; } public void setAge (String Age) {this.age = Age; }}7. Prueba
public static void main (String [] args) {// TODO Método Generado automático STUB ApplicationContext AC = New FilesystemXMLApPlicationContext ("config/applicationContext.xml"); Usuario user = (usuario) ac.getBean ("usuario"); System.out.println (user.getName ()); }Producción
Esto permite la construcción de un marco de primavera básico para proyectos web. A continuación, haremos algunas extensiones que se utilizarán en proyectos reales. Puede configurar algunas funciones u otras configuraciones para la integración de Spring Framework en Web.xml.
< </init-param> <init-param> <iti-param> <amamname> codificación </amamname> <amam-value> utf-8 </amam-value> </it-param> </siltre> <filter-mapping> OpenSessionInView-> <filter> <filter-name> OpenSessionInViewFilter </filter-name> <filter> org.springframework.orm.hibernate3.support.opensessionInviewFilter </filter-class> <itparam> <amamamname> <init-param> <param-name>sessionFactoryBeanName</param-name> <!--Specify which sessionFactory in Spring configuration to use OpenSessionInView--> <param-value>sessionFactory</param-value> </init-param> </filter> <filter-mapping> <filter-name>openSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filtre-mapping> <!-Spring Security Filter org.springframework.web.filter.delegatingFilterProxy (Delegate Filter Proxy)-> <!-Este filtro se utilizará usando SpringSecurity o Apache Shiro,-> <filtro> <filter-name-name> SpringsecurityFilterchain </filter-name> <filter-class> org.springframework.web.filter.delegatingFilterProxy </filter-class> </siltre> <filter-mapping> <filter-name> SpringsecurityFilterchain </filter-name> <url-pattern>/*</url-pattern> </filter-papping> <!-Declare <Servlet-name> springdispatcher </servlet-name> <ervlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <itel-param> <amamname> contextConfigLocation </param-name> <amamnvalue> classpath*: primavera-mvc.xml </amam-value> </init-param> <ar carga-on-startup> 1 </load-on-startup> </servlet> <!-Mapear todas las solicitudes para/* al servicio de despachador-> <servlet-mapping> <ervlet-name> springdispatcher </servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-Configuración de error de error <Location> ErrorPage/404.jsp </socation> </Error-Page> <!-401 Error-> <MOMER-PAGE> <MOMED-Code> 401 </Error-Code> <ocation> /ErrorPage/401.html </boation> </sor error-page> <!-Introduzca TagLib.jspf y otros archivos para cada página JSP-> <JSP-CONFIG> <Taglib> <Taglib-uri> /webinf/runqianReport4.tld </taglib-uri> <taglib-location> /webinf/runqianReport4.tld </taglib-location> </taglib> <jspperty-group> <url-pattern>*. jsp </ url-pattern> <page-Coding> <Colude-prelude> /tag/taglib.jspf </include-prelude> <!-<trim-directive-whitespaces> true </trim-diirective-whitespaces>-> </jspproperty-group> </jsp-config>
Entre ellos, JSPF es hacer algunas declaraciones globales
<%@ page lenguaje = "java" contentType = "text/html; charset = utf-8" <span style = "white-space: pre"> </span> pageEncoding = "utf-8"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> <%@ taglib@ taglib prefix = "fn" uri = "http://java.sun.com/jsp/jstl/functions"%> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix = "fmt" uri = "h taglib prefix =" fnc "uri ="/webinf/tlds/fnc.tld "%> <%@ taglib tagdir ="/webinf/tags "prefix" <c: set var = "ctx" scope = "session" <span style = "white-space: pre"> < /span> value = "$ {pageContext.request.contextpath}" />Se pueden configurar más funciones en ApplicationContext.xml
< xmlns: jee = "http://www.springframework.org/schema/Jee" xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: aop = "http://www.springframework.org/aop" xmlns: contexte = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalocation http://www.springframework.org/schema/Beans/spring-Beans-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org//tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springingwork.org/schema/context/spring-contexsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "default-lazy-init =" false "default-autowire =" por name "> <!-Define the Sección con anotaciones-> <AOP: SuppeJ-AutoProxy /> <MVC: Annotation-Driven /> <!-El comentario reemplaza la configuración, escanea automáticamente el paquete básico. El paquete de escaneo y todas las clases en todos los subpackages deben eliminarse del controlador; de lo contrario, afectará la administración de transacciones-> <context: component-scan base-package = "com.schoolnet"> <context: exclute-filter type = "annotation" expresion = "org.springFrfringFringFrame.stersterype.controller" /> < /context: componente-scan> <!-system, system-system-system-system-system-system-system-system-system- id = "PropertyConfigurer"> <Property name = "fileEncoding" value = "utf-8"/> <propiedad name = "ubicaciones"> <list> <value> classpath: jdbc.properties </value> </list> </protion> </ bean> <!-Configuración de la fuente de datos->> <bean id = "dataSource" destruir-metrodo = "cerrar"> <nombre de propiedad name " value = "$ {jdbc.driverClassName}" /> <Property name = "jdbcurl" value = "$ {jdbc.url}" /> <propiedad name = "user" value = "$ {jdbc.username}" /> <name de propiedad = "Value =" Value = "$ {jdbc.password} /> <<sperty name =" Minpoolsize " <value> 1 </value> </property> <Property name = "maxpoolSize" value = "100" /> <Property Name = "InitialPoolSize" Value = "3" /> <!-Tiempo de inactividad máximo, si la conexión no se usa dentro de los 60 segundos, la conexión se descartará. Si es 0, nunca se descartará. Valor predeterminado: 0-> <propiedad name = "maxidletime" value = "60" /> <!-El número de conexiones obtenidas por C3P0 al mismo tiempo cuando la conexión en el grupo de conexión está agotada. Valor predeterminado: 3-> <Property name = "adquirincrement" value = "5" /> <Property name = "maxStatements" value = "0" /> <!-Verifique las conexiones inactivas en todas las conexiones cada 60 segundos. Valor predeterminado: 0-> <propiedad name = "idleconnectionTestperiod" value = "60" /> <!-Define el número de intentos repetidos después de que una nueva conexión no pudo recuperarse de la base de datos. Predeterminado: 30-> <propiedad name = "adquireretryAttempts" value = "30" /> <!-No se pudo obtener la conexión hará que todos los subprocesos esperan que el grupo de conexión obtenga la conexión para lanzar una excepción. Sin embargo, la fuente de datos sigue siendo válida y continúa intentando obtener la conexión la próxima vez que llame a getConnection (). Si se establece en True, la fuente de datos declarará que se ha desconectado y cerrado permanentemente después de los intentos fallidos de obtener la conexión. Valor predeterminado: falso-> <propiedad name = "breakafterAcquireFailure" value = "false" /> <!-Por favor, úselo cuando sea necesario debido al consumo de alto rendimiento. Si se establece en True, su validez se verificará en cada envío de conexión. Se recomienda utilizar idleconnectionTestperiod o AutomatictStTable para mejorar el rendimiento de las pruebas de conexión. Predeterminado: falso-> <propiedad name = "testConnectionOnCheckout" value = "false" /> < /bean> <!-Definición de administrador de transacciones (transacción declarativa)-> <!-soporte @transactional tags-> <!-way one: dataSourCetransactionManager-> <bean id = "transaccionManager"> <nombre de propiedad = "refare" ref = "dataSource" /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < />> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> beane <tx: anotation-dirigir transaction-ganager = "transactionManager"/> <!-Way dos: hibernateTransactionManager-> <bean id = "hibernateTransactionManager"> <Property Name = "SessionFactory"> <ref Local = "SessionFactory"/> </propiedad> </ bean> <!-Configure la fábrica de sesiones de Hiebernate->> <ry " name = "dataSource" ref = "dataSource"/> <propiedad name = "lobHandler" ref = "lobHandler"/> <Property name = "mappingLocations"> <list> <valor> classpath*:/com/schoolnet/**/*. Hbm.xml No genera automáticamente tablas cuando múltiples espacios de tabla son los mismos en Oracle. -> <aprop key = "hibernate.default_schema"> $ {jdbc.username} </pr> <aprop key = "hibernate.dialect"> org.hibernate.dialect.oracle10gdialect </pr> <pp Key = "HiBernate.show_Sql> verdad key = "Hibernate.Generate_Statistics"> false </prop> <prot key = "hibernate.generate_statistics"> false </prop> <prot key = "hibernate.connection.release_mode"> auto </prop> <prop key = "hibebernate.aUtereConnect"> true </prop> <prop key = "hibbernate org.hibernate.cache.ehcacheprovider </pr> <!-Solve Memory Fuge Problem-> <prop key = "hibernate.cache.use_Query_cache"> false </prop> <aprop key = "use_second_level_cache"> false </prop> <prop key = "hibernate.hbm2ddl.auto"> prop>/propin Key = "Current_Session_Context_Class"> Thread </prop> </props> </property> <Property Name = "EventListeneRs"> <Map> <Interying Key = "Merge"> <Bean/> </Entry> </Map> </property> </ Bean> <!-2.Configure las características de transacciones de HiBernate-> <TX: ASIESS ID = "TXAdVEice" transaccion-ganager = "hibernatetransactionManager"> <tx: atributes> <tx: método name = "salvar*" propagation = "requerido" reversión "excepción" /> <tx: método name = "add*" propagation = "requerido" reversback-for = "excepción" /> <tx: método name = "update*" propagation = "requerido" reversión "-" excepción " /" excepción " name = "modify*" propagation = "requerido" rollback-for = "excepción" /> <tx: método name = "del*" propagation = "requirido" reversión-for = "excepción" /> <tx: método name = "start*" propagation = "requerido" referback-for = "excepción" /> <tx: método name = "parar*" propagation = "requerido" rejilla requerida "<" excepción " /" excepción " name = "asignar*" propagation = "requerido" reversión-for = "excepción" /> <tx: método name = "clare*" propagation = "requirido" reversión-for = "excepcion name="insert*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="do*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="set*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="*N" propagation="NEVER" /> <tx:method name="*" read-only="true"/> </tx: atributes> </tx: consejo> <!-Configure los métodos de esas clases para la gestión de transacciones-> <aop: config> <aop: asesor pointcut = "ejecutor (*com.eshine ..*. Servicio.*.*(..))" ASCANSE-REF = "TXADVICE"/> </AOP: config>Configuración del archivo Spring-Mvc.xml
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns: jee = "http://www.springframework.org/schema/Jee" xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: aop = "http://www.springframework.org/aop" xmlns: contexte = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalocation http://www.springframework.org/schema/beans http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org//tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd ">" <context: component-scan base-package = "com.schoolnet" use-default-Filters = "false"> <context: include-Filter type = "annotation" expresion = "org.springframework.steretype.controller" /> < /context: component-scan> <mvc: annotation-driven /> <mvc: staveur-servlethandler /> Parser-> <bean id = "jspViewresolver"> <Property name = "prefix" valor = " /" /> <propiedad name = "sufix" value = ". jsp" /> <propiedad name = "orden" valor = "0" /> <propiedad name = "contentType" value = "text /html; charset = utf-8" /> < /bean> <! <bean id = "multipartresolver"> <propiedad name = "maxuploadsize" value = "1073741824"/> </bean> </ beans>
Resumir
Lo anterior es todo el contenido de este artículo sobre el código completo compartido del proyecto web Spring Framework. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a este sitio:
SpringMVC REST Style Introducción e ejemplo de código de implementación
SpringMVC Interceptor implementa el inicio de sesión único
Spring Integrated Redis Sample de código detallado
Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!