spring—springmvc

1.在WEB应用中使用Spring
   1.创建IOC容器对象
   2.Web应用工作阶段:初始化阶段-->请求响应阶段--->卸载前清理
   3.Web应用初始化阶段【只创建一次】将IOC容器对象创建出来,并保存到application域中【让在同一个web应用下的都能访问同一个IOC容器】
       
       pageContext
       request
       session
       application/servletContext
       
   4.web应用创建IOC容器
     1.在web.xml文件中配置Spring提供的一个监听器创建IOC容器对象
        org.springframework.web.context.ContextLoaderListener
     2.配置Web应用的初始化参数告诉Spring,配置文件的位置
     3.需要导入Spring在web应用中专用的jar包
       spring-web-4.0.0.RELEASE.jar
       spring-webmvc-4.0.0.RELEASE.jar       

 1      <!-- 配置加载Spring IOC容器的监听器 -->
 2         <context-param>
 3             <param-name>contextConfigLocation</param-name>
 4             <param-value>classpath:applicationContext.xml</param-value>
 5         </context-param>
 6
 7         <!-- Bootstraps the root web application context before servlet initialization -->
 8         <listener>
 9             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
10         </listener>     

7.Spring整合SpringMVC!
   实际上SpringMVC就运行在Spring环境之下,还有必要整合么?
   SpringMVC和Spring都有IOC容器,是不是都需要保留呢?
 
  答案是:通常情况下,类似于数据源,事务,整合其他框架都是放在spring的配置
          文件中(而不是放在SpringMVC的配置文件中),实际上放入Spring配置文件对
          应的IOC容器中的还有Service和Dao.而SpringMVC也搞自己的一个IOC容器,在
          SpringMVC的容器中只配置自己的Handler信息。
          
    1.导入Spring和SpringMVC的所有jar包
        c3p0-0.9.1.2.jar
        com.springsource.net.sf.cglib-2.2.0.jar
        com.springsource.org.aopalliance-1.0.0.jar
        com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
        commons-logging-1.1.3.jar
        mysql-connector-java-5.1.37-bin.jar
        spring-aop-4.0.0.RELEASE.jar
        spring-aspects-4.0.0.RELEASE.jar
        spring-beans-4.0.0.RELEASE.jar
        spring-context-4.0.0.RELEASE.jar
        spring-core-4.0.0.RELEASE.jar
        spring-expression-4.0.0.RELEASE.jar
        spring-jdbc-4.0.0.RELEASE.jar
        spring-orm-4.0.0.RELEASE.jar
        spring-tx-4.0.0.RELEASE.jar
        spring-web-4.0.0.RELEASE.jar
        spring-webmvc-4.0.0.RELEASE.jar
        
     2.在web.xml文件中分别配置SpringMVC和Spring的配置信息

 1     <!--spring配置-->
 2 <context-param>
 3                     <param-name>contextConfigLocation</param-name>
 4                     <param-value>classpath:applicationContext.xml</param-value>
 5                 </context-param>
 6
 7                 <listener>
 8                     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 9                 </listener>
10  <!--springmvc配置-->
11 <servlet>
12                     <servlet-name>springDispatcherServlet</servlet-name>
13                     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
14                     <init-param>
15                         <param-name>contextConfigLocation</param-name>
16                         <param-value>classpath:springmvc.xml</param-value>
17                     </init-param>
18                     <load-on-startup>1</load-on-startup>
19                 </servlet>
20
21                 <servlet-mapping>
22                     <servlet-name>springDispatcherServlet</servlet-name>
23                     <url-pattern>/</url-pattern>
24                 </servlet-mapping>
25                 <!--POST请求的乱码处理-->
26                 <filter>
27                     <filter-name>CharacterEncodingFilter</filter-name>
28                     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
29                     <init-param>
30                         <param-name>encoding</param-name>
31                         <param-value>utf-8</param-value>
32                     </init-param>
33                 </filter>
34
35                 <filter-mapping>
36                     <filter-name>CharacterEncodingFilter</filter-name>
37                     <url-pattern>/*</url-pattern>
38                 </filter-mapping>
39
40                 <filter>
41                     <filter-name>HiddenHttpMethodFilter</filter-name>
42                     <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
43                 </filter>
44                 <filter-mapping>
45                     <filter-name>HiddenHttpMethodFilter</filter-name>
46                     <url-pattern>/*</url-pattern>
47                 </filter-mapping>

3.配置spring的配置文件和springmvc的配置文件
             spring的配置文件:
                    <!-- 配置扫描的包 -->
                    <context:component-scan base-package="com.neuedu"></context:component-scan>
                    <!-- 加载properties文件中 信息 -->
                    <context:property-placeholder location="classpath:jdbc.properties"/>
                    <!-- 配置数据源 -->
                    <bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
                        <property name="user" value="${jdbc.user}"></property>
                        <property name="password" value="${jdbc.passowrd}"></property>
                        <property name="jdbcUrl" value="${jdbc.url}"></property>
                        <property name="driverClass" value="${jdbc.driver}"></property>
                    </bean>
                    
                    <!-- 配置JdbcTemplate对应的bean, 并装配dataSource数据源属性-->
                    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
                        <property name="dataSource" ref="comboPooledDataSource"></property>
                    </bean>
                    <!-- 为了执行带有具名参数的SQL语句,需要配置NamedParameterJdbcTemplate -->
                    <!-- 该NamedParameterJdbcTemplate类没有无参构造器,需要传入JdbcTemplate对象或者数据源对象[DataSource] -->
  
                 <bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
                        <!-- 不能使用property标签配置哦 -->
                        <constructor-arg ref="jdbcTemplate"></constructor-arg>
                    </bean>
                    
            springmvc的配置文件:              
                <context:component-scan base-package="com.neuedu"></context:component-scan>
                
                <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                    <property name="prefix" value="/WEB-INF/views/"></property>
                    <property name="suffix" value=".jsp"></property>
                </bean>
                <mvc:default-servlet-handler/>
                <mvc:annotation-driven></mvc:annotation-driven>
           
        加入jdbc.properties文件
            jdbc.user=root
            jdbc.passowrd=123456
            jdbc.url=jdbc:mysql://localhost:3306/jdbc_template
            jdbc.driver=com.mysql.jdbc.Driver
            
      4.创建Controller类与Service类,并创建这两个类的无参构造器,分别输出一句话!
      
      5.启动项目,会发现controller构造器和service构造器都执行了两次!
        问题:若Spring的IOC容器和SpringMVC的IOC容器扫描的包有重合的部分,就会导致有的
             bean会被创建2次!
        解决:
            1.使Spring的IOC容器扫描的包和SpringMVC的IOC容器扫描的包没有重合的部分!
              controller层都在controller包,service层都在service包
            2.但是有的时候开发的时候是分模块开发的,这样不太容易做到,所以:
              可以在component-scan标签下面中使用如下子标签来规定只能扫描的注解:
                   <context:component-scan base-package="com.neuedu">
                    <context:exclude-filter type="annotation" expression=""/>
                    <context:include-filter type="annotation" expression=""/>
                </context:component-scan>
        
            所以在springMVC的配置文件中我们可以按着如下配置,只扫描controller及ControllerAdvice注解:
                 <context:component-scan base-package="com.neuedu" use-default-filters="false">
                    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
                    
  
                 <context:include-filter type="annotation"
expression="org.springframework.web.bind.annotation.ControllerAdvice"/><!--
处理全局异常 -->
                </context:component-scan>
              
 
            而在spring的配置文件中:
                <context:component-scan base-package="com.neuedu">
                    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  
                 <context:exclude-filter type="annotation"
expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
                </context:component-scan>
       
       此时再重新启动项目就会发现spring和springmvc的对象都创建了一份!
       
      6.Spring的IOC容器和SpringMVC的IOC容器的关系
         注意:
            1.SpringMVC容器中的bean可以引用Spring容器中的bean,
              也就是在Controller中我们可以注入service层对象【可以在controller层的requestMapping方法中打印service对象试一下】!
            2.反之则不行,就是说:在spring扫描的service层不能引用springmvc的handler
              对象【注解一个小例子,启动项目就会出错】
            3.实际上Spring的容器和Spring容器有父子间关系,【参考图片】就想儿子可以继承父亲的基因一样,父亲没法继承儿子的基因!
              而且从另一个角度也说明了Handler是可以依赖Service层的,但是Service层却不可以依赖Handler层!

时间: 2024-09-30 04:15:20

spring—springmvc的相关文章

基于Spring+SpringMVC+Mybatis的Web系统搭建

主要的后端架构:Spring+SpringMVC+Mybatis+Shiro+Maven  IDE:IntelliJ IDEA 15.0.2 jdk:1.8.0_66 系统完整源码 https://github.com/Wellat/Factor 系统目录结构 跑起来效果 搭建步骤 1.用Idea创建maven项目 2.配置pom.xml文件,添加依赖 1 <?xml version="1.0" encoding="UTF-8"?> 2 <proj

SSM框架 (Spring+SpringMVC+MyBatis)

SSM框架--详细整合教程(Spring+SpringMVC+MyBatis) springspringmvcmybatis整合教程ssm整合 1.基本概念  1.1.Spring          Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是为了解决企业应用开发的复杂性而创建的.Spri

spring(一)--spring/springmvc/spring+hibernate(mybatis)配置文件

这篇文章用来总结一下spring,springmvc,spring+mybatis,spring+hibernate的配置文件 1.web.xml 要使用spring,必须在web.xml中定义分发器等信息,基本的配置信息如下: <?xml version="1.0" encoding= "UTF-8"?> <web-app version= "3.0" xmlns="http://java.sun.com/xml/n

SSM框架整合(Spring+SpringMVC+MyBatis)

[SSM的系统架构] [整合概述] 第一步: MyBatis和Spring整合,通过Spring管理mapper接口. 使用mapper的扫描器自动扫描mapper接口在Spring中进行注册. 第二步: 通过Spring管理Service接口. 使用配置方式将Service接口配置在Spring配置文件中. 实现事务控制. 第三步: 由于SpringMVC是Spring的模块,无需整合这两个. [工程截图] [数据库的items] [ 表结构 ] [ 表内数据 ] [1.整合dao]将Myba

Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试

承接上文,该篇即为项目整合的介绍了. 废话不多说,先把源码和项目地址放上来,重点要写在前面. github地址为ssm-demo 你也可以先体验一下实际效果,点击这里就行啦 账号:admin 密码:123456 从构思这个博客,一直到最终确定以这个项目为切入点,中间也是各种问题出现,毕竟是新人,所以也是十分的小心,修改代码以及搬上github其实花了不少时间,但也特别的认真,不知道是怎么回事,感觉这几天的过程比逼死产品经理还要精彩和享受.或许是博客路上的第一站吧,有压力也有新奇,希望自己能坚持下

Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git小结(转)

摘要 出于兴趣,想要搭建一个自己的小站点,目前正在积极的准备环境,利用Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git,这里总结下最近遇到的一些问题及解决办法,后续慢慢的继续补~ 目录[-] 一:建立一个Maven结构的Web工程 二:Spring.SpringMVC重复加载bean对象问题. 三:实现自个的数据缓存机制 2种缓存数据简介及其数据结构分析 2中缓存数据加载实现流程介绍 三:通过Spring自定义标签形式实现配置项类型数据的缓存数据结构

dubbo+zookeeper+spring+springMVC+mybatis的使用

读前声明:由于本人水平有限,有错误或者描述不恰当的地方请指出来,勿喷!第一次写博客. 源码下载链接:http://files.cnblogs.com/files/la-tiao-jun-blog/dubbo%E4%BE%8B%E5%AD%90.rar 使用条件: eclipse-jee-luna-SR2-win32-x86_64 jdk1.7,Apache Tomcat v8.0,maven zookeeper3.4.6 dubbo-2.4.10 dubbo-monitor-simple-2.5

Spring+SpringMVC+Mybatis+Mysql整合实例【转】

本文要实现Spring+SpringMVC+Mybatis+Mysql的一个整合,实现了SpringMVC控制访问的页面,将得到的页面参数传递给Spring中的Mybatis的bean类,然后查找Mysql数据的功能,并通过JSP显示出来.建议可以先看笔者另一文章Mybatis与Spring整合创建Web项目 .笔者觉得整合过程中问题比较多的还是Spring+Mybatis的整合,SpringMVC的整合还是比较简单. Spring        Spring 是一个开源框架, Spring 是

Spring+SpringMVC+MyBatis框架的搭建

1,SSM的简介 SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. SpringMVC分离了控制器.模型对象.分派器以及处理程序对象的角色,这种分离让它们更容易进行定制. MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架. 2,SSM的搭建 项目的结构如下: 首先配

[JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis)

来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral(以下博文对原博文有改动和补充) 开发环境: Eclipse Java EE IDE for Web Developers. Version: Mars.2 Release (4.5.2) apache-tomcat-8.0.33 jdk1.8.0_77 MySQL 5.0.11-dev(官网下载需要账号登