我们的spring项目目前用到的配置文件包括
1--web.xml文件,这是java的web项目的配置文件。我理解它是servlet的配置文件,也就是说,与spring无关。即使你开发的是一个纯粹jsp页面的web项目,你也必须配置这个文件。
我们的java web项目肯定写了很多servlet代码,这些servlet需要运行在servlet容器中,这个容器就是tomcat的重要组件。也就是,你的web项目需要运行在tomcat中,那么你必须提供一个web.xml文件作为配置文件。
在这个文件中,通过context,也就是上下文,配置Spring。
同样filter,和servlet同等级别的概念的这个元素,也直接配置在web.xml中,因为filter是java中的web项目中本身就有的概念,而不是spring中才导入的概念。filter的意思就是看看request,不修改也不响应,但是可以对request中的信息进行匹配,看看是真的要交给servlet还是驳回去。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>RepositoryCheck HUB</display-name>
<!-- dao和service层的Spring配置文件 -->
<!-- access的配置文件是accessContext.xml; mysql的配置文件是mysqlContext.xml -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/mysqlContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- web层的Spring配置文件 -->
<servlet>
<servlet-name>ruku</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ruku</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping> <!-- 过滤器 编码 防止中文乱码 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<!-- 默认入口访问文件 -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

2--applicationContext文件,我们指的是Spring容器最基础的配置文件,名字可以随便起,但是整个项目被发布以后,它的默认位于WEB-INFclasses目录下。开发的过程中可以在web.xml文件中通过contextparam来配置这个文件的路径。它是spring进行依赖注入、事务管理等基础功能的配置文件。配置数据源啦,jdbcTemplate啦,都要依靠这个。比如你正在开发一个与web无关的数据库增删改查的spring项目,那么只需要用这个配置文件就可以了。
SpringMVC并没有在这个文件中配置,SpringMVC的配置文件是一个单独的xml文件,该文件通过web.xml文件中的servlet元素配置,或者说SpringMVC的本质是Spring公司实现的一个servlet,我们在开发的一开始,通过web.xml文件将这个servlet导入了我们的项目,于是我们就可以使用spring MVC了。

3--[name]-servlet.xml配置文件,我指的是SpringMVC的配置文件,通常该文件位于WEB-INF目录下,它的作用是配置Spring MVC,充当整个web项目的pipeline-value中的basevalue的角色,也就是最终的servlet。

上述内容,是我们开发的spring的web项目中用到的主要的配置文件,从上述内容我们可以看出来,和数据库连接有关的内容,也就是数据源的配置,发生在第二个配置文件,也就是applicatioinContext.xml文件中(名字可以改),

我们来看看其中一个mysqlContext.xml文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<!-- mysql dao和service层的Spring配置文件 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
classpath:/org/springframework/beans/factory/xml/spring-beans.xsd
http://www.springframework.org/schema/context
classpath:/org/springframework/context/config/spring-context.xsd
http://www.springframework.org/schema/aop
classpath:/org/springframework/aop/config/spring-aop.xsd
http://www.springframework.org/schema/tx
classpath:/org/springframework/transaction/config/spring-tx.xsd"> <context:component-scan base-package="com.tsmi.mysql.dao"/>
<context:component-scan base-package="com.tsmi.mysql.service"/>
<context:component-scan base-package="com.tsmi.mysql.web"/> <!-- 配置mysql数据源 -->
<bean id="dsmysql" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://localhost:6062/test2?useSSL=true&amp;characterEncoding=utf8&amp;serverTimezone=UTC"
p:username="root"
p:password="密码不告诉你机密"
p:defaultAutoCommit="true" /> <!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dsmysql" /> <!-- 配置JdbcTemplate -->
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dsmysql" /> </beans>

我们的项目同时连接了mysql和access数据库,上述配置文件时间上是mysql的配置文件部分。
我们都知道spring的配置有三种:基于xml,基于注解,基于java类。但是最常用的是第二种,基于注解的配置。
教材中也明确的说:笔者一般采用xml配置DataSource等资源Bean,在XML中利用aop,context命名空间进行相关主题的配置。但是所有项目中开发的Bean都通过基于注解的方式进行配置,也就是整个项目少量使用XML方式,大量使用基于注解方式,完全不采用java类方式。
通过我们自己开发的dao,service代码我们也可以看出来,因为大量使用了@Autowired注解,如下面代码示例所示

package com.tsmi.RepositoryCheck.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.stereotype.Repository; import com.tsmi.RepositoryCheck.domain.Lifnr; @Repository
public class LifnrDao { /**
* 声明JdbcTemplate的一个变量
*/
private JdbcTemplate jdbcTemplate; /**
* @param 注入JdbcTemplate的变量的实例
*/
@Autowired
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
} final static String SELECT_ALL = "select * from 供应商评价等级"; /**
* 获取所有
* 供应商等级评价
* @return
*/
public List<Lifnr> getPernr(){ final List<Lifnr> prs = new ArrayList<Lifnr>(); jdbcTemplate.query(SELECT_ALL, new Object[] { }, new RowCallbackHandler() { public void processRow(ResultSet rs) throws SQLException { Lifnr pr = new Lifnr(); pr.setSn(rs.getInt("编号"));
pr.setsName(rs.getString("供应商名称"));
pr.setsLevel(rs.getString("供应商评价等级"));
pr.setsEval(rs.getString("供应商月度评价"));
pr.setsMonth(rs.getString("评价月份")); prs.add(pr); } }); return prs; } }

我们声明变量,然后通过注解的方式,用@Autowired为变量实例化,用@Repository将类注册到spring容器中,供其他的类实例化的时候调用。

实例化的过程其实就是Spring的IOC容器按照某种规则对容器中的bean进行自动装配,这种装配不是显式的方式进行的依赖配置,是自动装配。那么装配的规则是怎样的呢?也就是,IOC容器根据什么做判断,谁装配给谁呢?
这其中最重要的就是mysqlContext.xml文件中的beans和bean元素,这两个元素都可以添加autowire属性,用来设置“自动装配类型”。
基于注解的配置方式中,默认采用autowire=byType这种策略进行自动装配。(记住是默认啊,就是这个属性压根不用出现在你的配置文件的bean中都可以,默认)
那么byType是什么意思呢?
假如说,我们要实例化的bean是一个JdbcTemplate,如果容器中刚好有一个JdbcTemplate,Spring就会将这个装配给需要被实例化的那个变量。
现在的问题是,假如我们在容器中已经有了两个备选的JdbcTemplate等着呢,容器怎么判断用哪个去实例化变量呢?

容器中已经有了两个备选的bean,怎么选?我觉得我们首先要搞清楚一下,默认情况下spring中的bean的作用域的问题。
教材5.8节表示,spring中bean的默认作用域是singleton,singleton的含义是说,在spring IOC容器中只存在一个bean的实例,bean以单例的方式存在。spring利用AOP和LocalThread功能,对非线程安全的变量进行处理,变成了线程安全。
Spring的ApplicationContext容器启动时,会自动实例化所有singleton的bean并缓存在容器中。

Spring项目的配置文件们(web.xml context servlet springmvc)的更多相关文章

  1. WebApplicationInitializer究 Spring 3.1之无web.xml式 基于代码配置的servlet3.0应用

    本文转自http://hitmit1314.iteye.com/blog/1315816 大家应该都已经知道Spring 3.1对无web.xml式基于代码配置的servlet3.0应用.通过spri ...

  2. JavaWeb项目中web.xml有关servlet的基本配置

    JavaWeb项目中web.xml有关servlet的基本配置: 我们注意到,tomcat下的conf中也有一个web.xml文件,没错的,所有的JavaWeb项目中web.xml都继承自服务器下的w ...

  3. maven项目中如何创建web.xml

    在web工程创建时创建web.xml:用Eclipse新建一个web项目没有自动生成web.xml 在创建maven工程时,大多没有创建web.xml文件,web.xml路径:src/main/web ...

  4. springMVC WebApplicationInitializer 替代web.xml 配置Servlet 之原理

    Servlet 3.0之前 ,xml  配置 在过去搭建spring + springMCV ,首先第一步要做的是什么 ,就是要配置web.xml 文件 ,把springMVC 中的Servlet 加 ...

  5. [转]web.xml中servlet ,filter ,listener ,interceptor的作用与区别

    原文链接:https://blog.csdn.net/netdevgirl/article/details/51483273 一.概念: 1.servlet:servlet是一种运行服务器端的java ...

  6. 在web.xml中配置SpringMVC

    代码如下 <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.spr ...

  7. eclipse环境Dynamic web module version 3.1版本的进步,简化Dynamic web object 中Servlet类的配置,不用web.xml配置<Servlet>

    eclipse环境Dynamic web module version 3.1版本之前,Dynamic web object 中Servlet类的配置,要在web.xml 配置<Servlet& ...

  8. Spring中,applicationContext.xml 配置文件在web.xml中的配置详解

    一.首先写一下代码结构. 二.再看web.xml中的配置情况. <?xml version="1.0" encoding="UTF-8"?> < ...

  9. spring的配置文件在web.xml中加载的方式

    web.xml加载spring配置文件的方式主要依据该配置文件的名称和存放的位置不同来区别,目前主要有两种方式. 1.如果spring配置文件的名称为applicationContext.xml,并且 ...

随机推荐

  1. linux数据库升级

    转自:老左博客:http://www.laozuo.org/6145.html 老左今天有在帮朋友的博客搬迁到另外一台VPS主机环境,其环境采用的是LLSMP架构的,原先的服务器采用的是LNMP网站环 ...

  2. C/C++数据类型的转换之终极无惑

    程序开发环境:VS2012+Win32+Debug 数据类型在编程中常常遇到.尽管可能存在风险,但我们却乐此不疲的进行数据类型的转换. 1. 隐式数据类型转换 数据类型转换.究竟做了些什么事情呢?实际 ...

  3. hadoop相关

    执行wordcount 代码 package org.apache.hadoop.examples; import java.io.IOException; import java.util.Iter ...

  4. GitHub客户端和Shell的基本操作和理解

    GitHub客户端和Shell指令的简单实用 客户端操作, web端操作, shell指令操作. 掌握了这三种操作,基本上就可以很好的运用gitHub了. 创建项目, 可以通过web端进行创建. 可以 ...

  5. 如何比较Keras, TensorLayer, TFLearn ?——如果只是想玩玩深度学习,想快速上手 -- Keras 如果工作中需要解决内部问题,想快速见效果 -- TFLearn 或者 Tensorlayer 如果正式发布的产品和业务,自己设计网络模型,需要持续开发和维护 -- Tensorlayer

    转自:https://www.zhihu.com/question/50030898/answer/235137938 如何比较Keras, TensorLayer, TFLearn ? 这三个库主要 ...

  6. Excel中将字符串中从右起第n个指定字符替换的方法

    比如你想把www.baidu.com.cn中的倒数第二个”.”替换成@,则可以用: =SUBSTITUTE(A1,".","@",LEN(A1)-LEN(SUB ...

  7. js函数 DOM操作

    回学校了两天请了两天假,数组和方法的内容周末一定补上! 今天介绍一下JavaScript函数 Function 一.基础内容 1.定义 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. f ...

  8. Java获取环境变量和系统属性

    Java获取服务器环境变量和JVM系统变量    当程序中需要使用与操作系统相关的变量(例如:文件分隔符.换行符)时,Java提供了System类的静态方法getenv()和getProperty() ...

  9. 关于PageRank的总结

    好久不用CSDN,最近想给带的本科生实验课开个期末习题专题页,发现CSDN的博客忽然要绑定之类.只好弃用回博客园写学习总结了.塞翁失马焉知非福. *************************** ...

  10. java中三个类别加载器的关系以及各自加载的类的范围

    Java在需要使用类别的时候,才会将类别加载,Java的类别载入是由类别载入器(Class loader)来达到的,预设上,在程序启动之后,主要会有三个类别加载器:Bootstrap Loader.E ...