??xml version="1.0" encoding="utf-8" standalone="yes"?>
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:156)
at org.apache.lucene.search.PrefixQuery.rewrite(PrefixQuery.java:53)
at org.apache.lucene.search.BooleanQuery.rewrite(BooleanQuery.java:408)
at org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:138)
at org.apache.lucene.search.Query.weight(Query.java:94)
at org.apache.lucene.search.Hits.<init>(Hits.java:42)
at org.apache.lucene.search.Searcher.search(Searcher.java:45)
at org.apache.lucene.search.Searcher.search(Searcher.java:37)
at com.toodou.searcher.search.PodcasterSearcher.searchPodcaster(PodcasterSearcher.java:238)
at com.toodou.searcher.search.PodcasterSearcher.doPodcasterSearch(PodcasterSearcher.java:66)
at test.com.toodou.searcher.search.PodcasterSearcherTest.testdoPodcasterSearch(PodcasterSearcherTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
可以通过讄Q?br>
BooleanQuery.setMaxClauseCount(10000);
来解决问题,但是q样带来的问题是会得内存开销加大。容易出现OutOfMemory的异?br>
所以需要非常}慎处理?img src ="http://m.tkk7.com/grantbb/aggbug/118939.html" width = "1" height = "1" />
]]>
问题原因Q数据有自动脚本Q会执行时间超q?0U的q程杀掉?br>q样的话QJava的应用就会抛L异常?br>
]]>CAS Server and Client 3.1 Milestone 1 Released
phpCAS 0.5.0 RC5 Release
CAS 3.0.7 Final Release
Inclusion of Abstract Ticket Registry
CAS 3.0.6 Final
q里面有几个更新很重要:
1.Upgrade to Spring 2.0.1, Spring Web Flow 1.0 and Spring LDAP 1.1.1
2.Introduction of JBossCacheTicketRegistry
支持后JBossCacheTicketRegistry可以方便大q发量的|站的水qx展问题?br>
]]>
范围理Q?o:p>
首先会有产品l理提出我们要开发一个什么样的YӞ有那些功能,基本上就是一些FeatureListQ然后给出vision and scope文。Y件开发的目l理会根据这份文档,通过沟通,来写出SRS。其中主要包括了UseCase和非功能性需求以及一些约束条件。有了这些内容后Q会开一个需求确认会Q来认已经明确的需求,会议上可以对不明的需求进行讨论和完善?o:p>
旉理Q?o:p>
目l理在接到Y仉目开发Q务后Q就要制定出一个大致的目计划Q然后有了Y件的需求文之后,可以q一步细化项目的计划。在做项目计划的时候同时会牉|CQ务的分工。在目q行的过E中严格按照目计划q行?o:p>
采购理
目的前期,目l理需要明Y件安装需要多服务器Q服务器的配|是什么样的。什么时候必d货,预算的经Ҏ多少{。如果项目的人手不够Q同时要考虑q行软g外包?o:p>
人力资源理
主要是提高团队的士气和凝聚力Q让每一位团队成员都有清C致的目标Q从生活{各个方面关心开发h员,帮助他们解决一些实实在在的问题。如果有软g外包Q还要统一得管理好外包的Y件开发h员?o:p>
沟通管?o:p>
l常开目组会议Q保持信息畅通,通过wiki{工具保持信息共享。每天都有晨会,周报发给组的所有成员。通过聚餐、喝茶等方式增进交流。针对不同的员工可能需要采用不同的方式Q例如:有的人喜Ƣ面寚w的沟通,有的喜欢email沟通,有得喜欢msn{等?o:p>
风险理
我认为比较重要的是抓住开发过E的几个环节Q例如:需求分析、界面的设计、接口的设计、数据库的设计等。每天项目经理都要确认项目的q度是否正常Q检查项目的质量Q尽可能早的发现一些问题。经常得跟品经理交,保开发的软g产品W合需求?o:p>
成本理
对于我接触的目Q牵扯到成本理的主要就是开发h员的成本Q分配好dQ把握住q度Q提高开发团队的效率p够ؓ公司节省开支,从而达到控制成本的目的?o:p>
质量理
2.1 是在 2.0 基础上做了很多的改进Q提升了性能Q修复了一?/span> Bug {?/span>
Lucene2.1 在烦引的格式上做了一些改q,所以旧版本?/span> Lucene 是无法访?/span> 2.1 版的索引文g。但?/span> 2.1 版本的可以读写旧版本的烦引文件。保持向下的兼容性。这炚w要我们在使用时注意?/span>
下面单的列出一些新的特性:
1. 's' ?/span> 't' 从默认的 stopwords 中移掉了。但是依然还?/span> 'a' 也可以会有同L问题Q所以分词需要针对自q应用q行自定义?/span>
2. 更新?/span> StandardAnalyzer 中的针对 CJK ?/span> Unicode 代码范围。用处不大,因ؓ我们中文需要自己开发分词?/span>
3. 允许?/span> QueryParser 的最前面使用通配W?/span> (*, ?) Q之前是不允许的。这个比较有意义Q可以实C些模p搜索?/span>
4. QueryParser 默认使用 ConstantScoreRangeQuery 执行范围查询。增加了 useOldRangeQuery 属性允许在需要的情况下用旧?/span> RangeQuery
5. 对于 WildcardQuery Q如果一?/span> term 不包含Q何的 ? 或?/span> * Q之前会抛出异常Q现在会执行一?/span> TermQuery ?/span>
6. L?/span> deprecated ?/span> doc.fields() Ҏ?/span> Enumeration
7. write lock 现在默认的位|是索引的目录,单命名ؓ write.lock
8. 新的 FieldSelector API Q相关的 IndexReader 和实现都发生了变化。新?/span> Fieldable 接口被用作字D늚延迟加蝲上?/span>
9. 使用 MultiFieldQueryParser 的时候可以ؓ不同?/span> field 指定不同?/span> boosts
10. 新的Ҏ IndexWriter.addIndexesNoOptimize() 在新d一个新?/span> segments 的时候,只进行合qӞ不进行优化?/span>
11. QueryParser 允许在引号和短语中用反斜线
12. 增加了方?/span> RAMDirectory.sizeInBytes(), IndexWriter.ramSizeInBytes() ?/span> IndexWriter.flushRamSegments() Q允许应用程序控制烦引时~存文对内存的使用Q这些蛮有用的,可以用于监控索引的过E?/span>
13. QueryParser 解析 *:* 为匹配所有的内容
14. 可以通过命o行在已经存在的烦引文件中修改和删?/span> field
15. IndexWriter 增加了方法来高效得更?/span> documents 。增?/span> IndexWriter.flush() Ҏ内存的内容h到文件系l?/span>
兵 2007-3-22
是一个可以用来在应用E序中拦截和修改数据操作语句的开源框架。对
SQL
q行拦截Q相当于一?/span>
SQL
语句的记录器?/span>
使用很简单,只需要在配置中将驱动E序Ҏ
P6Sky
的拦截驱动。可能会l系l带来略微的性能下降Q但是在开发环境中的媄响很?/span>
open source GUI versions of P6Spy
Q?/span>
irongrid
SQL Profiler
http://www.jahia.org/jahia/page377.html
是一个基?/span> P6Sky 引擎的快速剖析工兗统?/span> SQL 语句Q分析那里是性能瓉。在那里创徏索引或者采用什么样的方法来提高效率。根?/span> SQL 查询语句帮助生成合适的索引脚本?/span>
主要参考:
F:\ 专题学习 \P6spy
?/span> p6spy ?/span> sqlprofiler 来进?/span> jdbc sql 日志记录和分?/span>
JDBC SQL Profiling ?/span> p6spy
2.然后用IDE产生一个实现类.
需要修改Eclipse的模?使得所有生成的实现cL出UnsupportedOperationException异常.例如:
public boolean checkUserByUsernameAndLogincode(String username, String logincode) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException();
//return false;
}
:DAOc都要抛出DataAccessException
3.然后针对该类写测?每次只针?一个方?写测?
此时q行试是不能够通过?会抛出UnsupportedOperationException
4.然后~写接口的实?来得测试获得通过.
Java Caching System
JSC(Java Caching System)是一个用分布式的~存pȝQ是Z服务器的java应用E序。它是通过提供理各种动态缓存数据来加速动态web应用?
JCS和其他缓存系l一P也是一个用于高速读取,低速写入的应用E序?
动态内容和报表pȝ能够获得更好的性能?
如果一个网站,有重复的|站l构Q用间歇性更新方式的数据库(而不是连l不断的更新数据库)Q被重复搜烦出相同结果的Q就能够通过执行~存方式改进其性能和~性?
官方|站 http://jakarta.apache.org/turbine/jcs/
EHCache
EHCache 是一个纯java的在q程中的~存Q它h以下Ҏ:快速,单,为Hibernate2.1充当可插入的~存Q最的依赖性,全面的文档和试?
官方|站 http://ehcache.sourceforge.net/
JCache
JCache是个开源程序,正在努力成ؓJSR-107开源规范,JSR-107规范已经很多q没改变了。这个版本仍然是构徏在最初的功能定义上?
官方|站 http://jcache.sourceforge.net/
ShiftOne
ShiftOne Java Object Cache是一个执行一pd严格的对象缓存策略的Java libQ就像一个轻量的配|缓存工作状态的框架?
官方|站 http://jocache.sourceforge.net/
SwarmCache
SwarmCache是一个简单且有效的分布式~存Q它使用IP multicast与同一个局域网的其他主行通讯Q是特别为集和数据驱动web应用E序而设计的。SwarmCache能够让典型的L作大大超q写操作的这cd用提供更好的性能支持?
SwarmCache使用JavaGroups来管理从属关pd分布式缓存的通讯?
官方|站 http://swarmcache.sourceforge.net
TreeCache / JBossCache
JBossCache 是一个复制的事务处理~存Q它允许你缓存企业应用数据来更好的改善性能。缓存数据被自动复制Q让你轻松进行JBoss服务器之间的集群工作?JBossCache能够通过JBoss应用服务或其他J2EE容器来运行一个MBean服务Q当Ӟ它也能独立运行?
JBossCache包括两个模块QTreeCache和TreeCacheAOP?
TreeCache --是一个树形结构复制的事务处理~存?
TreeCacheAOP --是一个“面向对象”缓存,它用AOP来动态管理POJO(Plain Old Java Objects)
注:AOP是OOP的gl,是Aspect Oriented Programming的羃写,意思是面向斚w~程?
官方|站 http://www.jboss.org/products/jbosscache
WhirlyCache
Whirlycache是一个快速的、可配置的、存在于内存中的对象的缓存。它能够通过~存对象来加快网站或应用E序的速度Q否则就必须通过查询数据库或其他代h较高的处理程序来建立?
官方|站 https://whirlycache.dev.java.net/
存储q程的最单的形式是包含一pdSQL语句的过E,这些语句放在一起便于在同一个地方管理也可以提高速度。Statement cd以包含一pdSQL语句Q因此允许在同一个数据库事务执行所有的那些语句而不是执行对数据库的一pd调用?
使用扚w处理功能涉及下面的两个方法:
addBatch(String) Ҏ
executeBatchҎ
如果你正在用Statement 那么addBatch Ҏ可以接受一个通常的SQL语句Q或者如果你在用PreparedStatement Q那么也可以什么都不向它增加?
executeBatch Ҏ执行那些SQL语句q返回一个int值的数组Q这个数l包含每个语句媄响的数据的行数。如果将一个SELECT语句或者其他返回一个ResultSet的SQL语句攑օ扚w处理中就会导致一个SQLException异常?
关于java.sql.Statement 的简单范例可以是Q?
Statement stmt = conn.createStatement();
stmt.insert("DELETE FROM Users");
stmt.insert("INSERT INTO Users VALUES('rod', 37, 'circle')");
stmt.insert("INSERT INTO Users VALUES('jane', 33, 'triangle')");
stmt.insert("INSERT INTO Users VALUES('freddy', 29, 'square')"); int[] counts = stmt.executeBatch();
PreparedStatement 有些不同Q它只能处理一部分SQL语法Q但是可以有很多参数Q因此重写上面的范例的一部分可以得C面的l果Q?
// 注意q里没有删除语句
PreparedStatement stmt = conn.prepareStatement(
"INSERT INTO Users VALUES(?,?,?)"
); User[ ] users = ...;
for(int i=0; i<users.length; i++) {
stmt.setInt(1, users[i].getName());
stmt.setInt(2, users[i].getAge());
stmt.setInt(3, users[i].getShape());
stmt.addBatch( );
} int[ ] counts = stmt.executeBatch();
如果你不知道你的语句要运行多次Q那么这是一个很好的处理SQL代码的方法。在不用批量处理的情况下,如果d50个用P那么性能有影响Q如果某个h写了一个脚本添加一万个用户Q程序可能变得很p糕。添加批处理功能可以帮助提高性能Q而且在后面的那种情况下代码的可读性也更好?
单元试的时候(或者其他不通过web装载的情况Q,使用DefaultBeanFactorycdbeanRefFactory.xml配置文g
有的时候单元测试相关的cd的时候,我会单独写一个bean的配|文Ӟq行单元试?br />web集成试的时候直接在web.xml中配|?br /><context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/WebApplicationContext.xml
/WEB-INF/classes/HibernateContext.xml
/WEB-INF/classes/WebApplicationContext_C.xml
.......
</param-value>
</context-param>
2.通过观察jpetstore目Q它的配|文件是按照web/service/daoq样的层ơ进行划分?br />对于一些web services接口也会有专门的配置文g?br />q样的话l构׃非常的清晎ͼ所以在目E_Q进入维护期的时候,可以把配|文件按照业务逻辑的层ơ进行划分?
3.Z能够灉|配置Q例如向一些数据库q接的配|,因ؓ大部分情况都是本地、测试服务器、正式服务器的配|是不同的,所以一般会通过写一个jdbc.propertiesQ在属性文件中q行配置?
4.在同时加在多个spring的配|文件的时候,也是有好多灵zȝҎQ这斚wspring做的真强。上面说了两U,q可以在applicationContext.xml文g?lt;beans>标签的后面,紧接着加入Q?br /><import resource="dataAccessContext-local.xml"/>q样的导入资源的语句。然后不同的环境可以使用不同的配|,不过q还需要每ơ都修改applicationContext.xml文g。该Ҏ不如直接在web.xml中配|多个方便,但是也不是绝寏V?
5.最后还有一U更加方便的ҎQ可以不用修改applicationContext.xml文gQ然后就能够自动装蝲相关的配|文件?br />首先Q写一个类Q?br />package com.xiebing.spring.util;
import java.net.InetAddress;
import org.springframework.web.context.support.XmlWebApplicationContext;
/**
* TODO file description *
*
* @author bing.xie
*
* @version 1.0, 2006-5-10 create
*/
/**
* @author bing.xie
* 2006-5-10
*/
public class PerHostXmlWebApplicationContext extends XmlWebApplicationContext {
protected String[] getDefaultConfigLocations(){
String hostname = "localhost";
try{
hostname = InetAddress.getLocalHost().getHostName();
}catch(Exception e){
}
String perHostConfiguration = DEFAULT_CONFIG_LOCATION_PREFIX
+ "applicationContext-"
+ hostname
+ DEFAULT_CONFIG_LOCATION_SUFFIX;
if(getNamespace() != null){
return new String[]{
DEFAULT_CONFIG_LOCATION_PREFIX
+ this.getNamespace()
+ DEFAULT_CONFIG_LOCATION_SUFFIX
,perHostConfiguration};
}else{
return new String[]{
DEFAULT_CONFIG_LOCATION,perHostConfiguration};
}
}
}
q种主要是通过动态的获取L名来动态配|的。所以对于不同的环境使用applicationContext-[hostname].xml可以封装变化了。当然了Q也可以不用hostnameQ如果发现其他方便的方式Q?
接下来,是在web.xml中增加配|:
<context-param>
<param-name>contextClass</param-name>
<param-value>com.xiebing.spring.util.PerHostXmlWebApplicationContext</param-value>
</context-param>
q种Ҏ是要求在不同的环境下有不同的applicationContext-[hostname].xml文g
ThoughtWorks
敏捷的核心:是一U理c方法论、技?/span>
目Q确定目?/span>
q代Q核实目?/span>
日常Q走向目?/span>
团队内一定要有一致的认识Q做法(打通关节、h员调整、进行培训)Q开发环境(戉K、硬件、h员布|)
不断观察Q定期ȝ程的缺点,不断改进完善Q之适合团队
关于环境Q无挡板、光U明亮、带轮子的椅子、无UK或者键盘、大桌子、圈坐)
q代Q一?/span> story q_ 2 天,q踪、ȝ、分析、对事不对h
目大的时候需要专门的q代l理Q对内负?/span> checking Q?span style="COLOR: red">q代报告Q,对外交流汇报Q功能演C)
持箋集成Q?/span> 1 Q?span style="COLOR: red">从项目的W一天就开始做?/span> 2 Q发散性广播(声音Q哦。。。。。。,哦你妈个_Q熔岩灯 3 Q如果集成失败就必须立即解决 4 Q频J发布,自动试
试驱动开发: 1 Q增加测试范?/span> 2 Q?span style="COLOR: red">永远都要先写试Q先定义接口Q然后再写单元测试) 3 Q提高测试效?/span> 4 Q避免缺陷重?/span> 5 Q监督开?/span> 6 Q不仅仅是单元测?/span>
考虑?/span>
wiki
理文Q方便P?/span>
实施 XP 的项目团队不要超q?/span> 10 人, 8 Q?/span> 10 人最合?/span>
web
试的工P
salenium jwebunit junit (Fit jwebfit watir)
阉K巴巴Q?/span>
web
性能试
陈日俊(落叶夏日Q?/span>
包括Q阿里巴巴、淘宝、支付宝、雅?/span>
LoadRunner 是开发h员玩?/span>
使用
JProfile
试性能
优先U考虑的是数据库调优(
index
Q,最后考虑法调优
Resin
研究使用Q性能更好
1 Q用戯为分?/span> 2 Q应用网l分?/span> 3 Q数据量分析
1?span style="FONT: 7pt 'Times New Roman'"> 场景设计源自需?/span>
2?span style="FONT: 7pt 'Times New Roman'"> q发用户?/span>
3?span style="FONT: 7pt 'Times New Roman'"> 峰倹{^均ƈ发、时间分?/span>
4?span style="FONT: 7pt 'Times New Roman'"> 用户I间分布Q系l不同模块的用户I间分布Q?/span>
5?span style="FONT: 7pt 'Times New Roman'"> E_性要?/span>
6?span style="FONT: 7pt 'Times New Roman'"> 数据库数量的大小、增长方式、访问方?/span>
7?span style="FONT: 7pt 'Times New Roman'"> 用户行ؓ分析
U工?/span> JDO 专家l成?/span> 黄v?/span> 一?/span> Xper 的心路历E?/span>
上班玩游戏,爽!――培?/span> TeamWork 的能?/span>
40 岁的E序员,zd老,~到老,知道的多Q^{,q_Q可以良好的沟?/span>
真正?/span> XP 可以辑ֈQ工作节奏^E뀁有效率、有节奏
只有沟?/span>不够的项目,没有沟通过度的目
d汇报 上司
以h为本Q每个开发h员都能充分参与到软g开发中Q都以每一行代码ؓ׃QQ做到我Zh人,Zh为我?/span>
最高境界:以h为本Q而不是以程为本
XP Q改变h的思维品质
1 Q敢于面Ҏ?/span> 2 Q不怕暴露自q不 3 Q主动承认不?/span> 4 Q主动沟?/span> 5 Q杜l懒?/span> 6 Q反省自q开发流E?/span>
?/span> XP 中,到问题应该是先问谁会,如果没有会的?/span> google
1 Q结队一定更加高效、高?/span> 2 Q从别hw上学习Q看别h的优点,重伙伴 3 Q一个h的hg在于知道多少Q在于能知道多少 4 Q永q测试先?/span> 5 Q?b style="mso-bidi-font-weight: normal">不要吝啬问题 6 Q尽可能得让别h知道自己在做什?/span> 7 Q不要重复代?/span>
XP 挑战人性的阴暗面(惰性-永远都不?/span>?b style="mso-bidi-font-weight: normal">自尊Q知道什么时候应该放?/span>Q?/span>
Xper Q合格的E序?/span>
对于 XP 团队Q招聘的时候对性格也是有一些要?/span>
说白了: XP 是一U更加剥削的方式
但是对个人成长和对公司发展都是有利的Q只能说可能对公司的益处更加明显?/span>
如果我是老板我一定会选择 XP Q?/span>
如果到实施 XP 的老板Q那么就努力跟老板学习Q尽快让自己也成板?br />jupiterQ插件是一个提供个人或者小l的代码review的Eclipse插g
checkstyleQ插件可以检查代码是否标准,是否存在一些常见错误的功能?
togetherQ还有一个代码审查和验的功能?
有了以上的工P在进行代码review的工作中会方便很多?/p>
jwebunit是对httpunit的进一步包装,使用h更加单?/p>
Cactus主要是测试服务器端的lg的工兗可以测试:Servlets, EJBs, Tag Libs, Filters{?
以上三者都是在junit基础之上开发的?
jmeter是一个纯java的压力测试工兗?
StrutsTestCase专门用来试struts应用E序的?/p>
junitperf可以为JUnit增加一层测试负载和性能的包装?
eclipse.plugins.profiler该插件ؓEclipse提供了性能试的功能?
MySQL?/SPAN>Firebird也是开始提供嵌入式版本?/SPAN>
Java语言的嵌入式数据库:HSQLDB?/SPAN>Apache-Derby
嵌入式数据库的优点:
1、能够编译进用户的应用程序中
2、客L序和数据库引擎运行在同一q程中,期间的数据交换仅依赖函数调用可完成Q?/SPAN>
没有q程间通讯Q?/SPAN>TCP/IPq接Q性能大大提升
3、不需要单独安装部|数据库
4、测试驱动开发,单元试要求快速而且频繁执行E序Q嵌入式的数据库更适合q样的单元测?/SPAN>
5?/SPAN>HSQLDB?/SPAN>Apache Derby都支持标准的SQL92Q促使写出兼Ҏ更好的SQL
下蝲地址Q?/SPAN>http://db.apache.org/derby/derby_downloads.html
推荐几篇文章Q?/SPAN>
?/SPAN> Eclipse 中开?/SPAN> Apache Derby 应用E序
Z Eclipse ?/SPAN> Apache Derby 工具
?/SPAN> Eclipse?/SPAN>WTP ?/SPAN> Derby 构徏 Web 应用E序
?/SPAN> Apache Ant q行 Derby 数据库开?/SPAN>
maxIdle
The maximum number of active connections that can remain idle in the pool, without extra ones being released, or zero for no limit.
理解Q能够在池中保存的处于空闲状态的zd链接的最大数目。前提是没有额外的链接被释放。(也就是说没有他的使用中的链接被释攄情况下,q接池中保存的最大空闲链接数Qؓ0表示不限制?/P>
maxWait
The maximum number of milliseconds that the pool will wait (when there are no available connections) for a connection to be returned before throwing an exception, or -1 to wait indefinitely.
当没有可以用的数据库链接的时候,q接池将要等待一个链接被q回的最长时_毫秒Q,过q个旉p抛出异常。-1表示不受限制?/P>
优点:
1. 交互能力?/SPAN>,完全可能过C/Sl构的表?/SPAN>
2. 兼容性高,几乎所有的览器都装有flash插g
3. ?/SPAN>jsp?/SPAN>servletl合动态生能力强
4. Laszlo相当于一?/SPAN>framework,方便在不同的容器间移?/SPAN>
5. 学习曲线不高,XML+JavaScriptQ做web的很Ҏ上手
~点:
1. xml文g解码q编译ؓflash的代仯大,管对编译结果做?/SPAN>cacheQ如果有大量动态部分,仍然需要反复编译,?/SPAN>WEB服务器的压力比传l的大出不少
2. flash文g本n体积较大Q对|络带宽的要求较?/SPAN>
3. flashq行时的消耗也?/SPAN>,对客L要求也较?/SPAN>,不过现在的机器配|问题不?/SPAN>
4. 现在q不够完?/SPAN>/E_,实际应用的比较少.
2.自定义的Actionl承DownloadAction?/SPAN>
然后实现Q?/SPAN>getStreamInfo()ҎQ该Ҏ用于q回文g或者流的信息?/SPAN>
protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
可以覆盖Q?/SPAN>getBufferSizeҎQ用于自定义?/SPAN>servlet?/SPAN>output stream传输数据的缓冲区大小Q?/SPAN>bytes字节敎ͼ?/SPAN>
DownloadAction中有一个内部的接口StreamInfo代表着不同的抽象信息Q定义了两个ҎQ?/SPAN>
public static interface StreamInfo {
public abstract String getContentType();//得到下蝲文g?/SPAN>MIMEcd
public abstract InputStream getInputStream() throws IOException;
}
其中DownloadAction提供了两?/SPAN>StreamInfo的默认实玎ͼ
FileStreamInfo 代表从磁盘下载一个文?/SPAN>
ResourceStreamInfo 代表下蝲一?/SPAN>web应用中的一个资?/SPAN>
当然Q我们自p可以实现自己特定的类Q比如从数据库中取得的c,或者从FTP取得文g的流的类?/SPAN>
下面写一个简单的覆盖getStreamInfo的方法,实现下蝲Web应用?/SPAN>/images/bbg.gif囄Q?/SPAN>
public StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response){
response.setHeader("Content-disposition",
"attachment; filename=" + "bbg2.gif");//讄文g名称
StreamInfo si = new ResourceStreamInfo("image/gif",this.servlet.getServletContext(),"/images/bbg.gif");
return si;
}
使用非常方便Q而且能够保持E序一致的l构。原来我开发的pȝ中下载都是统一使用Servlet的,׃目中整合了Spring,所以对?/SPAN>Servletq需要单独的Ҏ来获取相应的服务层的BeanQ?/SPAN>DownloadAction之后Q所有的Action都是?/SPAN>Springq行理的,非常方便?/SPAN>log4j:WARN No appenders could be found for logger (org.springframework.beans.factory.access.SingletonBeanFactoryLocator).
log4j:WARN Please initialize the log4j system properly.
然后我们是看不到spring加蝲bean的配|信息的?BR>在classpath路径下加入:log4j.propertiesQ则能够昄bean的加载信?/FONT>
2. 在web应用中ؓSpring配置log4j
Spring的做法是使用一个Servlet ListenerQ在Web Container启动时把ROOT的绝对\径写到系l变量里Q这样log4j的配|文仉可以用${myAppfuse.root}来表C刚刚设q去的系l变量:log4j.appender.logfile.File=${myAppfuse.root}/logs/mylog.log
在Web.xml中配|语句如下:
<!--如果不设Q默认ؓweb.root,但最好设|,以免目间冲H?->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>myappfuse.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
q里配置了一个listenerQ也可以配置servlet:
<servlet>
<servlet-name>log4j</servlet-name>
<servlet-class>
org.springframework.web.util.Log4jConfigServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
配置好了以后我们可以在当前应用的logs目录下找到日志记录文Ӟmylog.log
属性log4jConfigLocation的值徏议还是设|ؓQ?WEB-INF/classes/log4j.propertiesQ这h们在不启动web应用的时候,做一些测试这能够正确地记录日志信息?/P>
1. jsp面Q?/SPAN><%@ page contentType="text/html;charset=gb2312"%>
2. 加过滤器Q?/SPAN>
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. 修改server.xml文g
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="GBK" />
<Connector port="8009"
enableLookups="false" redirectPort="8443" debug="0"
protocol="AJP/1.3" URIEncoding="GBK" />
提示Q如果采?/SPAN>JK的方式整合,只需要在W二?/SPAN>Connetor处修改即可。可能在某些环境下两个地斚w需要设|,好多|上的教E都是两个地斚w需要设|,我实际操作告诉我只要加第二个?/SPAN>import org.apache.commons.digester.rss.Channel;
import org.apache.commons.digester.rss.RSSDigester;
import org.xml.sax.SAXException;
/**
* @author bing.xie
*
*/
public class ParseRssChannel {
public static void main(String[] args) {
String url = " RSSDigester digester = new RSSDigester();
try {
Channel obj = (Channel) digester.parse(url);
System.out.println(obj.getTitle());
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
}
q样真的是很方便。这只是抛砖引玉,希望大家共同发掘Q?BR>