??xml version="1.0" encoding="utf-8" standalone="yes"?>
如果你在xwork.xml里面配置了default-action-ref,那么当xwork中没有找到对应的action?默认׃调用default-action-ref指定的action.
官方的wiki文档参考这? http://wiki.opensymphony.com/display/WW/Action+configuration
配置代码如下:
<package name="myPackage" ....> ... <default-action-ref name="simpleViewResultAction"> <!-- An example of a default action that is just a simple class that has 3 fields: successUrl, errorUrl, and inputUrl. This action parses the request url to set the result values. In the normal case it just renders velocity results of the same name as the requested url. --> <action name="simpleViewResultAction" class="SimpleViewResultAction"> |
但是要注?一般一个package内配|一?如果配置多个,无法预结果了.
注意上面的配|?W一个result的name属性被省略?webwork会认为它?SUCCESS".
WebWork带的例子里面有default-action-ref的配|?可以参?
在性能调优之前Q我们首先来了解一下性能是什么?关于性能Q我x个学习过 Java 的h都能列出几点Q甚臛_以夸夸其谈。在?/span> Java TM Platform Performance 》一书中Q定义了如下五个斚w来作判性能的标准:
1) q算的性能——哪一个算法的执行性能最好?
2) 内存的分配——程序运行时需要耗费多少内存Q?/span>
3) 启动的时间——程序启动需要多长时_q在 Web 目中的影响不大Q但要注意部分程序需要部|或q行在客L时的情ŞQ比?/span> applet E序Q?/span>
4) E序的可伸羃性——在压力负蝲的情况下Q程序的性能如何Q?/span>
5) 性能的感知——用户在什么情况下会觉得程序的性能不好Q?/span>
以上五个斚wQ在具体的用场景可以有选择的去评判。至于这五方面的性能调优Q在后箋的章节中会陆箋的给以相应的性能调优{略?/span>
我们只需要关心对我们E序有媄响,可以察觉到的性能问题Q而不是每一个类中的每一个方法我们都需要想方设法的提高性能。如果程序的性能没有辑ֈ我们所期望的要求,我们才需要考虑如何优化性能。同LQ晦涩的代码虽然提高了程序的性能Q但同时可能带给我们的是l护的噩梦。我们需要折中的考虑以上两种情况Q得程序的代码是优的Qƈ且运行的_快,辑ֈ客户所期望的性能要求?/span>
优化代码甚至会导致不良的l果Q?/span> Donald Knuth Q一位比较牛比较有媄响的人物Q具体是谁,我也忘了Q谁知道Q可以告诉我一下,谢谢Q)曾说q,?/span> Premature optimization is the root of all evil?/font> 。在开始性能调优前,需要先指出不优化代码的一些理由?/span>
1) 如果优化的代码已l正常工作,优化后可能会引入新的 bug Q?/span>
2) 优化代码向于代码更难理解和维护;
3) 在一个^C优化的代码,在另一个^C可能更糟Q?/span>
4) p很多旉在代码的优化上,提高了很的性能Q却D了晦涩的代码?/span>
实Q在优化前,我们必须认真的考虑是否值得M化?/span>
一般我们提高应用程序的性能划分Z下几个步骤:
1) 明确应用E序的性能指标Q怎样才符合期望的性能需求;
2) 在目标^台进行测试;
3) 如果性能已经辑ֈ性能指标Q?/span> Stop Q?/span>
4) 查找性能瓉Q?/span>
5) 修改性能瓉Q?/span>
6) q回到第 2 步?/span>
不同版本?/span> JDK Q甚至不同厂家的 JDK 可能都存在着很大的差异,对于性能优化的程度不同。一般来_可能选择最新发布的E_?/span> JDK 版本。最新的E_?/span> JDK 版本相对以前?/span> JDK 版本都会做一?/span> bug 的修改和性能的优化工作?/span>
垃圾攉是自动释放不再被程序所使用的对象的q程。当一个对象不再被E序所引用Ӟ它所引用的堆I间可以被回Ӟ以便被后l的新对象所使用。垃圾收集器必须能够断定哪些对象是不再被引用的,q且能够把它们所占据的堆I间释放出来。如果对象不再被使用Q但q有被程序所引用Q这时是不能被垃圾收集器所回收的,此时是所谓的“内存泄漏”。监控应用程序是否发生了内存泄漏Q有一个非怼U的监控工h荐给大家—?/span> Quest 公司?/span> JProbe 工具Q用它来观察程序运行期的内存变化,q可产生内存快照Q从而分析ƈ定位内存泄漏的确切位|,可以_定位到源码内。这个工L使用我在后箋的章节中q会做具体介l?/span>
Java 堆是指在E序q行时分配给对象生存的空间。通过 -mx/-Xmx ?/span> -ms/-Xms 来设|v始堆的大和最大堆的大。根据自?/span> JDK 的版本和厂家军_使用 -mx ?/span> -ms ?/span> -Xmx ?/span> -Xms ?/span> Java 堆大决定了垃圾回收的频度和速度Q?/span> Java 堆越大,垃圾回收的频度越低,速度慢。同理, Java 堆越,垃圾回收的频度越高,速度快。要惌|比较理想的参数Q还是需要了解一些基知识的?/span>
Java 堆的最大g能太大,q样会造成pȝ内存被频J的交换和分c所以最大内存必M于物理内存减d他应用程序和q程需要的内存。而且堆设|的太大Q造成垃圾回收的时间过长,q样得不偿失,极大的媄响程序的性能。以下是一些经怋用的参数讄Q?/span>
1) 讄 -Xms {于 -XmX 的|
2) 估计内存中存zd象所占的I间的大,讄 -Xms {于此| -Xmx 四倍于此|
3) 讄 -Xms {于 -Xmx ?/span> 1/2 大小Q?/span>
4) 讄 -Xms 介于 -Xmx ?/span> 1/10 ?/span> 1/4 之间Q?/span>
5) 使用默认的设|?/span>
大家需要根据自qq行E序的具体用场景,来确定最适合自己的参数设|?/span>
除了 -Xms ?/span> -Xmx 两个最重要的参数外Q还有很多可能会用到的参敎ͼq些参数通常强烈的依赖于垃圾攉的算法,所以可能因?/span> JDK 的版本和厂家而有所不同。但q些参数一般在 Web 开发中用的比较,我就不做详细介绍了。在实际的应用中注意讄 -Xms ?/span> -Xmx 使其可能的优化应用E序p了。对于性能要求很高的程序,需要自己再多研I研I?/span> Java 虚拟机和垃圾攉法的机制了。可以看看曹晓钢译的《深?/span> Java 虚拟机》一书?/span>
1. 扎实的基。数据结构、离散数学?a class="bluekey" target="_blank">~译原理Q这些是所有计机U学的基Q如果不掌握他们Q很隑ֆ出高水^的程序。据我的观察Q学计算Z?/a>的h比学其他专业的h更能写出高质量的软g。程序h人都会写Q但当你发现写到一定程度很隑ֆ提高的时候,应该想x不是要回q头来学学这些最基本的理论。不要一开始就dOOPQ即使你再精通OOPQ遇C些基本算法的时候可能也会束手无{?/p>
2. 丰富的想象力。不要拘泥于固定的思维方式Q遇到问题的时候要多想几种解决问题的方案,试试别h从没惌的方法。丰富的惌力是建立在丰富的知识的基上,除计机以外Q多涉猎其他的学U,比如天文、物理、数学等{。另外,?a class="bluekey" target="_blank">看科qȝ?/a>也是一个很好的途径?/p>
3. 最单的是最好的。这也许是所有科学都遵@的一条准则,如此复杂的质能互换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的Ҏ更容易被人理解,更容易实玎ͼ也更Ҏl护。遇到问题时要优先考虑最单的ҎQ只有简单方案不能满求时再考虑复杂的方案?/p>
4. 不钻牛角。当你遇到障的时候,不妨暂时q离电脑Q看看窗外的风景Q听听轻音乐Q和朋友聊聊天。当我遇到难题的时候会ȝ游戏Q而且是那U极暴力的打斗类游戏Q当负责游戏的那部分大脑l胞极度亢奋的时候,负责~程的那部分大脑l胞得C充分的休息。当重新开始工作的时候,我会发现那些N现在竟然可以q刃而解?/p>
5. 对答案的渴求。hc自然科学的发展史就是一个求得到答案的q程Q即使只能知道答案的一部分也值得我们M出。只要你坚定信念Q一定要扑ֈ问题的答案,你才会付出精力去探烦Q即使最后没有得到答案,在过E中你也会学到很多东ѝ?/p>
6. 多与别h交流。三必有我师Q也许在一ơ和别h不经意的谈话中,可以迸出灵感的火花。多上上|,看看别h对同一问题的看法,会给你很大的启发?/p>
7. 良好的编E风根{注意养成良好的习惯Q代码的~进~排Q变量的命名规则要始l保持一致。大安知道如何排除代码中错误,却往往忽视了对注释的排错。注释是E序的一个重要组成部分,它可以你的代码更容易理解,而如果代码已l清楚地表达了你的思想Q就不必再加注释了,如果注释和代码不一_那就更加p糕?/p>
8. 韧性和毅力。这也许?高手"和一般程序员最大的区别。高手们q不是天才,他们是在无数个日日夜夜中练出来的。成功能l我们带来无比的喜悦Q但q程却是无比的枯燥乏呟뀂你不妨做个试Q找?0000以内的素数表Q把它们全都抄下来,然后再检查三遍,如果能够不间断地完成q一工作Q你可以满一条?/p>
q些是我q几q程序员生的一点体会,希望能够l大家有所帮助?/p>
//用数l也可以实现
//String[] str = {"","限时","Ҏ","Ҏ?};
//request.setAttribute("list",str);
%>
<select size="1" name="jjcd" value="" style="width: 91; height: 18">
<c:forEach var="item" items="${list}">
<c:choose>
<c:when test="${item eq 'Ҏ'}">
<option selected>Ҏ</option>
</c:when>
<c:otherwise>
<option><c:out value="${item}"/></option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
另一U实C拉菜单的ҎQ?br /> <select name="jjcd">
<c:forEach var="item" items="${list}">
<option <c:if test="${item eq 'Ҏ'}">selected</c:if> value="<c:out value="${item}"/>">
<c:out value="${item}"/></option>
</c:forEach>
</select>
// Fields
private AllTablePbId id;
// Property accessors
public AllTablePbId getId() {
return this.id;
}
public void setId(AllTablePbId id) {
this.id = id;
}
}
public class AllTablePbId implements java.io.Serializable {
// Fields
private String owner;
private String tableName;
private String columnName;
private String dataType;
private String pbcCnam;
private String pbcCmnt;
// Property accessors
public String getOwner() {
return this.owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public String getTableName() {
return this.tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getColumnName() {
return this.columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getDataType() {
return this.dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public String getPbcCnam() {
return this.pbcCnam;
}
public void setPbcCnam(String pbcCnam) {
this.pbcCnam = pbcCnam;
}
public String getPbcCmnt() {
return this.pbcCmnt;
}
public void setPbcCmnt(String pbcCmnt) {
this.pbcCmnt = pbcCmnt;
}
}
配置文gQ?br /><hibernate-mapping>
<class name="com.hhkj.workflow.bean.AllTablePb" table="V_ALLTAB_PB" schema="CANP">
<composite-id name="id" class="com.hhkj.workflow.bean.AllTablePbId">
<key-property name="owner" type="string">
<column name="OWNER" length="30" />
</key-property>
<key-property name="tableName" type="string">
<column name="TABLE_NAME" length="30" />
</key-property>
<key-property name="columnName" type="string">
<column name="COLUMN_NAME" length="30" />
</key-property>
<key-property name="dataType" type="string">
<column name="DATA_TYPE" length="106" />
</key-property>
<key-property name="pbcCnam" type="string">
<column name="PBC_CNAM" length="30" />
</key-property>
<key-property name="pbcCmnt" type="string">
<column name="PBC_CMNT" length="254" />
</key-property>
</composite-id>
</class>
</hibernate-mapping>
q样可以通过AllTablePb.getId()取得相关的信息?br /> 感觉myeclipse的确不错Q特别是对于使用hibernateq不是非常熟l的人来_通过它可以帮解决不少问题?br /> 通过q样对视囄操作Q同样也可以用到对于那些没有定义主键的表Q操作方法是一L?br /> 呵呵Q个人的一点体会,Ƣ迎大家多提意见?/p>
interface
关键字用来声明一个接口,它可以生一个完全抽象的c,q且不提供Q何具体实现?/span>
interface
的特性整理如下:
1.
接口中的Ҏ可以有参数列表和q回cdQ但不能有Q何方法体?/span>
2.
接口中可以包含字D,但是会被隐式的声明ؓ
static
?/span>
final
?/span>
3.
接口中的字段只是被存储在该接口的静态存储区域内Q而不属于该接口?/span>
4.
接口中的Ҏ可以被声明ؓ
public
或不声明Q但l果都会按照
public
cd处理?/span>
5.
当实C个接口时Q需要将被定义的Ҏ声明?/span>
public
cd的,否则为默认访问类型,
Java
~译器不允许q种情况?/span>
6.
如果没有实现接口中所有方法,那么创徏的仍然是一个接口?/span>
7.
扩展一个接口来生成新的接口应用关键字
extends
Q实C个接口?/span>
implements
?/span>
interface
在某些地方和
abstract
有相似的地方Q但是采用哪U方式来声明cM要参照以下两点:
1.
如果要创Z带Q何方法定义和成员变量的基c,那么应该选择接口而不是抽象类?/span>
2.
如果知道某个cd该是基类Q那么第一个选择的应该是让它成ؓ一个接口,只有在必要有方法定义和成员变量的时候,才应该选择抽象cR因为抽象类中允许存在一个或多个被具体实现的ҎQ只要方法没有被全部实现该类׃是抽象类?/span>
以上是接口的基本特性和应用的领域,但是接口l不仅仅如此Q在 Java 语法l构中,接口可以被嵌套,既可以被某个cd套,也可以被接口嵌套。这在实际开发中可能应用的不多,但也是它的特性之一。需要注意的是,在实现某个接口时Qƈ不需要实现嵌套在其内部的M接口Q而且Q?/span> private 接口不能在定义它的类之外被实现?/span>