在配置springmvc的时候,我们可以把所有配置配置到springmvc的xml文件中, 也可以分多个 Spring 的配置文件, 然后使用 import 节点导入其他的配置文件。

但是,通常情况下, 类似于数据源, 事务, 整合其他框架都是放在 Spring 的配置文件中(而不是放在 SpringMVC 的配置文件中),实际上应该放入 Spring 配置文件对应的 IOC 容器中的还有 Service 和 Dao。

一、

配置spring配置文件的本质是单独加入Spring 的 IOC 容器,来管理数据源,Service,Dao这些“属于spring自身”的bean,而让springmvc的IOC容器专心管理Controller,视图解析器 等属于springmvc自己的内容。

那么如何在springmvc项目中配置spring的配置文件呢,只需在web.xml文件中做如下配置本质就是配置启动 Spring IOC 容器的 ContextLoaderListener,

其中的spring-context.xml就是spring的配置文件,也可看作是它的IOC容器。配置文件中主要配置扫描serivce,dao的包,数据源信息,事务等。

<!-- 配置启动 Spring IOC 容器的 Listener -->
    <!-- needed for ContextLoaderListener -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-context.xml</param-value>
    </context-param>

<!-- Bootstraps the root web application context before servlet initialization -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

二、

下面是web.xml中对springmvc的配置,其中的springmvc.xml就是springmvc的配置文件,也可看作是它的IOC容器。开始说的把Service 和 Dao,数据源都可以放这里,只不过有些臃肿。一般情况下我们只在该文件中配置扫描Controller的包,视图解析器等。

<servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

<servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

补充:JS、CSS、Image静态资源的访问

JS等静态文件夹位置放在webapp下面

第一种:

如果springDispatcherServlet 配置的拦截路径不是上面的"/",而是*.do或*.action等有后缀的路径,这样dispatchservlet 只拦截*.do或*.action的url. 并不拦截css,js等静态资源

让SpringMVC只拦截动态请求,js、css、img等静态资源不经过Spring,直接让Web容器处理,静态资源不走Spring,也不走拦截器,性能当然是比较好的。

第二种:

如果springDispatcherServlet配置的拦截路径就是是上面的"/",拦截所有的请求url,静态资源不再由Tomcat处理,所以必须在SpringMVC中再次配置

<mvc:resources mapping="/images/**" location="/images/"/>
 <mvc:resources mapping="/js/**" location="/js/"/>
 <mvc:resources mapping="/css/**" location="/css/"/>

让SpringMVC把static静态资源也处理了。显然,让SpringMVC处理静态资源的性能没有Tomcat直接处理比较高。

第三种:

如果springDispatcherServlet配置的拦截路径就是是上面的"/",可以不用第二种方法,

去掉 <mvc:resources mapping="/static/**" location="/static/" />,不做静态资源请求的映射。

在web.xml里增加如下配置:

<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/static/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>

  <!--   spring mvc配置   -->
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springweb-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>

激活Tomcat的defaultServlet来处理静态文件。这样 SpringMVC不再响应静态资源。

补充:对springmvc项目,如果想直接访问 jsp页面,而不是通过控制器指定页面名字的方式访问,需让jsp页面别放到WEB-INF下即可。WEB-INF/是资源目录, 客户端不能直接访问

放到WEB-INF下的jsp页面需要通过控制器指定页面路径(不包括后缀名.jsp)的方式访问

没放在WEB-INF下的jsp页面可以直接通过url路径访问(需全路径包含后缀名.jsp),也可以通过控制器指定页面路径(不包括后缀名.jsp)的方式访问

如:直接访问http://th5.yihu365.com:81/page/thridGh/index.jsp

或通过控制器指定页面名称访问,http://th5.yihu365.com:81/yihudaojia/intoGHPage_V2?sign=8688CFF9B5A430AE005FD61329A002A9&partner=yixinxinxikeji&thirdPartId=1181&phone=15588886666

通过控制器访问view,可以携带后台处理的数据如 model.addAttribute("SID", SID); 直接访问则不可以,因为没有后台。

spring和springmvc配置分离的更多相关文章

  1. Spring,SpringMvc配置常见的坑,注解的使用注意事项,applicationContext.xml和spring.mvc.xml配置注意事项,spring中的事务失效,事务不回滚原因

    1.Spring中的applicationContext.xml配置错误导致的异常 异常信息: org.apache.ibatis.binding.BindingException: Invalid ...

  2. Spring和SpringMVC配置中父子WebApplicationContext的关系

    一.前言 有这么一个故事:一辆装满石头的板车,一根绳子系着,起初绳子没有拉直,拉绳的人以为很轻,等真的绷直了才发现自己的力气根本不够~人往往喜欢得过且过,但是有些东西真的是绕不过的,所以现在必须努力的 ...

  3. Spring、springmvc配置

    首先把三个文件copy到resources目录下: 然后把这两个文件copy到WEB-INF下: 在datasource.properties中增加: db.driverLocation=C:\\Us ...

  4. 杂谈spring、springMVC

    一.背景 目前项目组都在用SSM(spring+springMVC+mybatis)开发项目 大家基本都停留在框架的基本使用阶段,对框架的职责并不清晰,导致配置文件出现了不少问题 在这简单讲解一下sp ...

  5. SSM ( Spring 、 SpringMVC 和 Mybatis )配置详解

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  6. SpringMVC+Spring+mybatis项目从零开始--Spring mybatis mysql配置实现

    上一章我们把SSM项目结构已搭建(SSM框架web项目从零开始--分布式项目结构搭建)完毕,本章将实现Spring,mybatis,mysql等相关配置. 1.    外部架包依赖引入 外部依赖包引入 ...

  7. 【Spring】SpringMVC非注解配置的两种方式

    目录结构: contents structure [+] SpringMVC是什么 Spring MVC的设计原理 SpringMVC配置的第一种方式 1,复制Jar包 2,Web.xml文件 3,M ...

  8. Spring Boot2 系列教程(十八)Spring Boot 中自定义 SpringMVC 配置

    用过 Spring Boot 的小伙伴都知道,我们只需要在项目中引入 spring-boot-starter-web 依赖,SpringMVC 的一整套东西就会自动给我们配置好,但是,真实的项目环境比 ...

  9. 配置struts2+spring,springmvc

    Struts2+Spring整合 一.spring负责注入,struts2负责它自己的工作.这样不是很符合spring作为ioc容器的全部功能,不推荐. 二.spring负责全部bean和struts ...

随机推荐

  1. Amundsen — Lyft’s data discovery & metadata engine

    转自:https://eng.lyft.com/amundsen-lyfts-data-discovery-metadata-engine-62d27254fbb9 In order to incre ...

  2. 搭建自己的Docker registry(五)

    弄了一天,在网上查了很多资料,感觉都好复杂好复杂,一步一步踩坑踩出来就好了. 服务器:阿里云(香港) 环境:CentOS Linux release 7.4.1708 (Core) Docker:1. ...

  3. LOJ 2292 「THUSC 2016」成绩单——区间DP

    题目:https://loj.ac/problem/2292 直接 DP 很难做,主要是有那种 “一个区间内部有很多个别的区间” 的情况. 自己想了一番枚举 max-min 的最大限制,然后在该基础上 ...

  4. MySql Scaffolding an Existing Database in EF Core

    官方文档详见:https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework-core-scaffold-exampl ...

  5. Django2.0资料

    The Django Book 2.0 中文版:点击下载 Django课件和代码:点击下载

  6. ionic3安卓平台引用高德地图

    1.前置条件 第一步,注册高德开发者:第二步,去控制台创建应用:第三步,获取Key. 2.打开src目录下的index.html, 在head标签中添加以下代码,引入js: <script ty ...

  7. 学习笔记之Problem Solving with Algorithms and Data Structures using Python

    Problem Solving with Algorithms and Data Structures using Python — Problem Solving with Algorithms a ...

  8. 利用飞儿云PHP框架自带的DNSPOD库做DDNS动态域名解析

    取得FiradioPHP git clone https://github.com/firadio/firadiophp.git 保存到/config/dnspod1.php <?php ret ...

  9. python:id与小数据池与编码

    一.id与小数据池 id:查的是内存地址 a = 100 b = 100 print(a == b)#比较的数值 print(a is b)#比较的是id print(id(a),id(b))#id相 ...

  10. [UE4]Image

    一.Image.Appearance.Brush.Tiling:平铺方式 1.No Tile:不平铺,拉伸会变形 2.Horizontal:横向平铺.纵向拉伸会变形 3.Vertical:纵向平铺.横 ...