ssm框架实现登录功能SSM框架注解整合
1.ServletContext
对于⼀个web应⽤,其部署在web容器(⽐如:tomcat)中,web容器提供其⼀个全局的上下⽂环境,这个上下⽂就是ServletContext,它由web容器负责初始化,其为后⾯的spring容器提供宿主环境。
ServletContext是⼀个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。ServletContext提供对应⽤程序中所有Servlet所共有
的各种资源和功能的访问。Servlet上下⽂API⽤于设置应⽤程序中所有Servlet共有的信息,Servlet可能需要共享他们之间的共有信息。运⾏于同⼀服务器的Servlet有时会共享资源,如JSP页⾯、⽂件和其它Servlet。request,⼀个⽤户可有多个;session,⼀个⽤户⼀个;⽽servletContext在整个web应⽤中只有⼀个,所有⽤户也只共⽤⼀个。所以,为了节省空间,提⾼效率,ServletContext中,要放必须的、重要的、所有⽤户需要共享的线程⼜是安全的⼀些信息。
换⼀种⽅式说吧,运⾏在Java虚拟机中的每⼀个Web应⽤程序都有⼀个与之相关的Servlet上下⽂。ServletContext对象是Web服务器中的⼀个已知路径的根,Servlet上下⽂被定位于项⽬名. 以 /项⽬名请求路径(称为上下⽂路径)开始的所有请求被发送到与此ServletContext关联的Web应⽤程序。⼀个ServletContext对象表⽰了⼀个Web应⽤程序的上下⽂。
举例:做⼀个购物类的⽹站,要从数据库中提取物品信息,如果⽤session保存这些物品信息,每个⽤户都访问⼀便数据库,效率就太低了;所以要⽤来Servlet上下⽂来保存,在服务器开始时,就访问数据库,将物品信息存⼊Servlet上下⽂中,这样,每个⽤户只⽤从上下⽂中读⼊物品信息就⾏了。
2. RootWebApplicationContext和DispatcherServletWebApplicationContext
以下简称RootWebApplicationContext为:RootContext,DispatcherServletWebApplicationContext为:DispatcherServletContext。
WebApplicationContext扩展了ApplicationContext,代表的Spring Web的应⽤上下⽂,RootContext由ContextLoaderListener创建,其中存放了各种注册到Spring的⾮Web组件的bean(⽐如service)。RootContext初始化完成后将其存储到ServletContext中,便于获取。在源码中你可以看到这样的
代码:servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, t);//t就
是RootContext
接着是DispatcherServletContext的初始化,它会以RootContext为⽗上下⽂(在DispatcherServletConte
xt中可以引⽤RootContext中的⾮web组件,⽽反过来不⾏。),然后初始化Web相关组件,⽐如控制器,视图解析器等。DispatcherServletContext初始化完毕后将⾃⾝存⼊ServletContext.
相关源码:在初始化DispatherServlet中,org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext()
WebApplicationContext rootContext = WebApplicationContext(getServletContext());//获取RootContext(⾮web组件,⽐如service)WebApplicationContext dispatcherServletContext = this.webApplicationContext;
dispatcherServletContext.setParent(rootContext);//以RootContext为⽗上下⽂
getServletContext().setAttribute(attrName, dispatcherServletContext);//将dispatcherServletContext存⼊ServletContext
继承结构图:
log4j⽇志轨迹:
3. WebApplicationContext和DispatcherServlet上下⽂初始化⽅式
初始化⽅式有两种:Java配置和在l配置,不管是哪种配置⽅式,所做的⼯作差别不⼤。
java配置:在servlet 3.0环境中,web容器会在类路径中查实现了javax.servlet.ServletContainerInitializer接⼝的类,如果能到此类就会⽤它来配置Servlet容器。Spring提供了这个接⼝的实现,名为SpringServletContainerInitializer,这个实现⼜查实现了WebApplicationInitializer接⼝的类。Spring 3.2引⼊了⼀个WebApplicationInitializer的⼀个便利的基础实现类:AbstractAnnotationConfigDispatcherServletInitializer。它会创建DispatcherServleContext和RootContext,现在只需扩展它即可。
(1) SsmContextInitializer.java
(2) RootConfig.java
(3) WebConfig.java
来看看DispatcherServletContext和它的⽗上下⽂RootContext存储的核⼼Bean:
1.DispatcherServletContext:
从图中可以看出:DispatcherServletContext中存储的Bean是与web相关的组件,⽐如视图解析器,处
理器映射等。
2.RootContext(在DispatcherServletContext可以看到它的⽗上下⽂Root):
从图中可以看出:RootContext中存储的Bean是⾮web组件,⽐如Service。
Mybatis
1.在独⽴的Mybatis中的核⼼组件:
1.SqlSessionFactory:⽣成SqlSession(会话),由SqlSessionFactoryBuilder根据配置信息创建。
2.SqlSession:⼀个既可以发送SQL去执⾏并返回结果,也可以获取Mapper的接⼝。
3.SQL Mapper:由mapper配置⽂件(也可以是注解配置)和java接⼝构成,根据给出的mapper配置⽂件来发送SQL去执⾏并返回结构 核⼼编程代码:
(1). l
(2) l
(3) Demo.java
2.在MyBatis-Spring中的核⼼组件:
为了代替⼿⼯使⽤ SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象 (DAO)的代码,MyBatis-Spring 提供了⼀个动态代理的实
现:MapperFactoryBean。这个类可以让你直接注⼊数据映射器接⼝到你的 service 层 bean 中。当使⽤
映射器时,你仅仅如调⽤你的 DAO ⼀样调⽤它们就可以了,但是你不需要编写任何 DAO 实现的代码,因为 MyBatis-Spring 将会为你创建代理。MapperFactoryBean 创建的代理类实现了 UserMapper 接⼝,并且注⼊到应⽤程序中。因为代理创建在运⾏时环境中,那么指定的映射器必须是⼀个接⼝,⽽不是⼀个具体的实现类。
注意:如果 UserMapper 有⼀个对应的 MyBatis 的 XML 映射器⽂件, 如果 XML ⽂件在类路径的位置和映射器类相同时, 没有必要在去指定映射器,它会被MapperFactoryBean ⾃动解析,反之亦然。我们⼀般会将Mapper接⼝的类完全限定名和l配置⽂件的命名空间写成⼀致。
核⼼bean的创建:配置在⾮web组件(上⽂的RootConfig.java)中
1.javax.sql.DataSource:创建它的实现类即可,⽐如org.apache.ibatis.datasource.pooled.PooledDataSource;
解释:配置url,driver,userName,password;
batis.spring.SqlSessionFactoryBean
解释:配置SqlSessionFactory,主要提供数据源和mapper配置⽂件
batis.spring.mapper.MapperFactoryBean
解释:为对应的Mapper接⼝创建代理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论