<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
web.xml的加载顺序是:<context-param>-><listener>-><filter>-><servlet>
以<filter>
为例,web.xml中当然可以定义多个<filter>
,与<filter>
相关的一个元素是<filter-mapping>
,注意,对于拥有相同<filter-name>
的<filter>
和<filter-mapping>
元素而言,<filter-mapping>
必须出现在<filter>
之后,否则当解析到<filter-mapping>
时,它所对应的<filter-name>
还未定义。web容器启动初始化每个<filter>
时,按照<filter>
出现的顺序来初始化的,当请求资源匹配多个<filter-mapping>
时,<filter>
拦截资源是按照<filter-mapping>
元素出现的顺序来依次调用doFilter()方法的。<servlet>
同<filter>
类似,此处不再赘述。
<context-param>
解释:
<context-param>
元素含有一对参数名和参数值,用作应用的Servlet上下文初始化参数,参数名在整个Web应用中必须是惟一的,在web应用的整个生命周期中上下文初始化参数都存在,任意的Servlet和jsp都可以随时随地访问它。<param-name>
子元素包含有参数名,而<param-value>
子元素包含的是参数值。作为选择,可用<description>
子元素来描述参数。
这里的<listener>
用于Spring的加载,Spring加载可以利用ServletContextListener实现,也可以采用load-on-startup Servlet 实现,但是当<filter>
需要用到bean时,但加载顺序是:先加载<filter>
后加载<servlet>
,则中初始化操作中的bean为null;所以,如果过滤器中要使用到bean,此时就可以根据加载顺序<listener> -> <filter> -> <servlet>
,将spring的加载改成Listener的方式。
在J2EE工程中web服务器启动的时候最先调用web.xml,上面这段配置的意思是加载spring的监听器,其中ContextLoaderListener的作用就是启动Web容器时,自动装配applicationContext.xml的配置信息,执行它所实现的方法。
Filter可认为是Servle的一种“加强版”,主要用于对用户请求request进行预处理,也可以对Response进行后处理,是个典型的处理链。使用Filter的完整流程是:Filter对用户请求进行预处理,接着将请求HttpServletRequest交给Servlet进行处理并生成响应,最后Filter再对服务器响应HttpServletResponse进行后处理。Filter与Servlet具有完全相同的生命周期,且Filter也可以通过<init-param>
来配置初始化参数,获取Filter的初始化参数则使用FilterConfig的getInitParameter()。
换种说法,Servlet里有request和response两个对象,Filter能够在一个request到达Servlet之前预处理request,也可以在离开Servlet时处理response,Filter其实是一个Servlet链。
Servlet的生命周期:
创建Servlet实例有两个时机:
(1). 客户端第一次请求某个Servlet时,系统创建该Servlet的实例,大部分Servlet都是这种Servlet。
(2). Web应用启动时立即创建Servlet实例,即load-on-start Servlet。
Servlet初始化后,将一直存在于容器中,用于响应客户端请求,如果客户端发送GET请求,容器调用Servlet的doGet()方法处理并响应请求;如果客户端发送POST请求,容器调用Servlet的doPost()方法处理并响应请求。或者统一使用service()方法处理来响应用户请求。
(4). Web容器决定销毁Servlet时,先调用Servlet的destory()方法,通常在关闭Web应用时销毁Servlet实例。
tomcatW
-XX:PermSize=1024M
-XX:MaxPermSize=2048M
<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory" />
<!--
Activates various annotations to be detected in bean classes: Spring's
@Required and @Autowired, as well as JSR 250's @Resource.
-->
<context:annotation-config />
<!--
Instruct Spring to perform declarative transaction management
automatically on annotated classes.
-->
<!--<tx:annotation-driven/>-->
<tx:annotation-driven transaction-manager="transactionManager" order="2"/>
<!-- 事务管理 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="execute*" propagation="REQUIRED" />
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="txPointcut" expression="execution(* com.mln..*.services.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
<cache:annotation-driven />
<!-- generic cache manager -->
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="default" />
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="PowerStationCache" />
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="EqEquipmentCache" />
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="EqCompeqMeasureCache" />
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="FTPDataFDirCache" />
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="DataItemEQCache" />
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="DataItemCloumnCache" />
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="DaIndicatorSetCache" />
</set>
</property>
</bean>
/**
* 保存设备
*
* @param equip
* @throws Exception
*/
@CacheEvict(value = "EqEquipmentCache", allEntries = true)
public void saveEquip(EqEquipment equip) throws Exception {
}
@Cacheable(value = "EqEquipmentCache")
public Map<Integer, Map<String, List<EqEquipment>>> findAllEquip() {
}