web.xml和Spring配置详解
web.xml和Spring配置详解
carmen-ly 发表于1年前
web.xml和Spring配置详解
  • 发表于 1年前
  • 阅读 146
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

web工程习惯先看web.xml,所以先学习web.xml

web.xml属性介绍

icon icon元素指出IDE和GUI工具用来表示Web应用的一个和两个图像文件的位置。
display-name display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名称。
description description元素给出与此有关的说明性文本。
context-param context-param元素声明应用范围内的初始化参数
filter 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。
filter-mapping 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。
listener servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知。Listener元素指出事件监听程序类。
servlet 在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。
servlet-mapping 服务器一般为servlet提供一个缺省的URL:http://host/webAppPrefix/servlet/ServletName。但是,常常会更改这个URL,以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时,使用servlet-mapping元素
session-config 如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元素制定缺省超时值。
mime-mapping 如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证。
welcom-file-list welcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。
error-page error-page元素使得在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。
taglib taglib元素对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。此功能使你能够更改TLD文件的位置,而不用编辑使用这些文件的JSP页面。
resource-env-ref resource-env-ref元素声明与资源相关的一个管理对象。
resource-ref resource-ref元素声明一个资源工厂使用的外部资源
security-constraint security-constraint元素制定应该保护的URL。它与login-config元素联合使用
login-config 用login-config元素来指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。
security-role security-role元素给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。
env-entry env-entry元素声明Web应用的环境项。
ejb-ref ejb-ref元素声明一个EJB的主目录的引用。
ejb-local-ref ejb-local-ref元素声明一个EJB的本地主目录的应用。

节点详解:

1、icon元素包含small-icon和large-icon两个子元素.用来指定web站台中小图标和大图标的路径.

2、context-param 元素用来设定web应用的环境参数(context),它包含两个子元素:param-name和param-value.

范例
此所设定的参数,在JSP网页中可以使用下列方法来取得:
${initParam.param_name}
若在Servlet可以使用下列方法来获得:
String param_name=getServletContext().getInitParamter("param_name");

3、filter元素用来设定web应用的过滤器,它的两个主要子元素filter-name和filter-class用来定义Filter所对应的class, filter是按在webxml中的位置依次执行的,需要注意。

4、listener元素用来定义Listener接口,它的主要子元素为<listener-class>

5、servlet元素的两个主要子元素servlet-name和servlet-class用来定义servlet所对应的class

servlet-mapping元素包含两个子元素servlet-name和url-pattern.用来定义servlet所对应URL

在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是: 

标记容器是否在启动的时候就加载这个servlet。 

当值为0或者大于0时,表示容器在应用启动时就加载这个servlet

-------------------------------------

 1、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点。 

2、紧接着,容器创建一个ServletContext,这个web项目的所有部分都将共享这个上下文。 

3、容器将<context-param>转换为键值对,并交给servletContext。 

4、容器创建<listener>中的类实例,创建监听器。

5、加载顺序:加载顺序与元素它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是:ServletContext ->  context-param->listener -> filter -> servlet

6、配置spring

<!-- 指定spring配置文件位置,加载多个,用,分隔-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
</context-param>
<!-- 定义SPRING监听器,加载spring -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

springMVC中的分发器DispatcherServlet

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

加载顺序会影响对spring bean 的调用。

比如filter 需要用到 bean ,但是加载顺序是 先加载filter 后加载spring,则filter中初始化操作中的bean为null;

首先可以肯定 加载顺序与他们在web.xml 文件中的先后顺序无关。

web.xml 中 listener 和 serverlet 的加载顺序为 先 listener 后serverlet

最终得出结果:先 listener >> filter >> servlet >>  spring

--------------------spring配置------------------------

 Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Java EE程序员必须学会并灵活应用这份"图纸"准确地表达自己的"生产意图"。Spring配置文件是一个或多个标准的XML文档,applicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。

一、引用外部文件

<context:property-placeholder location="classpath:config/jdbc.properties"/> 

<import resource="spring-mybatis.xml" />
<import resource="spring-aop.xml" />
<import resource="spring-mongo.xml" />
<import resource="spring-redis.xml" />

二、常用数据源配置

spring有四种数据源可配置,spring自带的数据源(DriverManagerDataSource),DBCP数据源,C3P0数据源,JNDI数据源。

数据源之间的区别:

1、jdbc

DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用

2、dbcp

DBCP的配置依赖于2个jar包commons-dbcp.jar,commons-pool.jar。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"       
        destroy-method="close">       
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@172.19.34.6:1521:ORCL" />
    <property name="username" value="orclight" />   
    <property name="password" value="123456" />      
</bean> 

BasicDataSource提供了close()方法关闭数据源,所以必须设定destroy-method=”close”属性, 以便Spring容器关闭时,数据源能够正常关闭。除以上必须的数据源属性外,还有一些常用的属性: 
    defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为 true; 
    defaultReadOnly:设置数据源是否仅能执行只读操作, 默认值为 false; 
    maxActive:最大连接数据库连接数,设置为0时,表示没有限制; 
    maxIdle:最大等待连接中的数量,设置为0时,表示没有限制; 
    maxWait:最大等待秒数,单位为毫秒, 超过时间会报出错误信息; 
    validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据, 如你可以简单地设置为:“select count(*) from user”; 
    removeAbandoned:是否自我中断,默认是 false ; 
    removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值; 
    logAbandoned:是否记录中断事件, 默认为 false;

3、c3p0

C3P0是一个开放源代码的JDBC数据源实现项目,C3P0依赖于jar包c3p0.jar

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"       
            destroy-method="close">      
    <property name="driverClass" value="${jdbc.driver}"/>
	<property name="jdbcUrl" value="${jdbc.url}"/>
	<property name="user" value="${jdbc.username}"/>
	<property name="password" value="${jdbc.password}"/>
	<property name="acquireIncrement" value="10"/>
	<property name="idleConnectionTestPeriod" value="60"/>
	<property name="maxPoolSize" value="100"/>
	<property name="maxStatements" value="50"/>
	<property name="minPoolSize" value="10"/>    
</bean> 

ComboPooledDataSource和BasicDataSource一样提供了一个用于关闭数据源的close()方法,这样我们就可以保证Spring容器关闭时数据源能够成功释放。

    C3P0拥有比DBCP更丰富的配置属性,通过这些属性,可以对数据源进行各种有效的控制:
    acquireIncrement:当连接池中的连接用完时,C3P0一次性创建新连接的数目
    acquireRetryAttempts:定义在从数据库获取新连接失败后重复尝试获取的次数,默认为30;
    acquireRetryDelay:两次连接中间隔时间,单位毫秒,默认为1000;
    autoCommitOnClose:连接关闭时默认将所有未提交的操作回滚。默认为false;
    automaticTestTable: C3P0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数,那么属性preferredTestQuery将被忽略。你 不能在这张Test表上进行任何操作,它将中为C3P0测试所用,默认为null;
    breakAfterAcquireFailure:获取连接失败将会引起所有等待获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调   用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认为 false;
    checkoutTimeout:当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒,默认为0;
    connectionTesterClassName: 通过实现ConnectionTester或QueryConnectionTester的类来测试连接,类名需设置为全限定名。默认为 com.mchange.v2.C3P0.impl.DefaultConnectionTester; 
    idleConnectionTestPeriod:隔多少秒检查所有连接池中的空闲连接,默认为0表示不检查;
    initialPoolSize:初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值。默认为3;
    maxIdleTime:最大空闲时间,超过空闲时间的连接将被丢弃。为0或负数则永不丢弃。默认为0;
    maxPoolSize:连接池中保留的最大连接数。默认为15;
    maxStatements:JDBC的标准参数,用以控制数据源内加载的PreparedStatement数量。但由于预缓存的Statement属 于单个Connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素,如果maxStatements与 maxStatementsPerConnection均为0,则缓存被关闭。默认为0;
    maxStatementsPerConnection:连接池内单个连接所拥有的最大缓存Statement数。默认为0;
    numHelperThreads:C3P0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能,通过多线程实现多个操作同时被执行。默认为3;
    preferredTestQuery:定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个参数能显著提高测试速度。测试的表必须在初始数据源的时候就存在。默认为null;
    propertyCycle: 用户修改系统配置参数执行前最多等待的秒数。默认为300;
    testConnectionOnCheckout:因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都 将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。默认为false;
    testConnectionOnCheckin:如果设为true那么在取得连接的同时将校验连接的有效性。默认为false

4、jndi

如果应用配置在高性能的应用服务器(如WebLogic或Websphere,tomcat等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源 使用JNDI开放调用者使用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">      
        <property name="jndiName" value="java:comp/env/jdbc/orclight"/>      
</bean>

三、配置事务管理器

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
   <property name="dataSource" ref="dataSource" />
</bean>
<!-- 开启事务注解驱动 -->
<tx:annotation-driven transaction-manager="transactionManager" />

 

四、context:component-scan

<context:component-scan base-package="com.xx.api" />

五、aop注解支持

<!-- 配置数据库注解aop -->
<aop:aspectj-autoproxy />
<bean id="dataSourceAspect" class="com.hulu.api.framework.DataSourceAspect" />
<aop:config>
   <aop:aspect id="c" ref="dataSourceAspect">
      <aop:pointcut id="pc" expression="execution(* com.xx.api.user.dao.*.*(..))" />
      <aop:before pointcut-ref="pc" method="beforeDaoMethod" />
   </aop:aspect>
</aop:config>

六、缓存配置

<!--业务库-->
<bean id="redisLink" class="com.sankuai.xm.tools.redis.RedisLink">
    <constructor-arg name="address" value="${redis.ip}"/>
    <constructor-arg name="port" value="${redis.port}"/>
    <constructor-arg name="pwd" value="${redis.pwd}"/>
</bean>

七、mybaties整合

<bean id="master_dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
   <property name="driverClass" value="${jdbc.driver}"/>
   <property name="jdbcUrl" value="${jdbc.url}"/>
   <property name="user" value="${jdbc.username}"/>
   <property name="password" value="${jdbc.password}"/>
   <property name="acquireIncrement" value="10"/>
   <property name="idleConnectionTestPeriod" value="60"/>
   <property name="maxPoolSize" value="100"/>
   <property name="maxStatements" value="50"/>
   <property name="minPoolSize" value="10"/>
</bean>

<bean id="slave_dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
   <property name="driverClass" value="${slave_jdbc.driver}"/>
   <property name="jdbcUrl" value="${slave_jdbc.url}"/>
   <property name="user" value="${slave_jdbc.username}"/>
   <property name="password" value="${slave_jdbc.password}"/>
   <property name="acquireIncrement" value="10"/>
   <property name="idleConnectionTestPeriod" value="60"/>
   <property name="maxPoolSize" value="100"/>
   <property name="maxStatements" value="50"/>
   <property name="minPoolSize" value="10"/>
</bean>

<bean id="dataSource" class="com.xx.api.framework.DynamicDataSource">
   <property name="targetDataSources">
      <map key-type="java.lang.String">
         <entry key="master" value-ref="master_dataSource"></entry>
         <entry key="slave" value-ref="slave_dataSource"></entry>
      </map>
   </property>
   <property name="defaultTargetDataSource" ref="master_dataSource"></property>
</bean>


<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
   <property name="dataSource" ref="dataSource" />
</bean>
<!-- 开启事务注解驱动 -->
<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   <property name="dataSource" ref="dataSource" />
   <property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
   <property name="dataSource" ref="dataSource" />
</bean> 


<!-- 
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
   <constructor-arg index="0" ref="sqlSessionFactory" />  
</bean>
-->

<!-- 扫描映射文件 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
   <property name="basePackage" value="com.hulu.api.*.dao" />
</bean>

mongodb配置:

<mongo:mongo-client id="fc_mongo-client-prod-comet-trans" replica-set="${fc_mongo_host}" 
credentials="${fc_mongo_username}:${fc_mongo_passwd}@${fc_src_db_name}">
    <mongo:client-options connections-per-host="100"
                          threads-allowed-to-block-for-connection-multiplier="50"
                          connect-timeout="3000"
                          socket-timeout="3000"
                          max-wait-time="5000"
                          socket-keep-alive="true"

    />
</mongo:mongo-client>


<bean id="fcmongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg index="0" ref="fc_mongo-client-prod-comet-trans" />
    <constructor-arg index="1" value="${fc_mongo_db_name}" />
</bean>

参考:

http://www.cnblogs.com/jianwei-dai/p/5728690.html spring配置详解

http://snowolf.iteye.com/blog/1666908 征服redis+jedies+spring

 

 

共有 人打赏支持
粉丝 4
博文 49
码字总数 23776
×
carmen-ly
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: