Spring est un framework open source au niveau de la conception qui résout le problème du couplage lâche entre la couche de logique métier et d'autres couches, de sorte qu'il intègre des idées de programmation orientées interface dans l'ensemble de l'application système. Spring est un framework de développement Java léger apparu en 2003 et créé par Rod Johnson. En termes simples, Spring est un framework open source léger JavaSE/EEfull-stack (à guichet unique) en couches. Cet article présente principalement l'explication détaillée de la configuration du module WEB de Spring, présente brièvement sa méthode d'héritage, sa méthode proxy et le code de configuration détaillé associé. Il a une certaine valeur de référence et les amis dans le besoin peuvent en apprendre davantage.
Une brève introduction aux sept modules majeurs du framework Spring
Explication détaillée du code du module MVC dans Spring
Le module WEB de Spring est utilisé pour l'intégration de frameworks Web, tels que Struts1, Struts2, JSF, etc.
Intégrer Struts1
Méthode d'héritage
Spring framework fournit la classe ActionSupport pour prendre en charge l'action Struts1. Après avoir hérité d'ActionSupport, vous pouvez obtenir BeanFactory de Spring et obtenir diverses ressources dans divers conteneurs Spring
import org.springframework.web.struts.ActionSupport; public class CatAction extends ActionSupport{ public ICatService getCarService(){ return (ICatService) getWebApplicationContext().getBean("catService"); } public ActionForward execute(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){ CatForm catForm = (CatForm) form; if("list".equals(catForm.getAction())){ returnthis.list(mapping,form,request,response); } } public ActionForward list(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){ CatForm catForm = (CatForm) form; ICatService catService =getCatService(); List<Cat> catList =catService.listCats(); request.setAttribute("carList",catList); return mapping.find("list"); } }
Spring dans la configuration web.xml
<context-param><!-- Spring配置文件的位置--> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listener><!-- 使用Listener加载Spring配置文件--> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <filter><!-- 使用Spring自带的字符过滤器--> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
S'il est utilisé conjointement avec Hibernate, vous devez ajouter le filtre OpenSessionInViewFilter à web.xml pour étendre la portée de la session à la couche JSP afin d'éviter de lancer une exception de chargement paresseux
<filter> <filter-name>hibernateFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support. OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name> hibernateFilter</filter-name> <url-pattern>*.do</url-pattern><!-- 对Struts 1的Action启用--> </filter-mapping>
Méthode proxy
La méthode d'héritage est très simple à intégrer dans Spring, mais l'inconvénient est que le code est différent de Spring est couplé et l'action n'est pas gérée par Spring, donc les fonctionnalités AOP et IoC de Spring ne peuvent pas être utilisées. L'utilisation de la méthode proxy peut éviter ces défauts
public class CatAction extends Action{ //此处继承的Struts 1的Action private ICatService catService; //setter、getter略 public ActionForward execute(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){ CatForm catForm = (CatForm) form; if("list".equals(catForm.getAction())){ returnthis.list(mapping,form,request,response); } } public ActionForward list(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){ CatForm catForm = (CatForm) form; ICatService catService =getCatService(); List<Cat> catList =catService.listCats(); request.setAttribute("carList",catList); return mapping.find("list"); } }
<🎜. >
Cette Action n'est pas couplée à Spring, elle définit juste un attribut ICatService, et Spring se charge d'injecter la configuration struts-congfig.xml<form-beans> <form-bean name="catForm" type="com.clf.spring.CatForm"> </form-beans> <action-mappings> <action name=" catForm" path="/cat" type="com.clf.spring.CatAction"> <forward name="list" path="/jsp/listCat.jsp"></forward> </action> </action-mappings> <!-- 最核心的配置,该配置把Struts的Action交给Spring代理--> <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" /> <!-- controller配置生效后,Action的type属性就是去作用了,Struts不会用type属性指定的类来创建CatAction,而是到Spring配置中寻找,因此Spring中必须配置CatAction --> <!-- Spring中配置Action使用的是name属性而不是id,Spring会截获"/cat.do"的请求,将catService通过setter方法注入到CatAction中,并调用execute()方法--> <bean name="/cat" class=" com.clf.spring.CatAction"> <property name="catService" ref="catService" /> </bean>
<bean id="catBeforeInterceptor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvodor"> <property name="advice"> <bean class="com.clf.spring.MethodBeforeInterceptor" /> </property> <property name="mappedName" value="*"></property> </bean> <bean id="catAfterInterceptor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvodor"> <property name="advice"> <bean class="com.clf.spring.MethodAfterInterceptor" /> </property> <property name="mappedName" value="*"></property> </bean> <bean name="/cat" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="interceptorNames"> <list> <value> catBeforeInterceptor</value> <value> catAfterInterceptor</value> </list> </property> <property name="target"> <bean class="com.clf.spring.CatAction"> <property name="catService" ref="catService"></property> </bean> </property> </bean>
L'intégration de Struts 2
Spring intégrant Struts 2 nécessite le package struts2-spring-2.011.jarpublic class CatAction{ private ICatService catService; private Cat cat; //setter、getter略 public String list(){ catService.listCats(); return "list"; } public String add(){ catService.createCat(cat); return list(); } }
configuration struts.xml
En plus du configuration normale,<constant name=" struts.objectFactory" value="spring" /> <packagenamepackagename="cat" extends="struts-default"> <action name="*_cat" method="{1}" class="catAction"> <param name="action" >{1}</param> <result>/list.jsp</result> <result name="list">/list.jsp</result> </action> </package>
Spring. configuration
<bean id="catAction" scope="prototype" class="com.clf.spring.CatAction"> <property name="catService" ref="catService"></property> </bean>
configuration web.xml
<context-param><!-- Spring配置文件的位置--> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listener><!-- 使用Listener加载Spring配置文件--> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <filter> <filter-name>Struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name> Struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Avantages du framework Spring dans le framework Java
Explication détaillée de SpringAop en Java
Comment utiliser Spring Boot pour faire fonctionner la base de données MySQL
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!