applicationContext.xml和spring-servlet.xml在Spring框架无论如何有关系吗?applicationContext.xml是否可用DispatcherServlet?*-servlet.xml?为什么applicationContext.xml单独不足?应用程序上下文和Web应用程序上下文有什么区别?
我知道WebApplicationContext用于面向Spring MVC架构的应用程序?
我想知道ApplicationContextMVC应用程序有什么用?什么样的豆类定义ApplicationContext?
我是春天的新手.
我希望验证以下对SpringMVC生命周期的理解 - 将事物放在整个视图中的位置:
整个过程是由请求驱动的.
有一个Front Controller模式,Spring MVC中的Front Controller是DispatcherServlet.
在每次来自用户的传入请求时,Spring按照此处的描述管理整个生命周期.
在整体视图中,DispatcherServlet将请求分派给后端服务的控制器.完成此操作后,它会将其交给MVC的View组件,以便为响应用户准备其视图.
更详细的,
DispatcherServlet使用Handler来决定为该请求提供"哪个控制器".
控制器应该是"轻量级" - 应该与后端的服务进程分离,作为一种良好的设计实践 - 它们包含对服务的引用并调用正确的服务.他们的"使命"是控制建立模型的服务流程,并将其交还给调度员以进行下一步.
View组件本身有两个部分:首先,ViewResolver为View选择正确的外观类型,以便将模型放入用户的最终格式.
从开发人员的角度来看 - DispatcherServlet是一个幕后的东西.我所做的就是在web.xml中定义并配置它(如有必要).作为开发人员,我实例化一个ApplicationContext(有很多ApplicationContext类型 - 我根据我的需要选择一个,通常是WebApplicationContext(?)).AplicationContext是使用.xml文件中的描述创建包括DispatcherServlet在内的所有servlet/bean的工厂.DispatcherServlet然后在幕后运行并管理整个过程 - 使用注释或其.xml描述,视图,处理程序,验证器等来获取和获取控制器.
我想知道这个描述是否成立 - 有效和完整,以及是否有大的缺失部分.
提前致谢.
我认为@Transactional不适用于其他注释,@Controller或者我有问题和困惑,component-scan因为我得到这个错误:
org.hibernate.HibernateException: No Session found for current thread
Run Code Online (Sandbox Code Playgroud)
这是我的配置文件:
MVC-调度-servlet.xml中
<context:component-scan base-package="controller"/>
<mvc:annotation-driven />
Run Code Online (Sandbox Code Playgroud)
Hibernate.xml
<context:component-scan base-package="controller"/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
....
</bean>
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource">
...
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
...
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
Run Code Online (Sandbox Code Playgroud)
我的测试控制器
@Transactional
@Controller
public class Test {
@Autowired
private SessionFactory sessionFactory;
@RequestMapping(value="/")
public String test() {
...
sessionFactory.getCurrentSession().get(Region.class,1);
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
我的web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>hibernate.xml</param-value>
</context-param>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>mvc-dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> …Run Code Online (Sandbox Code Playgroud)