科猫网项目总计,以及web容器的涉嫌

科猫网项目总计,以及web容器的涉嫌。  提及spring和springmvc,其实有为数不少做事诸多年的人也分不清他们有何分别,如若你问她项目里用的什么MVC技能,他会说咱俩用的spring和mybatis,恐怕spring和hibernate。

过滤器

Servlet中的过滤器Filter是促成了javax.servlet.Filter接口的服务器端程序,首要的用处是过滤字符编码、做一些业务逻辑推断等。其行事原理是,只要你在web.xml文件配置好要阻止的客户端请求,它都会帮您拦截到请求,此时您就能够对请求或响应(Request、Response)统1设置编码,简化操作;同临时间还足以举办逻辑判定,如用户是不是曾经报到、有未有权力访问该页面等等专门的学问,它是随你的web应用运营而运转的,只起先化三遍,现在就足以阻挡相关的请求,只有当你的web应用结束或重新计划的时候本领销毁。

在javax.servlet.Filter接口中定义了1个点子:

 void init(FilterConfig
filterConfig) 用于完毕过滤器的初始化

 void
destroy() 用于过滤器销毁前,完毕有个别能源的回收

 void
doFilter(ServletRequest request, ServletResponse response,FilterChain
chain) 达成过滤效果,该方法对各种请求增添额外的管理

 

package com.cn.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FilterUtil implements Filter{

    @SuppressWarnings("unused")
    private FilterConfig filterConfig;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        System.out.println("过滤器Filter初始化");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) {
            throw new ServletException("FilterUtil just supports HTTP requests");
        }
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        httpRequest.setCharacterEncoding(this.filterConfig.getInitParameter("encoding"));
        httpResponse.setCharacterEncoding(this.filterConfig.getInitParameter("encoding"));
        chain.doFilter(httpRequest, httpResponse);
    }

    @Override
    public void destroy() {
        System.out.println("过滤器Filter销毁");
    }

}

 

web.xml配置:

 

<filter>
    <filter-name>encodingFilter</filter-name>
    <!-- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> -->
    <filter-class>com.cn.util.FilterUtil</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

1.布局文件的拉长

到方今停止,对后台java的mvc框架大致有个印象。

在无意里会以为springmvc正是spring,在此之前本身也是如此以为的,哈哈。 

监听器

Servlet的监听器Listener,它是贯彻了javax.servlet.ServletContextListener接口的劳务器端程序,它也是随web应用的起步而运行,只发轫化叁遍,随web应用的告一段落而销毁。首要职能是:做一些起先化的源委增添职业、设置有个别基本的内容、比方部分参数也许是有个别定位的目的等等。

在javax.servlet.ServletContextListener接口中定义了二种办法:

  void
contextInitialized(ServletContext伊夫nt sce) 监听器的开始化

  void
contextDestroyed(ServletContext伊夫nt sce) 监听器销毁

 

package com.cn.util;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ServletContextListenerUtil implements ServletContextListener{

    //监听器的初始化
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("监听器ServletContextListenerUtil初始化");
    }

    //监听器销毁
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("监听器ServletContextListenerUtil销毁");
    }
}

 

系列运转时,先运转监听器,再起步过滤器。

SSM整合供给web.xml配置文件,springmvc的配备文件,spring和mybatis整合的安插文件。

web
java的工程,一般环绕着servlet做框架,包罗struts、spring等都以对servlet的主导实行打包。首要的布置文件是web.xml文件,包含listener、context-param、servlet、servlet-mapping、filter等要害配置项。

  纵然springMVC和spring有必然的联络,可是她们的区别也是部分。下边笔者就简单描述下

拦截器

拦截器是在面向切面编制程序中动用的,正是在你的service或然3个措施前调用一个措施,也许在点子后调用3个艺术举个例子动态代理就是拦截器的回顾达成,在您调用方法前打字与印刷出字符串(大概做别的工作逻辑的操作),也得以在您调用方法后打字与印刷出字符串,乃至在你抛出非常的时候做专门的工作逻辑的操作。拦截器不是在web.xml配置的,举个例子struts在struts.xml配置,在springMVC在spring与springMVC整合的布署文件中配备。

在springmvc中,定义拦截器要贯彻HandlerInterceptor接口,并完毕该接口中提供的四个章程

 

package com.cn.util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class InterceptorUtil implements HandlerInterceptor{

    //进入Handler方法之前执行
    //可以用于身份认证、身份授权。如果认证没有通过表示用户没有登陆,需要此方法拦截不再往下执行,否则就放行
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("InterceptorUtil...........preHandle");
        String user= (String) request.getSession().getAttribute("user");
        if(user != null){
            return true;
        }
        request.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(request, response);
        //true表示放行,false表示不放行
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("InterceptorUtil...........postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub
        System.out.println("InterceptorUtil...........afterCompletion");
    }

}

 

 
preHandle方法:进入Handler方法从前施行。能够用来身份验证、身份授权。比方假如注明未有经过代表用户并没有登录,必要此情势阻碍不再往下进行(return
false),否则就放行(return true)。
 
postHandle方法:进入Handler方法之后,再次回到ModelAndView以前实践。能够看出该方法中有个modelAndView的形参。应用场景:从modelAndView出发:将公用的模型数据(比方菜单导航等等的)在这里流传视图,也得以在那边同一钦命视图。
 
afterCompletion方法:实施Handler完毕之后试行。应用场景:统一十分处理,统八日志管理等。
在springmvc中,拦截器是对准具体的HandlerMapping实行配置的,也正是说假使在有个别HandlerMapping中配备拦截,经过该
HandlerMapping映射成功的handler最终采纳该拦截器。

spring-mvc.xml配置文件中:

 

<!-- 拦截器配置 -->
<mvc:interceptors>
        <!--多个拦截器,顺序执行 -->
     <!-- 登陆认证拦截器 -->
     <mvc:interceptor>
            <!-- /** 表示拦截所有url包括子url路径,/*只拦截根下的url -->
            <mvc:mapping path="/**"/>
            <bean class="com.cn.util.InterceptorUtil"></bean>
     </mvc:interceptor>
     <!-- 其他拦截器 -->
</mvc:interceptors>

 

在网上查询的过滤器和拦截器的分裂,基本都是以下毫无贰致的伍行话。
1、拦截器是基于java的反射机制的,而过滤器是依据函数回调
贰、过滤器依赖与servlet容器,而拦截器不依据与servlet容器
三、拦截器只好对action请求起效果,而过滤器则能够对大致具有的哀告起效果
4、拦截器能够访问action上下文、值栈里的靶子,而过滤器不可能
5、在action的生命周期中,拦截器能够屡屡被调用,而过滤器只还好容器初始化时被调用一遍

奉行顺序:过滤前 –
拦截前 – Action管理 – 拦截后
-过滤后。个人感到过滤是四个横向的长河,首先把客户端提交的源委展开过滤(举个例子未登入用户不可能访问内部页面包车型客车管理);过滤通过后,拦截器将检查用户提交数据的验证,做一些开始的一段时期的数目管理,接着把拍卖后的数码发给相应的Action;Action管理完了再次来到后,拦截器还足以做任何进程,再发展再次来到到过滤器的后续操作。

过滤器(Filter):当您有一批东西的时候,你只希望选取符合您供给的某某个东西。定义那个要求的工具,正是过滤器。
科猫网项目总计,以及web容器的涉嫌。拦截器(Interceptor):在1个流水生产线正在拓展的时候,你愿意干预它的实行,以至结束它举办,那是拦截器做的事体。
监听器(Listener):当三个事件发生的时候,你期望获得那几个事件时有爆发的详细消息,而并不想干预这么些事件小编的历程,这将在用到监听器。

一.web.xml文件的布置

listener用于配置上下文监听器

  首先
springmvc和spring它俩都以容器,容器就是处理对象的地点,比方汤姆cat,就是治本servlet对象的,而springMVC容器和spring容器,正是管理bean对象的位置,再说的直白点,springmvc正是管制controller对象的器皿,spring正是治本service和dao的容器,那下你通晓了吧。因而大家在springmvc的配备文件里安顿的扫描路线正是controller的渠道,而spring的安顿文件里自然配的正是service和dao的路线

1.在WEB-INF下新建web.xml

context-param设置容器加载时的配置文件

  spring-mvc.xml

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

servlet配置框架的IOC;servlet-mapping配置需求分发的url路线

<context:component-scan base-package="com.smart.controller" />

上面调节springmvc的servlet,上边调控什么文件会走springmvc

filter配置自定义的过滤器,全体url在开始展览响应以前所做的管理

  applicationContext-service.xml

<servlet-name>标签的命名影响到XXX-servlet.xml文件的命名 

springmvc框架

   
 springmvc框架对servlet实行反转代理IOC,以spring作为容器;springMVC加载的dispatcherServlet分发器,对应的配备文件spring-mvc.xml文件。我们那从来将spingmvc作为对外提供接口的种类,通过json进行电视发表。

spring-mvc.xml主要陈设项:

一、context:component-scan  
定义须求扫描的包,同不常候开启mvc:annotation-driven  

三、mvc:resource  
设置无需dispatcherhandler分发的财富,同有时间相应的开启mvc:default-servlet-handler

四、bean  
 设置总计validator、validatorMessageSource、mutilpartResolver、annotationMethodHandlerAdapter等内容

5、aop:aspectj-autoproxy  
设置全局的AOP,近期任重(Ren Zhong)而道远用在作业日志和那多少个日志。基于controller层管理输入输出和职业逻辑的设想,业务日志用在章程调用完事后张开记录;基于service层对mapper和别的系统接口等网络调用的思索,格外日志在service方法抛出极度之后张开调用,那样service层除非一些您不想记录的充裕自定义管理现在,别的都由艺术抛出就可以。

<!-- 扫描包加载Service实现类 -->
    <context:component-scan base-package="com.smart.service"></context:component-scan>
或者

<context:component-scan base-package="com.smart">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

 

controller

@controller @RequsetMapping(“/”)   针对class

@ResponseBody  @RequestMapping(“/”)   针对实际接口

@Valid  
对入参进行验证。1种是insert操作,要求证实;而对此查询操作,则最棒直接request获取而不是实体映射

@Autowired   注入service层的类

 

2.在web.xml中新增Listener标签

service

@Service  针对class

@Autowired  注入可选择的service

@Resource   注入mapper的类

@Transactional

  至于她是怎么管理起来的,又是怎么注入属性的,那就提到到她们底层的贯彻手艺了
  其次,
spring容器和springmvc容器的关系是老爹和儿子容器的涉嫌。spring容器是父容器,springmvc是子容器。在子容器里可以访问父容器里的目的,可是在父容器里不得以访问子容器的靶子,说的通俗点就是,在controller里能够访问service对象,然则在service里不可以访问controller对象

   

mapper

    重假使用mybatis

*  所以这么看的话,全部的bean,都是被spring可能springmvc容器管理的,他们能够直接注入。接下来springMVC的拦截器也是springmvc容器管理的,所以在springmvc的拦截器里,可以间接流入bean对象。*

 <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>

model

    设置bean,一般用来插入

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/employee/**" ></mvc:mapping>
            <bean class="com.smart.core.shiro.LoginInterceptor" ></bean>
        </mvc:interceptor>
    </mvc:interceptors>

ContextLoaderListener的效应就是运行Web容器时,自动装配ApplicationContext( 能够用来得到Spring容器中已起头化的bean**)的布署音信。因为它达成了ServletContextListener这么些接口,在web.xml配置这些监听器,运转容器时,就可以暗中认可实施它达成的点子。

filter

   
过滤器能够在切实可行响应以前做一些预管理,包含:接口的session统壹验证、url中防注入,以及对此COLX570S时的response的设置等。

 

要是要对spring的陈设文件地点,名称举行点名(框架中的配置文件都得以对名称地方进行点名,springmvc则是在web.xml中增加<init-param>),能够拉长:

AOP切片

   
对于一些公家的模块提收取作为二个措施,能够获得出入参、方法签名等;通过session设置有个别艺术,首要用来调用前、调用后、非常、环绕等多个切入点。

其它点:

一、上传文件及excel文件分析;

2、FTP操作

叁、proxool数据库连接池

肆、线程序调节制


  

  *而web容器又是什么样鬼,
  web容器是管制servlet,以及监听器(Listener)和过滤器(Filter)的。
这么些都以在web容器的掌握控制范围里。但他俩不在spring和springmvc的掌握控制范围里**。因此,大家不能够在那一个类中一直利用Spring注明的法子来注入大家必要的靶子,是无用的,
web容器是心有余而力不足辨识的。

 <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/applicationContext.xml</param-value>
    </context-param>

  但大家有的时候又真的会有诸如此类的急需,举个例子在容器运维的时候,做一些认证或然初叶化操作,那时或许会在监听器里用到bean对象;又可能需求定义多少个过滤器做一些梗阻操作,也可能会用到bean对象。
那正是说在这个地点怎么获取spring的bean对象呢?下边小编提供四个法子:

classpath:spring/applicationContext.xml也能够简化为/WEB-INF/applicationContext.xml

1、

当大家不对地点举办布局,则暗中同意地方为WEB-INF,文件名为:applicationContext.xml(其功效是spring和mybatis的结合)

public void contextInitialized(ServletContextEvent sce) {
  ApplicationContext context = (ApplicationContext) sce.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); 
  UserService userService = (UserService) context.getBean("userService");
}

 

 

三.任何的竹签

2、

<servlet-mapping>
     <servlet-name>springmvc</servlet-name>    需要与上面名称相对应
     <url-pattern>*.action</url-pattern>    哪些路径要走springmvc
</servlet-mapping>

<welcome-file-list>
     <welcome-file>index.jsp</welcome-file>    指定起始页
</welcome-file-list>
public void contextInitialized(ServletContextEvent sce) {
  WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()); 
  UserService userService = (UserService) webApplicationContext.getBean("userService"); 
}

贰.spring-servlet.xml文书的布局

  注意:以上代码有二个前提,那就是servlet容器在实例化ConfigListener并调用其方法在此以前,要力保spring容器已经起初化完成!而spring容器的起初化也是由Listener(ContextLoaderListener)完结,由此只需在web.xml中先配备发轫化spring容器的Listener,然后在安排本身的Listener。

spring-servlet.xml也等于springmvc的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<!-- 使用注释方式 -->
     <mvc:annotation-driven/>
<!-- 自动扫描Controller-->
     <context:component-scan base-package="controller"/>
<!-- 配置一个springMVC视图解析器 -->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="prefix" value= ""/>
         <property name="suffix" value= ".jsp"/>
     </bean>
<!-- 返回json的处理 -->
     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
         <property name="messageConverters">
             <list>
                 <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                     <property name="supportedMediaTypes">
                         <list>
                             <value>text/html; charset=UTF-8</value>
                             <value>application/json;charset=UTF-8</value>
                         </list>
                     </property>
                 </bean>
                 <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                     <property name="supportedMediaTypes">
                         <list>
                             <value>text/html; charset=UTF-8</value>
                             <value>application/json;charset=UTF-8</value>
                         </list>
                     </property>
                 </bean>
             </list>
         </property>
     </bean>
</beans>

行使springMVC有xml配置与申明配置,这里用申明配置

 

1.引入mvc和context的命名空间

www.5929.com,mvc:

xmlns:mvc="http://www.springframework.org/schema/mvc"  
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd

context:

xmlns:context="http://www.springframework.org/schema/context" 
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd

 

二.设置申明驱动

<mvc:annotation-driven/>

 

叁.机动实例化路线(必要改造)

 

<context:component-scan base-package=”controller”/>

 

  
在xml配置了那一个标签后
spring能够自动去扫描base-pack下边只怕子包上面包车型大巴Java文本,假设扫描到有@Component
@Controller@Service等这一个注明的类,则把那几个类注册为bean

倘使增添@Controller,spring会为内部的类成立实例

@Controller 标记 web 调节器, @Service 表明 Service 层的劳动, @Respository 标记 DAO层的数额访问。 @Component 是通用标明,只是概念为贰个类为 Bean , SpringMVC 会把持有增添 @Component 注脚的类作为利用机动扫描注入配置路线下的预备对象。 @Controller 、 @Service\@Respository 只是更加的细化

 

三.applicationContext.xml文件的配置

 

applicationContext.xml也等于spring和mybatis整合的陈设文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-4.1.xsd
          http://www.springframework.org/schema/tx
          http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
          http://www.springframework.org/schema/aop
          http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">

          <context:component-scan base-package="dao"/>
          <context:property-placeholder location="classpath:db.properties" />

         <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">
             <!-- 初始化连接数量; -->
             <property name="initialSize" value="0" />
             <!-- 最大并发连接数   -->
             <property name="maxActive" value="20" />

             <!-- 最大空闲连接数 -->
             <property name="maxIdle" value="20" />
             <!-- 最小空闲连接数 -->
             <property name="minIdle" value="0" />
             <!-- 最大等待时长 -->
             <property name="maxWait" value="60000" />
             <!-- 超过时间限制是否回收 -->
             <property name="removeAbandoned" value="true" />
             <!-- 超过时间限制多长; -->
             <property name="removeAbandonedTimeout" value="180"/>


             <!-- 数据源连接参数配置; -->
             <property name="username" value="${db.username}"/>
             <property name="url" value="${db.url}"/>
             <property name="password" value="${db.password}"/>
             <property name="driverClassName" value="${db.driver}"/>

         </bean>

<!-- 配置SessionFactory -->
     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
           <property name="dataSource" ref="dataSource"/>
<!-- <property name="mapperLocations" value="classpath:mapper/*.xml" /> -->
           <property name="mapperLocations">
             <list>
                 <value>classpath:config/*.xml</value>
             </list>
           </property>
     </bean>

<!-- 自动扫描mapper接口,注入sqlSessionFactory -->
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <property name="basePackage" value="mapper"/>
     </bean>

<!-- 配置事务管理器 -->
     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"/>
     </bean>

<!-- <tx:annotation-driven transaction-manager="transactionManager"  proxy-target-class="true"/> -->
<!-- 定义切面 -->
     <aop:config>
     <aop:pointcut expression="execution(* dao.*.* (..))" id="txPointCut"/>
     <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
     </aop:config>

<!-- 声明式事务 -->
     <tx:advice id="txAdvice" transaction-manager="transactionManager">
     <tx:attributes>
           <tx:method name="isValid" propagation="REQUIRED" read-only="true"/>
           <tx:method name="add" propagation="REQUIRED" read-only="true"/>
     </tx:attributes>
     </tx:advice>

</beans>
1.自动实例化对象包的指定(需要改动)
<!-- 开启自动初始化标签:添加Component就可以自动将类初始化 -->
     <context:component-scan base-package="dao"></context:component-scan>
为dao的类前面添加注解:
@Component
表示自动创建实例,而controller的类也是需要自动创建实例的,但是其由springMVC来完成了(添加了@Controller)
2.数据库信息文件的指定
<context:property-placeholder location="classpath:db.properties" />
表示在src目录下的db.properties文件(需要改动)
3.数据源dataSource使用dbcp
4.配置SessionFactory
<!-- 配置SessionFactory -->
     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
           <property name="dataSource" ref="dataSource"/>
<!-- <property name="mapperLocations" value="classpath:mapper/*.xml" /> -->
           <property name="mapperLocations">
             <list>
                 <value>classpath:config/*.xml</value>
             </list>
           </property>
     </bean>

id是一向的,一定不可能写错(要修改很辛劳)

Mybatis和spring的3结合供给充分 SSM整合完全Jar包”(就要作品最终提供下载链接)

dataSource连数据库供给:

一.dataSource要和前面的价签对得上

二.映射文书的岗位,所以钦赐config/*.xml

那边把接口放在名字为mapper的包中,而映射文件放在config包中

 

五.点名接口的职位

<!-- 自动扫描mapper接口,注入sqlSessionFactory -->
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <property name="basePackage" value="mapper"/>
     </bean>

点名接口的价签也会暗许找sqlSessionFactory,假诺地点修改过,这里就得举行拍卖

 

陆.增添事务管理器&切面&事务

<!-- 配置事务管理器 -->
     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"/>
     </bean>

<!-- <tx:annotation-driven transaction-manager="transactionManager"  proxy-target-class="true"/> -->
<!-- 定义切面 -->
     <aop:config>
     <aop:pointcut expression="execution(* dao.*.* (..))" id="txPointCut"/>
     <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
     </aop:config>

<!-- 声明式事务 -->
     <tx:advice id="txAdvice" transaction-manager="transactionManager">
     <tx:attributes>
           <tx:method name="isValid" propagation="REQUIRED" read-only="true"/>
           <tx:method name="add" propagation="REQUIRED" read-only="true"/>
     </tx:attributes>
     </tx:advice>
attributes标签中用REQUIRED,表示运行到isValid方法的时候有事务就运行事务,没事务就创建事务。
4.mybatis-cfg.xml的配置
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

    <properties resource="db.properties"></properties>
    <!-- 对事务的管理和连接池的配置 -->

    <environments default="development">

        <environment id="kcat">

            <transactionManager type="JDBC" />     事务管理器的类型

            <dataSource type="POOLED">              连接池的方式

                <property name="driver" value="${db.driver}" />

                <property name="url" value="${db.url}" />

                <property name="username" value="${db.username}" />

                <property name="password" value="${db.password}" />

            </dataSource>

        </environment>

    </environments>

    <!-- mapping 文件路径配置 -->

    <mappers>

          <!--<mapper resource="javastudy/userMapper.xml"/> -->
          <!-- <mapper class="javastudy.CourseMapper"/> -->
          <mapper class="mapper.BangMapper"/>

    </mappers>

</configuration>

environments(碰着)标签的default能够友善取名

environment(二个蒙受连三个数据库)标签的id相当于本人起名字,后面会用到,这里用kcat

 

二.疏解的使用

到这里就整合完了SSM情形,上边将要采取申明

因为applicationContext.xml已经对dao包实行了扫描,所以假设加上注脚就能够自动生成实例化对象。

www.5929.com 1

 

有了dao,那么在controller中就能够进行注入

 

www.5929.com 2

调整器Controller 担负管理由DispatcherServlet
分发的哀告,它把用户请求的多少经过专门的学问管理层管理以往封装成1个Model
,然后再把该Model 重临给相应的View 举办展示。

具有与@Resource表明所提供名字相相配的“bean
name(bean名字)”的Spring管理对象会被注入

@responseBody注脚的遵守是将controller的方法重回的指标通过适当的转换器调换为内定的格式之后,写入到response对象的body区,常常用来回到JSON数据依旧是XML

3.SSM的MVC目录结构

www.5929.com 3

1.config包

config包放置的为照射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.BangMapper">
     <select id="get"  resultType="model.Bang">
          select * from bang
     </select>
</mapper>

name space是用以绑定Dao接口的,即面向接口编制程序

resultType重回类型

上面编辑查询用的sql语句

 

2.controller包

MVC的主干便是Controller(调整器),它肩负管理浏览器传送过来的保有请求,并调控要将什么内容响应给浏览器。但Controller并不负责调控内容应当怎么呈现,而是将一定形态的剧情响应给MVC架构,最终才由MVC架构依赖响应的造型来调控哪些将内容响应给浏览器。怎么着支配响应内容是View的职责。

package controller;

import java.io.IOException;
import java.util.ArrayList;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody;

import dao.BangDAO;
import model.Bang;

@Controller
public class BangController {
    BangDAO dao;

    public BangDAO getDao() {
        return dao;
    }
    @Resource
    public void setDao(BangDAO dao) {
        this.dao = dao;
    }

    @ResponseBody
    public ArrayList<Bang> get() throws IOException{
        ArrayList<Bang> list=dao.get();
        return list;
    }

}

3.dao包
一般程序都是用模型层与数据库进行交互,而dao层则用于程序对数据库的操作,所以认为dao层属于模型层。
也有这样的看法,把dao层看做MVC框架之外的单独的一层,称之为数据持久层

package dao;

import java.util.ArrayList;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import mapper.BangMapper;
import model.Bang;

@Component
public class BangDAO {
    BangMapper bangMapper;

    public BangMapper getBangMapper() {
        return bangMapper;
    }
    @Resource
    public void setBangMapper(BangMapper bangMapper) {
        this.bangMapper = bangMapper;
    }
    public ArrayList<Bang> get(){
        ArrayList<Bang> list=bangMapper.get();
        return list;
    }
}

4.mapper包
mapper包用来放置DAO接口
package mapper;

import java.util.ArrayList;

import model.Bang;

public interface BangMapper {
    public ArrayList<Bang> get();
}
5.model包
放置模型类,可以看做表
package model;

public class Bang {
     private int id;
     private String videoName;
     private int videoType;
     private String videoUrl;
     private String videoImage;
     private String videoExplain;
     public int getId() {
          return id;
     }
     public void setId(int id) {
          this.id = id;
     }
     public String getVideoName() {
          return videoName;
     }
     public void setVideoName(String videoName) {
          this.videoName = videoName;
     }
     public int getVideoType() {
          return videoType;
     }
     public void setVideoType(int videoType) {
          this.videoType = videoType;
     }
     public String getVideoUrl() {
          return videoUrl;
     }
     public void setVideoUrl(String videoUrl) {
          this.videoUrl = videoUrl;
     }
     public String getVideoImage() {
          return videoImage;
     }
     public void setVideoImage(String videoImage) {
          this.videoImage = videoImage;
     }
     public String getVideoExplain() {
          return videoExplain;
     }
     public void setVideoExplain(String videoExplain) {
          this.videoExplain = videoExplain;
     }
     @Override
     public String toString() {
          return "Bang [id=" + id + ", videoName=" + videoName + ", videoType=" + videoType + ", videoUrl=" + videoUrl
                   + ", videoImage=" + videoImage + ", videoExplain=" + videoExplain + "]";
     }

}

6.utility包

MybatisUtils作为工具类读取配置文件 

package utility;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtils {
    public static SqlSession openSession() throws IOException
    {
            String resource = "mybatis-cfg.xml";
            InputStream in = Resources.getResourceAsStream(resource);
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in,"kcat");  //这里要对应mybatis-cfg.xml的environment id
            return sessionFactory.openSession();
    }
}

 

SqlSessionFactoryBuilder().build(in,”kcat”);后边的id地点要对应mybatis-cfg.xml的environment标签的id

 

=========================================

附件下载地址:

SSM整合完全Jar包:链接:  (10M)

Leave a Comment.