applicationContext.xml
和spring-servlet.xml
在Spring框架无论如何有关系吗?applicationContext.xml
是否可用DispatcherServlet
?*-servlet.xml
?为什么applicationContext.xml
单独不足?ska*_*man 422
Spring允许您在父子层次结构中定义多个上下文.
在applicationContext.xml
定义了豆的"根web应用上下文",即与该web应用程序相关联的上下文.
在spring-servlet.xml
(你怎么称呼它或任何其他)定义了一个servlet的应用程序上下文中的豆.在webapp中可以有很多这样的,每个Spring servlet一个(例如spring1-servlet.xml
对于servlet spring1
,spring2-servlet.xml
对于servlet spring2
).
豆类spring-servlet.xml
可以引用豆类applicationContext.xml
,但反之亦然.
所有Spring MVC控制器都必须在spring-servlet.xml
上下文中.
在大多数简单的情况下,applicationContext.xml
上下文是不必要的.它通常用于包含在webapp中的所有servlet之间共享的bean.如果你只有一个servlet,那么除非你有特定的用途,否则没什么意义.
abi*_*rai 101
在客户端应用程序中(应用程序不是Web应用程序,例如可能是swing app)
private static ApplicationContext context = new ClassPathXmlApplicationContext("test-client.xml");
context.getBean(name);
Run Code Online (Sandbox Code Playgroud)
不需要web.xml.ApplicationContext作为获取bean服务的容器.不需要Web服务器容器.在test-client.xml中可以有Simple bean,没有远程处理,bean有远程处理.
结论:在场景1中,applicationContext DispatcherServlet
与之无关.
在服务器应用程序(部署在服务器中的应用程序,例如Tomcat).通过客户端程序远程访问服务(例如Swing应用程序)
在web.xml中定义侦听器
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)
在服务器启动时,ContextLoaderListener
实例化applicationContext.xml中定义的bean .
假设您已在applicationContext.xml中定义了以下内容:
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Run Code Online (Sandbox Code Playgroud)
bean从所有四个配置文件test1.xml,test2.xml,test3.xml,test4.xml中实例化.
结论:在场景2中,applicationContext DispatcherServlet
与之无关.
在带有spring MVC的Web应用程序中.
在web.xml中定义:
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
当Tomcat启动时,将实例化springweb-servlet.xml中定义的bean .
DispatcherServlet
延伸FrameworkServlet
.在FrameworkServlet
bean实例化中发生springweb.在我们的例子中,springweb是FrameworkServlet.
结论:在场景3中,applicationContext DispatcherServlet
与之无关.
在带有Spring MVC的Web应用程序中.用于servlet和applicationContext.xml的springweb-servlet.xml,用于访问服务器程序中的业务服务或访问另一个服务器程序中的DB服务.
在web.xml中定义了以下内容:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
在服务器启动时,ContextLoaderListener
实例化applicationContext.xml中定义的bean ; 假设您在此声明:
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Run Code Online (Sandbox Code Playgroud)
bean都是从所有四个test1.xml,test2.xml,test3.xml,test4.xml中实例化的.在applicationContext.xml中定义的bean实例化完成之后,将实例化springweb-servlet.xml中定义的bean .
所以实例化顺序是root是应用程序上下文,然后是FrameworkServlet.
现在它清楚地说明了为什么它们在哪种情况下很重要.
Raj*_*aje 53
还有一点我想补充一点.在spring-servlet.xml
我们包括控制器封装元件的扫描.在下面的示例中,我们包含控制器包的过滤器注释.
<!-- Scans for annotated @Controllers in the classpath -->
<context:component-scan base-package="org.test.web" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
Run Code Online (Sandbox Code Playgroud)
在applicationcontext.xml
我们为剩余套餐不包括控制器添加过滤器.
<context:component-scan base-package="org.test">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
Run Code Online (Sandbox Code Playgroud)
Kri*_*hna 10
简单来说,
applicationContext.xml
定义在所有servlet之间共享的bean.如果您的应用程序有多个servlet,那么定义中的公共资源applicationContext.xml
会更有意义.
spring-servlet.xml
定义仅与该servlet相关的bean.这是调度程序servlet.因此,必须在此文件中定义Spring MVC控制器.
spring-servlet.xml
如果在Web应用程序中只运行一个servlet,则定义所有bean中没有任何错误.
在Servlet技术中,如果要将任何输入传递给特定的servlet,则需要传递init param,如下面的代码.
<servlet>
<servlet-name>DBController</servlet-name>
<servlet-class>com.test.controller.DBController</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>John</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DBController</servlet-name>
<url-pattern>/DBController</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
如果你想传递一些对于所有servlet都很常见的put,那么你需要配置上下文参数.例
<context-param>
<param-name>email</param-name>
<param-value>admin@example.com</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
因此,当我们使用Spring MVC时,我们需要向Spring提供的一些信息,即DispatcherServlet通过init param提供一些信息.所以配置就像休闲一样,这里我们提供spring-servlet.xml作为DispatcherServlet的init参数.
<?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_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Spring MVC App</display-name>
<servlet>
<servlet-name>SpringController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringController</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
我们再次需要一些上下文参数.这适用于整个应用.所以我们可以提供applicationcontext.xml的根上下文配置如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationcontext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>SpringController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringController</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
165854 次 |
最近记录: |