文档章节

web.xml和Spring配置详解

carmen-ly
 carmen-ly
发布于 2016/12/09 19:53
字数 3386
阅读 169
收藏 1
点赞 0
评论 0

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

 

 

© 著作权归作者所有

共有 人打赏支持
carmen-ly
粉丝 3
博文 50
码字总数 23845
作品 0
朝阳
程序员
spring data jpa 详解

本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring整合的环境中实现...

无敌小学僧 ⋅ 05/30 ⋅ 0

缅甸银河国际开户13170533331

解决这个问题涉及到两个方面的问题: 配置问题 、引入静态文件问题 1、配置问题 web.xml配置的DispatchServlet如下: [html] view plain copy springmvc org.springframework.web.servlet.D...

银河国际 ⋅ 05/26 ⋅ 0

(一)SpringMVC之配置DispatcherServlet的一些坑

DispatcherServlet是SpringMVC的核心控制器,就像是SpringMVC的心脏,几乎所有的请求都会经过这个控制器,通过它,大大的降低了模块之间的耦合度。所有学SpringMVC的同学们第一步肯定都是先配...

Java攻城玩家 ⋅ 06/03 ⋅ 0

Spring Context加载方式

Spring 加载方式 对于可执行文件方式,我们一般的加载Spring 配置的方式是 ClassPathXmlApplicationContext 从spring 3.0开始,开始使用注解的方式来进行spring 配置的注册 demoService是定义...

David_jim ⋅ 05/28 ⋅ 0

Spring mvc 创建完项目测试的时候前台404,后台没有错误信息这是咋了

前天遇到一个问题,springmvc创建的项目测试的时候前台404,后台没有错误输出,奇了怪了...... 这是WEB-INF下的xml文件

好吧我输了 ⋅ 昨天 ⋅ 0

Spring Boot整合模板引擎jsp

jsp也算是一种模板引擎吧。整合jsp前,先说一下运行SpringBoot项目的几种方式 1. 运行SpringBoot项目的几种方式 1.1 使用内嵌Tomcat运行项目 在IDE中右键运行启动类,也就是直接直接运行App...

yysue ⋅ 06/15 ⋅ 0

深入 Spring Boot :实现对 Fat Jar jsp 的支持

原文出处:Hengyunabc spring boot 对于jsp支持的限制 对于jsp的支持,Spring Boot官方只支持了war的打包方式,不支持fat jar。参考官方文档: https://docs.spring.io/spring-boot/docs/cu...

Hengyunabc ⋅ 06/04 ⋅ 0

springboot学习(二)——springmvc配置使用

以下内容,如有问题,烦请指出,谢谢 上一篇讲解了springboot的helloworld部分,这一篇开始讲解如何使用springboot进行实际的应用开发,基本上寻着spring应用的路子来讲,从springmvc以及web...

嘻哈开发者 ⋅ 04/26 ⋅ 0

jpa----spring-data-jpa 复杂查询,包括多表关联,分页,排序等

转载:由于此转载文章的出处也是转载的,所以原作者不详 本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data...

u010775025 ⋅ 05/29 ⋅ 0

后端发送数据到前端出现溢出问题

用户编辑某个页面时,后台会把一个大的实体(包含所有模块数据)返回到前端。经常出现以下报错,但是重新请求下可能就没有了。是不是因为数据量很大的缘故呢?信息如下: 09:55:04.448 [qtp6...

琴麻岛 ⋅ 04/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

linux 安装docker

通过以下命令下载安装docker wget -qO- https://get.docker.com | sh 执行以上命令后输出以下内容说明安装成功,注意红框中的内容,docker安装成功后默认只有root能使用,红框中给出的提示是...

haoyuehong ⋅ 18分钟前 ⋅ 0

482. License Key Formatting - LeetCode

Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符(排除-)就追加一个-。 Java实现...

yysue ⋅ 36分钟前 ⋅ 0

聊聊spring cloud gateway的LoadBalancerClientFilter

序 本文主要研究一下spring cloud gateway的LoadBalancerClientFilter GatewayLoadBalancerClientAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springfram......

go4it ⋅ 今天 ⋅ 0

详解:Nginx反代实现Kibana登录认证功能

Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操作如何使用Nginx反向代理...

问题终结者 ⋅ 今天 ⋅ 0

002、nginx配置虚拟主机

一、nginx配置虚拟主机可分为三种方式,分别为: 1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站...

北岩 ⋅ 今天 ⋅ 0

shell脚本之死循环写法

最近在学习写shell脚本,在练习if while等流程控制时,突然它们的死循环写法是怎么样的?经过百度与亲测记录如下: for死循环 #! /bin/bashfor ((;;));do date sleep 1d...

hensemlee ⋅ 今天 ⋅ 0

苹果的ARKit2.0有多可怕,看了就知道

序言 ARKit主要由三部分组成: 跟踪(Tracking) 跟踪是ARKit的核心组件之一,其提供了设备在物理世界中的位置与方向信息,并对物体进行跟踪,如人脸。 2.场景理解(Scene Understanding) 场...

_小迷糊 ⋅ 今天 ⋅ 0

5.1 vim介绍 5.2 vim移动光标 5.3 ,5.4vim一般模式下移动光标,复制粘贴

vim命令 vim是vi的一个升级版;vim可以显示文字的颜色 安装vim这一个包vim-enhanced 如果不知道安装包,可以使用 命令下面命令来查看vim命令是那个包安装的。 [root@linux-128 ~]# yum prov...

Linux_老吴 ⋅ 今天 ⋅ 0

vim一般模式

vim 是什么 vim是什么 ? 在之前接触Linux,编辑网卡配置文件的时候我们用过了vi ,vim简单说就是vi的升级版,它跟vi一样是Linux系统中的一个文本编辑工具。 如果系统中没有vim ,需要安装一...

李超小牛子 ⋅ 今天 ⋅ 0

docker实战

构建企业级Docker虚拟化平台实战 重点剖析虚拟化和云计算概念; 分析Docker虚拟化的概念和原理; 从0开始实战Docker虚拟化平台; 基于Docker构建Nginx WEB服务器和CentOS虚拟机; 基于开源监...

寰宇01 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部