??xml version="1.0" encoding="utf-8" standalone="yes"?>
回答Q茉莉花?
原因Q好一늾?没力)的茉莉花?
提问Q猩猩最讨厌什么线Q?
回答Q^行线?
原因Q^行线没有怺(香蕉)?
提问Q橡皮、老虎皮、狮子皮哪一个最不好Q?
回答Q橡皮?
原因Q橡皮擦(皮??
提问Q布和纸怕什么?
回答Q布怕一万,U怕万一?
原因Q不(?怕一万,?U?怕万一?
提问Q铅W姓什么?
回答Q萧?
原因Q削(?铅笔?
提问Q麒麟到了北极会变成什么?
回答Q冰淇凌?
原因Q冰淇凌(冰麒??
提问Q哪位历史h物最Ơ扁Q?
回答Q苏武?
原因Q苏武牧北(被v??
提问Q从1?哪个数字最勤劳Q哪个数字最懒惰Q?
回答Q?懒惰Q?勤劳?
原因Q一(1)不做?2)不休?
提问Q怎样佉K雀安静下来Q?
回答Q压它一下?
原因Q鸦雀无声(压雀无声)?
提问Q历史上哪个的最?
回答Q曹?
原因Q说ҎҎ?
问题Q米她妈是谁
{案Q花
原因Q花生米
白加小白等于什么?
{于白?
原因Q小白TWO
30-50哪个数字比熊的大便厉?!
{案:40(事实胜于???/font>
]]>
Cluster
集群技术可如下定义
:
一l相互独立的服务器在|络中表Cؓ单一的系l,q以单一pȝ的模式加以管理。此单一pȝ为客户工作站提供高可靠性的服务?/span>
大多数模式下Q集中所有的计算机拥有一个共同的名称Q集内Mpȝ上运行的服务可被所有的|络客户所使用?/span>
Cluster
必须可以协调理各分ȝlg的错误和p|Qƈ可透明地向
Cluster
中加入组件?/span>
一?/span>
Cluster
包含多台
(
臛_二台
)
拥有׃n数据存储I间的服务器。Q何一台服务器q行一个应用时Q应用数据被存储在共享的数据I间内。每台服务器的操作系l和应用E序文g存储在其各自的本地储存空间上?/span>
# Load mod_jk module. Specify the filename
# of the mod_jk lib you’ve downloaded and
# installed in the previous section
LoadModule jk_module modules/mod_jk-1-2-13-apache-2-0-54.so
# Where to find workers.properties
JkWorkersFile conf/workers2.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
JkMount /* loadbalancer
worker.list=loadbalancer,server1,server2
# Define the first node...
worker.server1.port=8009
worker.server1.host=172.16.0.116
worker.server1.type=ajp13
worker.server1.lbfactor=1
worker.server1.local_worker=1
worker.server1.cachesize=10
# Define the first node...
worker.server2.port=8009
worker.server2.host=172.16.32.88
worker.server2.type=ajp13
worker.server2.lbfactor=1
worker.server2.local_worker=1
worker.server2.cachesize=10
# Now we define the load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=server1,server2
worker.loadbalancer.sticky_session=1
<Engine name="jboss.web" defaultHost="localhost">
<Engine jvmRoute="server1" name="jboss.web" defaultHost="localhost">
<attribute name="SnapshotMode">instant</attribute>
<attribute name="CacheMode">REPL_ASYNC</attribute>
<config>
<TCP bind_addr="172.16.0.116" start_port="7810" loopback="true"/>
<TCPPING initial_hosts="172.16.0.116[7810],172.16.32.88[7810]" port_range="3" timeout="3500"
num_initial_members="3" up_thread="true" down_thread="true"/>
<MERGE2 min_interval="5000" max_interval="10000"/>
<FD shun="true" timeout="2500" max_tries="5" up_thread="true" down_thread="true" />
<VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false" />
<pbcast.NAKACK down_thread="true" up_thread="true" gc_lag="100"
retransmit_timeout="3000"/>
<pbcast.STABLE desired_avg_gossip="20000" down_thread="false" up_thread="false" />
<pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="false"
print_local_addr="true" down_thread="true" up_thread="true"/>
<pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>
</config>
<replication-config>
<replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger>
<replication-granularity>SESSION</replication-granularity>
</replication-config>
SET_AND_GET
SET_AND_NON_PRIMITIVE_GET
SET
DEBUG [org.jboss.web.tomcat.tc5.session.JBossCacheManager] check to see if needs to store and replicate session with id Im9-qpuaXppMS+xXwE3M+Q**.server1
DEBUG [org.jboss.web.tomcat.tc5.session.ClusteredSession] processSessionRepl(): session is dirty. Will increment version from: 20 and replicate.
拯 cas.war ?/span> tomcat/webapps
拯 casclient.jar ?/span> tomcat/common/lib ?/span>
d下面的配|到自己 war ?/span> web.xml 剙
<filter>
<filter-name>CAS Filter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://localhost:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://localhost:8443/cas/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>localhost:8080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
tomcat/conf/server.xml 打开 8443 那个 connector.
如果没有添?/span> :
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
执行 :
%java_home%\bin\keytool -genkey -alias tomcat -keyalg RSA
名字 : localhost.
密码 :changeit
其他 , 随便
Export the certificate from the .keystore file to a file called server.crt.
%java_home%\bin\keytool -export -alias tomcat -file server.crt
Import the certificate into the default jvm truststore.
%java_home%\bin\keytool -import -file server.crt -keystore ./jre/lib/security/cacerts
密码 :changeit
Test the SSL configuration by entering https://localhost:8443.
讉K应用
:http://localhost:8080/?.
配置是经帔R到的报错Q?/span>
1 ?/span> C:\Program Files\Java\jdk1.5.0_06\bin>keytool -genkey -alias tomcat -keyalg RSA
输入 keystore 密码Q?/span> changeit
keytool 错误Q?/span> java.io.IOException: Keystore was tampered with, or password was i
ncorrect
原因Q系l中有了 *.keystore 文gQ删除此文g可解决问题。此文g通常?/span> C:\Documents and Settings\Administrator 目录之下?/span>
2 ?/span> C:\Program Files\Java\jdk1.5.0_06>keytool -import -file server.crt -keystore ./j
re/lib/security/cacerts
输入 keystore 密码Q?/span> changeit
keytool 错误Q?/span> java.io.FileNotFoundException: server.crt ( pȝ找不到指定的文g?/span> )
原因Q?/span>
是否做了下面q一步:
C:\Program Files\Java\jdk1.5.0_06\bin>keytool -export -alias tomcat -file server
.crt
输入 keystore 密码Q?/span> changeit
保存在文件中的认?/span> <server.crt>
做完q步之后Q稍{片刻,因ؓ server.crt 是在q步生成的,但是生成的时间比较长。通常在你操作下一步的时候它q没有生成,因此在配|的时候可能报错?/span>
操作q程Q?/span>
1 ?/span> C:\Program Files\Java\jdk1.5.0_06\bin>keytool -genkey -alias tomcat -keyalg RSA
输入 keystore 密码Q?/span> changeit
您的名字与姓氏是什么?
[Unknown] Q?/span> localhost
您的l织单位名称是什么?
[Unknown] Q?/span> er
您的l织名称是什么?
[Unknown] Q?/span> se
您所在的城市或区域名U是什么?
[Unknown] Q?/span> sd
您所在的州或省䆾名称是什么?
[Unknown] Q?/span> sdf
该单位的两字母国家代码是什?/span>
[Unknown] Q?/span> sdf
CN=localhost, OU=er, O=se, L=sd, ST=sdf, C=sdf 正确吗?
[ ?/span> ] Q?/span> y
2 、输?/span> <tomcat> 的主密码
Q如果和 keystore 密码相同Q按回RQ: changeit
3 ?/span> C:\Program Files\Java\jdk1.5.0_06\bin>keytool -export -alias tomcat -file server
.crt
输入 keystore 密码Q?/span> changeit
保存在文件中的认?/span> <server.crt>
4 ?/span> C:\Program Files\Java\jdk1.5.0_06>keytool -import -file server.crt -keystore ./j
re/lib/security/cacerts
输入 keystore 密码Q?/span> changeit
Owner: CN=localhost, OU=er, O=se, L=sd, ST=sdf, C=sdf
发照者: CN=localhost, OU=er, O=se, L=sd, ST=sdf, C=sdf
序号Q?/span> 4504c0e7
有效期间Q?/span> Mon Sep 11 09:50:31 CST 2006 臻I Sun Dec 10 09:50:31 CST 2006
认证指纹Q?/span>
MD5 Q?/span> 58:1E:6A:C2:9C:BB:8C:DF:5B:5C:79:B9:2E:FF:EE:45
SHA1 Q?/span> 02:7C:32:16:24:B1:7F:32:8C:84:96:E6:77:87:0A:1C:31:7B:C8:32
信Qq个认证Q?/span> [ ?/span> ] Q?/span> y
认证已添加至 keystore ?/span>
DOM适合于当今流行的各种语言Q包括Java,JavaScripte,VB,VBScriptQPerl,C,C++{。它了ؓHTML和XML文档提供了一个可应用于不同^台的~程接口。W3C DOM的最C息可从http://www.w3.org/TR2001/WD-DOM-Lever-3-Core-20010913查阅。微软在http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmconxmldomuserguide.asp上也有DOM的详l技术信息?/font>
DOM的设计ؓ了适用于不同的语言Q它保留了不同语a中非常相似的API。但是它q不适合于Java~程者的习惯。而JDOM作ؓ一U轻量API被制定,它最核心的要求是以JavaZ心,只适合于Java语言Q它遵@DOM的接口主要规则,除去了DOM中ؓ了兼容各语言而与Java习惯的不同?/font>
二、用JDOM的前提条?br /> 要有SAX、DOM解析器的cLӞJDOM只是一U适合JavaE序员来使用的Java XML解析器,目前行的Java XML解析器还有:Apache Xerces Java、JAXP?br />Xerces Java解析器是完全用Java~写的XML解析器,最新版本是2.5Q它支持以下标准和APIQ?br />Q?Q?XML1.0规范Q第二版本)
Q?Q?XML命名I间规范
Q?Q?DOM2核心标准规范
Q?Q?SAX2核心扩展
Q?Q?JAXP1.2 Q是Sun提供的用Java处理XML的接口API?br />Q?Q?XML Schemal构和数据类型标?/font>
q有最好的是它开放源代码Q我们可以在http://xml.apache.org/dist/xerces-j/ 处去下蝲。下载文件Xerces-J-bin.2.5.0.zip?br />解压下蝲文gQ得到四个压~包加到目的\径中Q其实不要全加,但不熟的情况下考虑q么做)?br />JDOM的二q制版本下蝲Qhttp://www.jdom.org/downloads/index.html
把解压后的jdom.jar文g加到目的类路径中,另外便于调试Q还要下载它的源代码?/font>
三、用JDOM解析XML
好了Q现在该是正题了。下面通过一个简单的例子说明一下怎么用JDOMq一适合JavaE序员习惯的工具包来解析XML文档?br />Z单,我用了如下XML作ؓ要解析的XML文gQ?br /><?xml version="1.0" encoding="gb2312"?>
<books>
<book email="zhoujunhui">
<name>rjzjh</name>
<price>60.0</price>
</book>
</books>
够简单的吧,但它对于我们兛_的东襉K有了Q子节点Q属性?br />下面是用于解析这个XML文g的Java文gQ?br />
1 public class JDomParse { 2 public JDomParse(){ 3 String xmlpath="library.xml"; 4 SAXBuilder builder=new SAXBuilder(false); 5 try { 6 Document doc=builder.build(xmlpath); 7 Element books=doc.getRootElement(); 8 List booklist=books.getChildren("book"); 9 for (Iterator iter = booklist.iterator(); iter.hasNext();) { 10 Element book = (Element) iter.next(); 11 String email=book.getAttributeValue("email"); 12 System.out.println(email); 13 String name=book.getChildTextTrim("name"); 14 System.out.println(name); 15 book.getChild("name").setText("alterrjzjh"); 16 17 } 18 19 XMLOutputter outputter=new XMLOutputter(); 20 outputter.output(doc,new FileOutputStream(xmlpath)); 21 22 } catch (JDOMException e) { 23 e.printStackTrace(); 24 } catch (IOException e) { 25 e.printStackTrace(); 26 } 27 } 28 public static void main(String[] args) { 29 new JDomParse(); 30 } 31}不到30行代码,现在我对代码解释一下:
public class RandomChar{
private static Random rand=new Random();
private static String source="ABCEDFGHIGKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxuyz";
private static char[] sur=source.toCharArray();
public static char nextChar(){
return sur[rand.nextInt(source.length())];
}
public static void main(String args[])
{
System.out.println(nextChar());
}
}
再编写一个随Z生字W串的类Q?br />import java.util.*;
public class RandomString{
private static Random rand=new Random();
private static int len;//字符串的长度
public RandomString(int len){ this.len=len;}
private static String source="ABCEDFGHIGKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxuyz";
private static char[] sur=source.toCharArray();
public static char nextChar(){
return sur[rand.nextInt(source.length())];
}
private static String nextString(){
char [] buf=new char[len];
for(int i=0;i<len;i++)
buf[i]=nextChar();
return new String(buf);}
public static void main(String args[])
{
RandomString randStr=new RandomString(5);
System.out.println(randStr.nextString());
}
}
可以止html在客L的浏览器中缓存,如果用户点击“后退”按钮,览器自动再ơ从服务器上获得最新的面?br />
HTML:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
<META HTTP-EQUIV="expires" CONTENT="0">
在MyTapestry.application中添加:
<meta key="org.apache.tapestry.disable-caching" value="true"/> <meta key="org.apache.tapestry.enable-reset-service" value="true"/>
q在JVM中添加:
-Dorg.apache.tapestry.disable-caching=true -Dorg.apache.tapestry.enable-reset-service=true
部分资料摘自Q?a >q煸四季?/a>Q?a >http://www.javaeye.com/pages/viewpage.action?pageId=717Q?/span>
Visit对象是一个应用程序空_用来储存应用E序逻辑和数据。这个对象能被应用程序中所有的面和组件访?font color="#000000">Qƈ且包?/font>WEB应用E序中某一个客L的特D信?/span>。一个单一Visit对象实例被应用程序中所有的面׃n。该对象cMHttpSession在典?/span>servlet应用E序中扮演的角色。实际上Q?/span>Visit对象最l作Z?/span>HttpSession属性被储存?/span>
Z在应用程序中使用一些通用数据Q?/span>Tapestry认可Visit对象。Tapestryq不知道也不兛_Visit对象的类?/span>。在框架中也没有定义Ҏ?/span>Visitc,每一个应用程序自己定?/span>VisitcR页面方法访?/span>Visit对象时ƈ不会指定具体的类型:
public Object getVisit();
注意强制转换cdQ?/span>
Visit visit = (Visit)getVisit();
Visit对象是框架自动生成的Q在W一ơ运行时被引用。你必须配置Tapestry提供实例化,一?/span>Visit对象生成Q就会持久化储存在HttpSession中?br />
<tr jwcid="@Foreach" source="ognl:userList" value="ognl:customer" element="tr">
<td width="7%" align="center" bgcolor="#FFFFFF"><span jwcid="@Insert" value="ognl:(customer.getAttributeValue('sex')==1)?'Male':'Female'"/></td>
<td width="19%" align="center" bgcolor="#FFFFFF"><span jwcid="@Insert" value="ognl:customer.getAttributeValue('workemail')"/></td>
<td width="7%" align="center" bgcolor="#FFFFFF"><span jwcid="@ExternalLink" page="xmlsync/EmployeeUpdate" parameters="ognl:customer.getAttributeValue('employeecode')"> ??</span></td>
<td width="8%" align="center" bgcolor="#FFFFFF"><span jwcid="deleteUser" parameters="ognl:customer.getAttributeValue('employeecode')" onclick="javascript:return window.confirm('定要删除该用户?');">??lt;/span></td>
</tr>
在EmploeeList.page文g中的一D代码:
<page-specification class="com.ce.myceaas.tapestry.page.xmlsync.EmployeeList">
<description>Login Page</description>
<property name="userList"/>
<property name="customer"/>
<component id="deleteUser" type="DirectLink">
<binding name="listener" value="listeners.deleteUser"/>
</component>
</page-specification>
在EmploeeList.java文g中的一D代码:
public abstract class EmployeeList extends BasePage implements PageRenderListener {
public abstract List getUserList();
public abstract void setUserList(List list);
@InjectObject("spring:xmlService")
public abstract XmlService getXmlService();
@InjectPage("xmlsync/EmployeeList")
public abstract IPage getEmployeeList();
public void pageBeginRender(PageEvent event) {
this.setUserList(this.getXmlService().getUsersList());
}
public void deleteUser(IRequestCycle cycle) {
Object[] obj = cycle.getServiceParameters();
if (obj[0] != null) {
if (obj[0] instanceof String) {
getXmlService().deleteUsers(obj[0].toString());
FowardUtil.forwardUrl((EmployeeList)getEmployeeList());
} else {
}
} else {
}
}
在XmlService.java文g中的一D代码:
public List getUsersList(){
List list = new ArrayList();
SAXBuilder builder = new SAXBuilder();
try {
File inFile = new File(url); //get the xmlfile
Document doc = builder.build(inFile);
Element root = doc.getRootElement();
list = root.getChildren("employeeinfo");
}
catch (JDOMException e) {
System.out.println(" is not well-formed.");
System.out.println(e.getMessage());
}
catch (IOException e) {
System.out.println(e);
}
return list;
}
可以在EmploeeList.html看到q段代码
"ognl:(customer.getAttributeValue('sex')==1)?'Male':'Female"
其中的customer是从<tr jwcid="@Foreach" source="ognl:userList" value="ognl:customer" element="tr">q里来的
userList是Listcd 其中的元素是customerQcustomer的类型是Element,再看customer.getAttributeValue('sex')Q这里ؓ什么能用getAttributeValue()呢,q就要问Tapestry4.0的实现机制了Q当|页表现旉到ognl:userList时会在EmploeeList.page中找?br /><property name="userList"/>
而在EmploeeList.java中有
public abstract List getUserList();
public abstract void setUserList(List list);
q两个抽象函数将完成对ognl:userList的赋g修改工作
下面q段代码
@InjectObject("spring:xmlService")//调用XmlService对象
······
public abstract XmlService getXmlService();
public void pageBeginRender(PageEvent event) {
this.setUserList(this.getXmlService().getUsersList());//真正的实现userList的传递的工作
}
q段代码EmploeeList.html和XmlService.java联系hQ这也就是ؓ什么在 EmploeeList.html能用getAttributeValue('sex')Ҏ的原因!