spring和springmvc配置分离
在配置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配置分离的更多相关文章
- Spring,SpringMvc配置常见的坑,注解的使用注意事项,applicationContext.xml和spring.mvc.xml配置注意事项,spring中的事务失效,事务不回滚原因
1.Spring中的applicationContext.xml配置错误导致的异常 异常信息: org.apache.ibatis.binding.BindingException: Invalid ...
- Spring和SpringMVC配置中父子WebApplicationContext的关系
一.前言 有这么一个故事:一辆装满石头的板车,一根绳子系着,起初绳子没有拉直,拉绳的人以为很轻,等真的绷直了才发现自己的力气根本不够~人往往喜欢得过且过,但是有些东西真的是绕不过的,所以现在必须努力的 ...
- Spring、springmvc配置
首先把三个文件copy到resources目录下: 然后把这两个文件copy到WEB-INF下: 在datasource.properties中增加: db.driverLocation=C:\\Us ...
- 杂谈spring、springMVC
一.背景 目前项目组都在用SSM(spring+springMVC+mybatis)开发项目 大家基本都停留在框架的基本使用阶段,对框架的职责并不清晰,导致配置文件出现了不少问题 在这简单讲解一下sp ...
- SSM ( Spring 、 SpringMVC 和 Mybatis )配置详解
使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...
- SpringMVC+Spring+mybatis项目从零开始--Spring mybatis mysql配置实现
上一章我们把SSM项目结构已搭建(SSM框架web项目从零开始--分布式项目结构搭建)完毕,本章将实现Spring,mybatis,mysql等相关配置. 1. 外部架包依赖引入 外部依赖包引入 ...
- 【Spring】SpringMVC非注解配置的两种方式
目录结构: contents structure [+] SpringMVC是什么 Spring MVC的设计原理 SpringMVC配置的第一种方式 1,复制Jar包 2,Web.xml文件 3,M ...
- Spring Boot2 系列教程(十八)Spring Boot 中自定义 SpringMVC 配置
用过 Spring Boot 的小伙伴都知道,我们只需要在项目中引入 spring-boot-starter-web 依赖,SpringMVC 的一整套东西就会自动给我们配置好,但是,真实的项目环境比 ...
- 配置struts2+spring,springmvc
Struts2+Spring整合 一.spring负责注入,struts2负责它自己的工作.这样不是很符合spring作为ioc容器的全部功能,不推荐. 二.spring负责全部bean和struts ...
随机推荐
- 几个特殊的IP地址
1)私有地址 IP地址在全世界范围内唯一,看到这句话你可能有这样的疑问,像192.168.0.1这样的地址在许多地方都能看到,并不唯一,这是为何?Internet管理委员会规定如下地址段为私有 ...
- HDU - 6167: Missile Interception (二分+圆的交)
pro:二维平面上,给点N个导弹的初始位置,射出方向,速度.问你是找一点,可以从这一点向任意方向发出拦截导弹,速度未V,最小化最大拦截导弹的时间. 如果要拦截一个导弹,必须在导弹发射之后才可以发射拦 ...
- linux基础之bash特性
linux基础之bash特性 1.命令历史 命令历史包含的环境变量 $HISTSIZE:命令历史记录的条数 $HISTFILE:命令历史文件~/.bash_history $HISTFILESIZE: ...
- day04元组
元组 1.元祖书写规范 users=[11,22,33,"老男孩"]#列表(可变) users=(11,22,33,"老纳海")#元祖(不可变) 1.公共方法( ...
- java面试题01
一.JAVA基础 1.简述你所知道的JAVA修饰符及各自的使用机制?(public.abstract.final.synchronized.super…) 01.public:允许所有客户访问 02. ...
- XML二
XML的语法要求: 1,XML文档必须有一个顶层元素,即文档元素,所有其他元素必须嵌入在文档元素中. 2,元素嵌套要正确,即如果一个元素在另一个元素中开始,那么必须在同一个元素中结束. 3,每个元素必 ...
- BZOJ 2277 Poi2011 Strongbox
题目大意:一个集合A,包含了0~n-1这n个数.另有一个集合B,满足: 1.B是A的子集. 2.如果a.b均在B中,则(a+b)%n也在B中(a=b亦可) 给出k个数ai,前k-1个不在B中,第k个在 ...
- html走马灯效果
实现跑马灯的方法很多,其中最简单的是采用一句Html代码来实现,我们在需要出现跑马灯效果的地方插入“<marquee>滚动的文字</marquee>”语句,它的效果如下所示: ...
- vim编辑Makefile如何使用Tab
因为用vim编辑代码设置了Tab键为4个空格,但有时候我们需要编写Makefile,必须使用Tab,同时也不想设置set noexpandtab. 其实可以先Ctrl_v组合键,再按Tab键盘,这样我 ...
- (转)python logging模块
python logging模块 原文:http://www.cnblogs.com/dahu-daqing/p/7040764.html 1 logging模块简介 logging模块是Python ...