??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲第一第二第三第四第五第六 ,97久久国产亚洲精品超碰热,亚洲成AV人片在WWWhttp://www.tkk7.com/tunaic/archive/2009/08/27/292810.html三羽三羽Thu, 27 Aug 2009 06:25:00 GMThttp://www.tkk7.com/tunaic/archive/2009/08/27/292810.htmlhttp://www.tkk7.com/tunaic/comments/292810.htmlhttp://www.tkk7.com/tunaic/archive/2009/08/27/292810.html#Feedback0http://www.tkk7.com/tunaic/comments/commentRss/292810.htmlhttp://www.tkk7.com/tunaic/services/trackbacks/292810.html 2、http://www.diybl.com/course/3_program/java/javaxl/20071022/79392.html

三羽 2009-08-27 14:25 发表评论
]]>
SSO解决Ҏ大全 Single Sign-On for everyoneQ{Q?/title><link>http://www.tkk7.com/tunaic/archive/2008/12/26/248420.html</link><dc:creator>三羽</dc:creator><author>三羽</author><pubDate>Fri, 26 Dec 2008 05:05:00 GMT</pubDate><guid>http://www.tkk7.com/tunaic/archive/2008/12/26/248420.html</guid><wfw:comment>http://www.tkk7.com/tunaic/comments/248420.html</wfw:comment><comments>http://www.tkk7.com/tunaic/archive/2008/12/26/248420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/tunaic/comments/commentRss/248420.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/tunaic/services/trackbacks/248420.html</trackback:ping><description><![CDATA[     摘要:  java/vc单点d的简单实? 在门户项目中Q经怼遇到如何实现单点d的问题,下面本人的l验做个ȝ。欢q大家进行补充讨论?单点d的具体实现有很多U选择Q包括: 采用专门的SSO商业软gQ?主要有:Netgrity的SiteminderQ已l被CA收购。Novell 公司的iChain。RSA公司的ClearTrust{? 采用门户产品供应商自?..  <a href='http://www.tkk7.com/tunaic/archive/2008/12/26/248420.html'>阅读全文</a><img src ="http://www.tkk7.com/tunaic/aggbug/248420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/tunaic/" target="_blank">三羽</a> 2008-12-26 13:05 <a href="http://www.tkk7.com/tunaic/archive/2008/12/26/248420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP使用URLRewirte实现url地址伪静态化http://www.tkk7.com/tunaic/archive/2008/09/27/231532.html三羽三羽Sat, 27 Sep 2008 08:20:00 GMThttp://www.tkk7.com/tunaic/archive/2008/09/27/231532.htmlhttp://www.tkk7.com/tunaic/comments/231532.htmlhttp://www.tkk7.com/tunaic/archive/2008/09/27/231532.html#Feedback0http://www.tkk7.com/tunaic/comments/commentRss/231532.htmlhttp://www.tkk7.com/tunaic/services/trackbacks/231532.htmlURLRewirte的用?
1.满搜烦引擎的要?
2.隐藏技术实玎ͼ提高|站的移植?
3.满感的要?个h感觉q个用处太牵?

目部v
1.首先在http://tuckey.org/urlrewirte/下蝲urlrewirtefilter
2.解压所下蝲的文?把urlrewrite-2.6.0.jar复制到项目的WebRoot/WEB-INF/lib/目录?然后~译
3.把urlrewrite.xml复制到项目的WebRoot/WEB-INF/目录?
4.在web.xml文g中加入以?

 1<!-- 动态地址静态化 -->  
 2<filter>  
 3  <filter-name>UrlRewriteFilter</filter-name>  
 4  <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>  
 5  <init-param>  
 6    <param-name>logLevel</param-name>  
 7    <param-value>WARN</param-value>  
 8  </init-param>  
 9</filter>  
10<filter-mapping>  
11  <filter-name>UrlRewriteFilter</filter-name>  
12  <url-pattern>/*</url-pattern>  
13</filter-mapping>  
14

5.需要配|urlrewrite.xml文g来实现url静态化,下面详l说?

到这里相关的配置已经完成,下面看如何把动态地址静态化
1.普通url静态化
例如:要把http://localhost/prjtest/user/list.jsp转换成http://localhost/prjtest/user/list.html
q种是最单的,当一个servlet跌{到list.jsp面列出user列表?在urlrewrite.xml中这样配|?
1<rule>  
2  <from>^/user/list.html</from>  
3  <to type="redirect">/user/list.jsp</to>  
4</rule>  
当请?user/list.htmlq个面?实际上相当于h/user/list.jsp面
在servlet的蟩转要q样?
response.sendRedirect("./user/list.html");
2.带参数的url静态化
例如:要把http://localhost/prjtest/user/view.jsp?cid=1&cname=admin转换?
       http://localhost/prjtest/user/view/1_admin.html
在urlrewrite.xml中这样配|?
1<rule>  
2  <from>^/user/view/([0-9]+)_([a-z]+).html$</from>  
3  <to type="redirect">/user/view.jsp?cid=$1&cname=$2</to>  
4</rule>  

当请?user/view/1_admin.htmlq个面?实际上相当于h/user/list.jsp?cid=1&cname=admin面
在servlet的蟩转要q样?cid,cname为变?:
response.sendRedirect("./user/view/"+ cid +"_"+ cname +".html");
注意:配置文g中用"&"来代?&"
一个通用的正则表辑ּ:[a-zA-Z0-9]+

特别说明
Z么地址栏不变?
原因在于浏览器昄的是最后被l定的URL。当一个URL被提交后Q在某一个组件返回一个相应给览器之前,你的应用可能转发h多次。所有这些都发生在服务器端,览器ƈ不知道发生了什么事。当一个Http相应被放回时Q它q没有包含地址信息Q所以浏览器仅仅昄用来作ؓ初始h的地址?br />
要想让地址栏也变成静态化的URLQ很单,?lt;to type="redirect">Ҏ<to type="forward">卛_


三羽 2008-09-27 16:20 发表评论
]]>
Struts2的一些收?/title><link>http://www.tkk7.com/tunaic/archive/2008/09/27/231519.html</link><dc:creator>三羽</dc:creator><author>三羽</author><pubDate>Sat, 27 Sep 2008 07:45:00 GMT</pubDate><guid>http://www.tkk7.com/tunaic/archive/2008/09/27/231519.html</guid><wfw:comment>http://www.tkk7.com/tunaic/comments/231519.html</wfw:comment><comments>http://www.tkk7.com/tunaic/archive/2008/09/27/231519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/tunaic/comments/commentRss/231519.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/tunaic/services/trackbacks/231519.html</trackback:ping><description><![CDATA[<a href="/Files/tunaic/Struts2.rar">/Files/tunaic/Struts2.rar</a> <img src ="http://www.tkk7.com/tunaic/aggbug/231519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/tunaic/" target="_blank">三羽</a> 2008-09-27 15:45 <a href="http://www.tkk7.com/tunaic/archive/2008/09/27/231519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tapestry 各种lg使用http://www.tkk7.com/tunaic/archive/2008/09/27/231513.html三羽三羽Sat, 27 Sep 2008 07:29:00 GMThttp://www.tkk7.com/tunaic/archive/2008/09/27/231513.htmlhttp://www.tkk7.com/tunaic/comments/231513.htmlhttp://www.tkk7.com/tunaic/archive/2008/09/27/231513.html#Feedback0http://www.tkk7.com/tunaic/comments/commentRss/231513.htmlhttp://www.tkk7.com/tunaic/services/trackbacks/231513.html 1、For
source:是对应的javac里的List 对象或者是个数l?需要抽?或者提供set getҎ
value:是@环这个source对象代表当前的一?Q需要在page文g中设|问一个属性,可以不在对应的javac里有这个属?br /> index:是@环的索引?同value一?在page文g中设|一个属性即?<property name="index"/>
在@环的时?会自动ؓvlaue和index赋当前的?

2、Foreach 和For一样?/p>

3、Hiddenlg L多余S的处?br />  <input jwcid="@Hidden" type="hidden" value="ognl:blahblah" encode="false"/>


4?Insert lg
e.g.
    <input type="text" jwcid="name@Insert" value="ognl:user.name"/>
    面表现?会到页面类中寻找getUser().getName()Ҏ获取初值ƈ输出
    相当于在面上显C数?

5?TextField lg
e.g.
    <input type="text" jwcid="username@TextField" value="ognl:username"/>
    面表现?会到页面类中寻找getUsername()Ҏ获取初?
    *如果是修改信息页?通常初始D在页面表C前由setUsername()手动讄从数据库中读取出来的?
    表单提交?通过setUsername()写入新?即用戯入?,在类中通过getUsername()获取新?
    相当于在修改个h信息?首先d用户名赋予文本框(用户?初?用户修改时填入新?后台获取?
    *Hidden属性区分是普通文本输入框(默认false)和密码输入框(hidden="ognl:true")
    readonly属性设|只?readonly="true"为只?后台可读?
    *disabled属性设|是否可?diabled="true"Z可写(后台也不可读?

6?TextArea lg
e.g.
    <textarea jwcid="content@TextArea" value="ognl:content" cols="40" rows="10"></textarea>
    面表现?会到页面类中寻找getContent()Ҏ获取初?
    工作原理同TextField

7?RadioGroup/Radio lg
e.g.
    <span jwcid="headImage@RadioGroup" selected="ognl:headImage">
      <input jwcid="@Radio" type="radio" value="1"/>头像1
      <input jwcid="@Radio" type="radio" value="2"/>头像2
      <input jwcid="@Radio" type="radio" value="3"/>头像3
      <input jwcid="@Radio" type="radio" value="4"/>头像4
      <input jwcid="@Radio" type="radio" value="5"/>头像5
      <input jwcid="@Radio" type="radio" value="6"/>头像6
    </span>
    RadioGroup为每一个Radio提供一个唯一的ID。RadioGroup跟踪当前被选中的属性|q且只有一个Radio能够被选中.
    面提交ӞRadioGrouplg利用OGNL表达式向headImage字段写入被选中的Radiolg的value参数?
    面表现?修改面),会到页面类中寻找getHeadImage()Ҏ获取初?然后L@Radiolg中与其相同的lgq勾选上.

8?PropertySelection lg
    使用PropertySelectionlg必须要构造一个类来实现IPropertySelectionModel接口Qƈ且重写该接口?个方?
    public int getOptionCount() //提供下拉菜单的长?
    public Object getOption(int index) //提供select标签的option
    public String getLabel(int index) //提供select标签的Label|也就是下拉菜单显C的内容
    public String getValue(int index) //提供select标签的value?
    public Object translateValue(String value) //selected后的q回|value值未必就是我们需要的q回|可以在这个方法里面对q回的value做对应的转换或修?
e.g.1. 性别下拉?
    <select jwcid="gender@ProPertySelection" name="genderSelect" value="ognl:gender" model="supportedGender">
      <option selected>先生</option>
      <option>奛_</option>
    </select>


代码
GenderSelectionModel.java  
public class GenderSelectionModel implements IPropertySelectionModel {  
 
    public static final String male = "先生";  
 
    public static final String female = "奛_";  
 
    public static final String[] genderOptions = { male, female };  
 
    public int getOptionCount() {  
        return genderOptions.length;  
    }  
 
    public Object getOption(int index) {  
        return this.translateValue(genderOptions[index]);  
    }  
 
    public String getLabel(int index) {  
        return genderOptions[index].toString();  
    }  
 
    public String getValue(int index) {  
        return genderOptions[index];  
    }  
 
    public Object translateValue(String value) {  
        if (value.equals("先生")) {  
            return "1";  
        } else {  
            return "0";  
        }  
    }  

 

代码
ModUserInfo.java  
public IPropertySelectionModel getSupportedGender() {  
    return new GenderSelectionModel();  


    存入数据库中"1"代表先生,"0"代表奛_,通过translateValue(String value)Ҏ转换
    面表现?通过model属性给出的IPropertySelectionModel获取下拉选项,即getSupportedGender().
    然后通过getGender()Ҏ获取初?比如获取"0",则在面昄时寻找valuegؓ"0"的选项即ؓ"奛_",q择之作为初始选择?

e.g.2. 日志cd下拉?
    <select jwcid="logType@PropertySelection" name="typeSelect" value="ognl:logType" model="supportedType">
      <option>心情日记</option>
      <option>情感天地</option>
      <option>生活感触</option>
    </select>


代码
TypeSelectionModel.java  
public class TypeSelectionModel implements IPropertySelectionModel {  
      
    private List typeList = new ArrayList();  
 
    public TypeSelectionModel(List typeList) {  
        this.typeList = typeList;  
    }  
 
    public int getOptionCount() {  
        return typeList.size();  
    }  
 
    public Object getOption(int index) {  
        return ((LogType)typeList.get(index)).getValue();  
    }  
 
    public String getLabel(int index) {  
        return ((LogType) typeList.get(index)).getName();  
    }  
 
    public String getValue(int index) {  
        return ((LogType) typeList.get(index)).getValue();  
    }  
 
    public Object translateValue(String value) {  
        return value;  
    }  

 

代码
ModLog.java  
public IPropertySelectionModel getSupportedType() {  
    TypeSelectionModel typeSelectionModel =   
                           new TypeSelectionModel(loadType(getUser().getUserId()));  
    return typeSelectionModel;  
}  
 
private List loadType(int userid) {  
    ...//从数据库载入该用L日志cd列表  


    面表现?通过model属性给出的IPropertySelectionModel获取下拉选项,即getSupportedType().
    然后通过value属性给出的初始值即,getLogType()Ҏ获取初?比如获取"2",则在面昄时寻找valuegؓ"2"的选项即ؓ"生活感触",q择之作为初始选择?

9?Formlg
e.g.
    <form jwcid="logForm@Form">
      ...
    </form>
    Form的监?listener)Ҏ可以有两U方?
      1. 在Formlg中声?
        <form jwcid="logForm@Form" listener="ognl:listener:onLogin">
          ...
        </form>
      2. 在submitcdlg中声?
        <input type="submit" jwcid="onLogin@Submit" listener="listener:onLogin" value="发表"/>或?
        <span jwcid="@ImageSubmit" image="..." listener="listener:onLogin"><img src="..." width="" height=""/></span>
      前一U方式当Form中只要有submit׃触发监听Ҏ,后一U方式是Form中有多个submit,各自实现不同的监听方?

G) Foreach lg
e.g.
    <span jwcid="@Foreach" source="ognl:logList" value="ognl:item">
    循环lg,遍历source参数,在表现其内容前更新value参数,Foreachlg所包含的内定w复表?其中可以通过value参数获取所需昄内容.
    本例?面表现旉过getLogList()Ҏ获取日志列表,循环取出其中数据更新item(日志对象)q予以显C?其中item需要在面规范(.page)文g中声?
    <property name="item"/>
    *class参数用来LcMCSS的文件对Foreachq行修饰.
    Foreachlg: class="ognl:beans.evenOdd.next"
    Page文g: <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/>
    CSS文g: tr.odd{background-color: #ffffff;}tr.even{background-color: #eeeeee;}

10?Conditional lg
e.g.
    <span jwcid="@Conditional" condition='ognl:item.sex.equals("1")'>先生</span>
    <span jwcid="@Conditional" condition='ognl:item.sex.equals("0")'>奛_</span>
    conditional参数为true时运行Conditionallg中的HTML模板内容.
    在Tapestry4.0以后׃支持该组件了, 可以使用其他lg来实?
    1. Contrib:Choose和Contrib:When
    <library id="contrib" specification-path="classpath:/org/apache/tapestry/contrib/Contrib.library"/>(.application文g中引入Contribcd)
    <span jwcid="@contrib:Choose">
      <span jwcid="@contrib:When" condition='ognl:user.gender.equals("1")'>先生</span>
      <span jwcid="@contrib:When" condition='ognl:user.gender.equals("0")'>奛_</span>
    </span>
    2. Iflg
    <span jwcid="@If" condition='ognl:item.sex.equals("1")'>先生</span>
    <span jwcid="@If" condition='ognl:item.sex.equals("0")'>奛_</span>
    3. Elselg
    <span jwcid="@Else">man</span>

?===========================ts的函数执行顺?=======================================?br /> 对之前的该文章进行了一些修正,主要是针对finishLoad()Ҏ?
我觉得对初学者会有一些帮助?
下面q几个函数是我在使用的,它们的执行顺序依ơ从上到下?
1.protected void finishLoad() {} ***
2.public void pageValidate(PageEvent event) {}
3.public void activateExternalPage(Object[] parameters, IRequestCycle cycle) {}
4.public void pageBeginRender(PageEvent event) {}
// 如果有表单提交,则将form中的各字D늚Dl页面类
5. ...... 赋?
6.public void submit() // 表单提交{用listenter:调用的方?
7.protected void prepareForRender(IRequestCycle cycle) {}
----------------------------------------------------
1.protected void finishLoad() {}
q个函数最先执行,但是它实际上没有什么用处(我感觉)。因为:
  q个函数只在面池中没有某一个页面类、需要生成一个新的页面对象时才调用。这里就有一个陷阱:如果你的tomcat启动时用了-Dorg.apache.tapestry.disable-caching=true(Z调试方便而设)Q那么你每次h面Ӟ它都会执行(因ؓ每个request都会新生成一个页面类对象Q,造成了它L执行的假象。在实际的部|时Q会使用cachingQ则q个函数执行的机会很。所以要注意?
  初始化的代码攑֜4 pageBeginRender()?
2.public void pageValidate(PageEvent event) {}
如果实现了PageValidateListener接口Q则可以在这里进行验证,比如讉K权限{。执行完1后,它就开始执行?
3.public void activateExternalPage(Object[] parameters, IRequestCycle cycle) {}
如果实现了IExternalPage接口Q则可以从这里取得由外面传过来的参数。执?后,执行到这里。在q里可以把那些参数取出,赋给面cR?
4.public void pageBeginRender(PageEvent event) {}
执行?后,执行本函数。但是这时从客户端传q来的参数还没有被赋?如果提交了表单的?。这里可以进行一些初始化操作?
5.执行?后,如果有表单提交,在这里将会取出那些|赋给对应的字Dc?注意Q只是将表单中有的Dq来)
6.public void submit()
如果有表单提交的话,在这里将q行对应的操作。因为此时各字段已经取好gQ所以可以拿来直接用?
7.protected void prepareForRender(IRequestCycle cycle) {}
最后才执行q个Ҏ。我们可以在其中q行Z在页面上昄数据而进行的操作Q比如取得什么对象什么的Q因里页面类的属性赋值已l结束,可以直接拿来使用了?
注意Q如果执行了6Q则q要执行4Q再执行7。如果没?Q?完了q接是7?
以上是我所ȝ的执行顺序,不当之处h出?nbsp;     

-----------------------------------------------------
最开始学tapestry的时候,觉得“怎么有这么多地方需要持久啊”。原来以前只知道pageBeginRenderq个函数Q什么初始化操作都放在它里面。可是它是在赋g前执行,所以拿到的字段多都是空的,却都以ؓ是没有持久化的缘故。所以在客户端里放了一大堆的@HiddenQ或者session中持久,非常ȝQ,Q对tapestry也生的怀疑。现在才知道那些需要取得客L传来的参数的代码Q最好放在prepareForRender里,很多不必要的持久都可以省掉了



三羽 2008-09-27 15:29 发表评论
]]>
xml文g操作Q利用dom4j)http://www.tkk7.com/tunaic/archive/2008/09/27/231509.html三羽三羽Sat, 27 Sep 2008 07:10:00 GMThttp://www.tkk7.com/tunaic/archive/2008/09/27/231509.htmlhttp://www.tkk7.com/tunaic/comments/231509.htmlhttp://www.tkk7.com/tunaic/archive/2008/09/27/231509.html#Feedback0http://www.tkk7.com/tunaic/comments/commentRss/231509.htmlhttp://www.tkk7.com/tunaic/services/trackbacks/231509.html代码: package dom_xml;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Attribute;
import java.util.List;
import java.util.Iterator;

import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.*;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.dom4j.DocumentHelper;

public class XmlDom4J {

/**
  * 生成xml文gQ?br />   *
  */
public void createXMLFile(){
  //使用 DocumentHelper cdZ个文实例?DocumentHelper 是生?XML 文节点?dom4j API 工厂cR?br />   Document document=DocumentHelper.createDocument();
 
  //使用 addElement() Ҏ创徏根元?catalog 。addElement() 用于?XML 文中增加元素?br />   Element catalogElement = document.addElement("catalog");
  //?catalog 元素中?addComment() Ҏd注释“An XML catalog”?br />   catalogElement.addComment("An XML Catalog");
  //?catalog 元素中?addProcessingInstruction() Ҏ增加一个处理指令?br />   catalogElement.addProcessingInstruction("target","text");
 
  //?catalog 元素中?addElement() Ҏ增加 journal 元素?br />   Element journal=catalogElement.addElement("journal");
  //使用 addAttribute() Ҏ?journal 元素d title ?publisher 属性?br />   journal.addAttribute("title", "XML Zone");
  journal.addAttribute("publisher", "IBM Devoloperment");
 
  //d节点journal的子节点article,q设|其属性;
  Element articleElement=journal.addElement("article");
  articleElement.addAttribute("level", "Intermediate");
  articleElement.addAttribute("date", "December-2008");
 
  //d节点articleElement的子l点title,q?setText() Ҏ讄其元素的文本?br />   Element titleElement=articleElement.addElement("title");
  titleElement.setText("又是下雨?);
 
  //d节点articleElement的子l点author.d子结点的子结点firstname、lastname,q设|其文gQ?br />   Element authorElement=articleElement.addElement("author");
     Element  firstNameElement=authorElement.addElement("firstname");
     firstNameElement.setText("Marcello");
     Element lastNameElement=authorElement.addElement("lastname");
     lastNameElement.setText("Vitaletti");
    
     //可以使用 addDocType()  Ҏd文cd说明?br />    
    
     XMLWriter output;
  try {
   OutputFormat format=new OutputFormat();
   format.setEncoding("gb2312");
   output = new XMLWriter(
     new FileWriter(new File("catalog.xml")),format);
   output.write(document);
   output.close();
  } catch (IOException e) {
   e.printStackTrace();
  } 
}

/**
  * 修改xml文g指定节点的属性;
  * @param inputXml xml文g?br />   * @oldAttributeValue 原属性;
  * @attributeValue 要修Ҏ的|
  * @param XPath 要修改节点属性的表达式;如:"http://article/@level" 则表CZ改节点level(父节点ؓarticle)的属?br />   * 特别说明:@后面表示的是属?
  */
public Document modifyXMLNodeAttributeByName(File inputXml, String XPath,String oldAttributeValue,String attributeValue) {
  if(XPath.indexOf("@")<0){
   System.out.println("参数XPath无效,请在要修改的属性前加入'@'");
   return null;
  }
  SAXReader saxReader = new SAXReader();
  Document document=null;
  try {
   document = saxReader.read(inputXml);
   List list = document.selectNodes(XPath);
   Iterator iter = list.iterator();
   while (iter.hasNext()) {
    Attribute attribute = (Attribute) iter.next();
    if (attribute.getValue().equals(oldAttributeValue))//把原属性修改ؓ新的属性;
     attribute.setValue(attributeValue);
   }
   
  } catch (DocumentException e) {   
   e.printStackTrace();
  }
  return document;
 
}

/**
  * 修改指定节点的属性|
  * @param inputXml xml文g?br />   * @param XPath 要修改节点属性的表达式;如:"http://article/@level" 则表CZ改节点level(父节点ؓarticle)的属?br />   * @param attributeValue 属性新|
  */
public Document modifyXMLNodeAttributeByName(File inputXml, String XPath,String attributeValue) {
  if(XPath.indexOf("@")<0){
   System.out.println("参数XPath无效,请在要修改的属性前加入'@'");
   return null;
  }
  SAXReader saxReader = new SAXReader(); 
  Document document=null;
  try {
   document = saxReader.read(inputXml); 
   List list = document.selectNodes(XPath);   
   Iterator iter = list.iterator();
   while (iter.hasNext()) {
    Attribute attribute = (Attribute) iter.next();   
    //把原属性修改ؓ新的属性;
    attribute.setValue(attributeValue);
   }
   
  } catch (DocumentException e) {   
   e.printStackTrace();
  }
  return document;
}

/**
  * 获取某一节点的属性|
  * @param inputxml xml文gQ?br />   * @param XPath
  * @return
  */
public String[] getNodeAttributeValue(File inputxml,String XPath){
  String nodeAttri="";//储存节点属性?
  if(XPath.indexOf("@")<0){
   return null;
  }
  SAXReader saxReader=new SAXReader();
  Document document=null;
  try{
   document=saxReader.read(inputxml);
   List list=document.selectNodes(XPath);
   Iterator it=list.iterator();
   while(it.hasNext()){
    Attribute attri=(Attribute)it.next();
    nodeAttri+=attri.getValue()+",";
   }
  }catch(Exception e){
   e.printStackTrace();
  }
  if(nodeAttri.length()>0){
   nodeAttri=nodeAttri.substring(0, nodeAttri.length()-1);
  }
  return nodeAttri.split(",");
}

/**
  * 修改指定节点的文本|
  * @param inputXml
  * @param XPath 要修改节点属性的表达式;如:"http://article/@level" 则表Carticle节点下的所有level节点的文本;
  * @param newText 新的文本|
  */
public Document modifyXMLNodeTextByName(File inputXml,String XPath,String newText){
  if(XPath.indexOf("@")>=0){
   System.out.println("参数XPath无效!");
   return null;
  }
  SAXReader saxReader = new SAXReader();
  Document document=null;
  try {
   document=saxReader.read(inputXml);
   List list= document.selectNodes(XPath);
   Iterator iter = list.iterator();
   while(iter.hasNext()){   
    Element elementText=(Element)iter.next();   
    elementText.setText(newText);   
   }
  } catch (DocumentException e) {   
   e.printStackTrace();
  }
  return document;
}

/**
  *  替换指定节点文本的倹{?br />   * @param inputXml xml文g?br />   * @param XPath 要修改节点属性的表达式;如:"http://article/level" 则表Carticle节点下的所有level节点的文本;
  * @param oldText 原文?br />   * @param newText 新文本;
  */
public Document modifyXMLNodeTextByName(File inputXml,String XPath,String oldText,String newText){
  if(XPath.indexOf("@")>=0){
   System.out.println("参数XPath无效!");
   return null;
  }
  SAXReader saxReader = new SAXReader();
  Document document=null;
  try {
   document=saxReader.read(inputXml);
   List list= document.selectNodes(XPath);
   Iterator iter = list.iterator();
   while(iter.hasNext()){
    Element elementText=(Element)iter.next();
    if(elementText.getText().equals(oldText))
    elementText.setText(newText);
   }
  } catch (DocumentException e) {   
   e.printStackTrace();
  }
  return document;
}
/**
  * 获取某一节点的文本内容;
  * @param inputxml xml文gQ?br />   * @param XPath
  * @return
  */
public String[] getNodeTextValue(File inputxml,String XPath){
  String nodeTextValue="";//储存节点属性?
  if(XPath.indexOf("@")>=0){
   return null;
  }
  SAXReader saxReader=new SAXReader();
  Document document=null;
  try{
   document=saxReader.read(inputxml);
   List list=document.selectNodes(XPath);
   Iterator it=list.iterator();
   while(it.hasNext()){
    Element text=(Element)it.next();
    nodeTextValue+=text.getText()+",";
   }
  }catch(Exception e){
   e.printStackTrace();
  }
  if(nodeTextValue.length()>0){
   nodeTextValue=nodeTextValue.substring(0, nodeTextValue.length()-1);
  }
  return nodeTextValue.split(",");
}



/**
  * 保存xml文g;
  * @param document xml文g?
  * @param filePath 文g存储的全路径(包括文g?
  * @code 储存的编?
  */
public void saveXmlFile(Document document,String filePath,String code){
  if(document==null){
   return ;
  }
  XMLWriter output;
  try {
   OutputFormat format=new OutputFormat();
   format.setEncoding(code);
   output = new XMLWriter(new FileWriter(new File(filePath)),format);
   output.write( document );
   output.close();
  } catch (IOException e) {   
   e.printStackTrace();
  } 
}
 
  // 试Q?br /> public static void main(String[] args){
  XmlDom4J dom4jParser=new XmlDom4J(); 
  //生成XML
  //dom4jParser.createXMLFile();
  File file=new File("D:/MyWork/operateXMLfile/catalog.xml");
  //dom4jParser.saveXmlFile(document, "F://test.xml", "GBK");
 
  /*String[] attrArray=dom4jParser.getNodeAttributeValue(file, "http://article/@level");
  if(attrArray!=null){
   for(int i=0;i<attrArray.length;i++){
    System.out.println("Attribute is :"+attrArray[i]);
   }
  }*/
 
  String[] nodeText=dom4jParser.getNodeTextValue(file, "http://article/title");
  if(nodeText!=null){
   for(int i=0;i<nodeText.length;i++){
    System.out.println("NODE TEXT IS:"+nodeText[i]);
   }
  }
 
}
}
xml文g定义如下Q?
复制内容到剪贴板
代码:
<?xml version="1.0" encoding="gb2312"?>
<catalog><!--An XML Catalog--><?target text?>
<journal title="XML Zone" publisher="IBM Devoloperment">
<article level="学四年U?  date="December-2008"><title>又是下雨?lt;/title>
<author><firstname>Marcello</firstname><lastname>Vitaletti</lastname></author></article>
<article level="大学四年U?  date="2008-04-01"><title>太阳出来?lt;/title>
<author><firstname>Marcello</firstname><lastname>Vitaletti</lastname></author></article>
</journal></catalog>


三羽 2008-09-27 15:10 发表评论
]]>
Display Tag使用记收藏http://www.tkk7.com/tunaic/archive/2008/09/27/231504.html三羽三羽Sat, 27 Sep 2008 07:03:00 GMThttp://www.tkk7.com/tunaic/archive/2008/09/27/231504.htmlhttp://www.tkk7.com/tunaic/comments/231504.htmlhttp://www.tkk7.com/tunaic/archive/2008/09/27/231504.html#Feedback0http://www.tkk7.com/tunaic/comments/commentRss/231504.htmlhttp://www.tkk7.com/tunaic/services/trackbacks/231504.html     介个是Display Tag的官方网?a >http://displaytag.sourceforge.net/?br />
    首先当然是要下蝲它的jar包了Q?a >q里可以下蝲到最新的版本。将jar包放到WEB-INF的lib文g夹下。另外还需要两个辅助包Qapache的commons-lang和standard包,更多的辅助包可以在这?a >下蝲?br />
    在web.xml下添加一个filter
    <filter>
        <filter-name>exportFilter</filter-name>
        <filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
    </filter>

    在jsp面做一个引用:
<%@ taglib uri="http://displaytag.sf.net/el" prefix="display" %>

    首先我们定义一个list
<%
 List test = new ArrayList( 6 );
 test.add( "Test String 1" );
 test.add( "Test String 2" );
 test.add( "Test String 3" );
 test.add( "Test String 4" );
 test.add( "Test String 5" );
 test.add( "Test String 6" );
 request.setAttribute( "test", test );
%>

    当我们想在jsp面上显C个listӞ我们只需要写一句话
    <display:table name="test" />
    display tag会自动生成一个table

    如果list是从控制层抛出来的,name可用EL表达式表C?br />     <display:table name="${test}" />

    q是最单的display tag的用,我们可以l它加上样式{,也可以定义显C的列,下面的table昄复杂一?br /> <display:table name="test" styleClass="list" cellspacing="0" cellpadding="0">
  <display:column property="id" title="ID" class="idcol"/>
  <display:column property="name" />
  <display:column property="email" />
  <display:column property="description" title="Comments"/>
</display:table>

    如果惌l它加个链接也很?下面的代码给name加了q接Qƈ附带id参数Qemail也自动连接到mailto:XXX
<display:table name="test" styleClass="list" cellspacing="0" cellpadding="0">
  <display:column property="id" title="ID" class="idcol"/>
  <display:column property="name" url="detail.jsp" paramId="id" paramProperty="id"/>
  <display:column property="email" autolink="true"/>
  <display:column property="description" title="Comments"/>
</display:table>

下面介绍几个Display最常用的功能,更多功能请参?a >http://displaytag.homeip.net/displaytag-examples-1.1/?br /> 1. 分页
    如果惛_代码分页Q只需在display:table标签中添加一pagesize="每页昄行数"Q如
<display:table name="test" pagesize="10"/>

2. 对列排序
    display tag可对列进行排序,是点击列名Q对该列的数据进行排序。你只需Ҏ要排序的列添?sort="true" OKQ如下面的代码可对前三列q行排序。在display:table中添加defaultsort="列数"Q可默认Ҏ定的列排序?br /> <display:table name="test" styleClass="list" cellspacing="0" cellpadding="0" defaultsort="1">
  <display:column property="id" title="ID" class="idcol" sort="true"/>
  <display:column property="name" url="detail.jsp" paramId="id" paramProperty="id" sort="true"/>
  <display:column property="email" autolink="true" sort="true"/>
  <display:column property="description" title="Comments"/>
</display:table>
   如果table有分,Display Tag默认只对当前进行排序,如果惛_整个list排序Q可以在display:table之间d一D代码:
<display:setProperty name="sort.amount" value="list"/>

3. 导出数据
    在display:table中添加export="true"Q看看会出现什么!Display Tag默认会提供三U数据导出方式:CSV、Excel、XML ?br />     另外Display Tagq可以导ZؓPDF格式Q在http://prdownloads.sourceforge.net/itext/下蝲一个辅助包iText.jarQcopy到lib目录下,然后在display:table之间d一D代码:
<display:setProperty name="export.pdf" value="true"/>Q大功告成?/p>

4. Display Tag的属性设|?br />     前面所说的display:setProperty 是一U改变Display Tag属性的ҎQ但是在每个jsp中都要写太麻烦了?br />     Display Tag中设|了很多默认的属性,它有一个专门的属性文Ӟ是在它的jar包中的displaytag/properties/TableTag.properties
    惌改变它的默认属性,我们可以在WEB-INF\classes下新Z个文件displaytag.propertiesQ仿照TableTag.properties中属性的格式讄需要修改的属性?br />     TableTag.properties中的# messages中设|的是显C在面上的提示信息。默认是英文的,我们可以把它改ؓ中文的。不q这里只能用unicodeQ就是说中文字符必须转换为unicode码,q个可以使用jdk自带的native2ascii.exeq行转换?/p>

5. 其它功能
    DisplayTagq有一些很实用的小功能Q这里提两个。一个是Ҏ据的FormatQ这?.1版本d的新功能Q可以用标{方式格式化时间、数字、字W串。比如日期,在需要格式化的column标签中添加format="{0,date,yyyy-MM-dd}"Q第一个参Cؓ格式化的数据序号Q第二个参数是数据类型,数字为numberQ第三个参数为数据格式?br />     另外一个功能是对table数据的合计功能。在table标签中添?decorator="org.displaytag.decorator.TotalTableDecorator"Q然后在惌q行合计的数据列的column标签中添?total="true"Q该列就可以被计L了。但q个功能有个~点Q不能用在有分页的时候,它只能合计第一늚数据?br />
DisplayTag的不?br />     初次使用DisplayTag的h可能会觉得惊喜,但是用久了会发现很多问题Q最大的问题是对中文的支持不好,比如如果查询条g中有中文Q就无法页Q无法对中文排序Q将中文导出为指定文件时出现q{等。这些问题有时候会让h很郁P有时候逼得你要M改它的源代码。下面是对以上几个问题的解决ҎQ?br />     1. 对于中文无法页、排序,最单的办法是修改Tomcat下的server.xml文g。找到HTTP的Connector标签Q在里面d一URIEncoding="..."Q引号里面的内容取决于你的页面编码,比如可以是GBKQUTF8{。这样上面两个问题就可以解决了?br />     2. 导出为文Ӟ其实q个功能除了中文支持外还有很多其它问题,比如它会Html标签一起导出、只导出昄的内容,但如果对tableq行了decoratorQdecorator后的内容无法导出。如果想要将中文正确导出Q需要修改DisplayTag源代码?br />     下蝲相同版本的源代码Q在org.displaytag.export.ExcelView.java文g中找到getMimeType()ҎQ将此方法修改ؓ return "application/vnd.ms-excel;charset=GB2312";Q修改后导出数据的速度会慢很多Q不q将吧?br />     3. 新版的DisplayTag1.1d了对一ơ取部分数据的支持,相关的标{֌括partialList和sizeQ需要设|partialList="true"和size的大。具体怎么用偶q没研究?br />
q解决Q?/strong>

tomcat/jboss   修改server.xml

<Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />


.整合tomcat和apache后的讄
    刚开始我没有整合的时候传递的中文参数可以很好的解冻I后来整合apache后,却出Cؕ码了Q绕qapache后是正常的,所以问题出现在apache或apache和tomcat的通信上,l过baiduQ好不容易找到答案。修改server.xml文g中的如下行:

  q出现apache和tomcat的通信上,׃我这里的整合是采用JKQtomcat使用的是ajp13协议Q所以,需要在他们的通信阶段来处理编码,即代码中的URIEncoding="UTF-8"部分?br />  
websphere 
“服务?#8221;-->应用E序服务器,扑ֈ自己应用使用的服务器?
WS6有不同,注意?
扑ֈ“服务器基l构”Q展开其下?#8220;Java 和进E管?#8221;Q然后进?#8220;q程定义”?
q入后找?#8220;其它属?#8221;-->“Java 虚拟?#8221;Q?
?#8220;Java 虚拟?#8221;通用 JVM 参数 讄为:-Dfile.encoding=GBK

weblogic

【关键字?Tomcat容器 中文 字符~码 q Weblogic容器 服务?/font>
【正文】因为编码方式的不同在用Tomcat容器时会出现提交到Servlet的中文是q的方式,而且Tomcat5.x对于POST和GET的方式处理似乎还有不同,POST方式是采用Filter的方式即可,怎样能够处理GET方式中文提交q的问题呢Q?/font>
 可以采用配置服务器字W编码的ҎQ具体操作如下:
1、打开Tomcat安装目录中的conf目录
2、修改server.xml中的connector一个子,具体可能cM如下:

<Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" />

在其中添?strong style="color: black; background-color: #a0ffff">URIEncoding="GBK" Q或者是其他的编码方式,变成如下Q?/font>

<Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />

3、停止Tomcat服务Q重新启动Tomcat服务卛_?/font>

【另?strong style="color: black; background-color: #ffff66">Weblogic容器处理~码的方式?/font>

处理Weblogic容器的编码比较简单,只需要在站点的web.xml中配|一行如下的代码卛_?/font>

<context-param> <param-name>weblogic.httpd.inputCharset./*</param-name> <param-value>GBK</param-value> </context-param>

【另附Tomcat处理POST提交q的方式?/font>

1、首先在web.xml中配|过滤器

<filter> <filter-name>SetCharacterEncodingFilter</filter-name> <filter-class> cn.cublog.jedliu.SetCharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter>


<filter-mapping> <filter-name>SetCharacterEncodingFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>

2、在cn.cublog.jedliu包中SetCharacterEncodingFilter是用于来实现~码的过滤器?/font>

public class SetCharacterEncodingFilter implements Filter {
    protected String encoding = null;
    protected FilterConfig filterConfig = null;
    protected boolean ignore = true;
    public void destroy() {
        this.encoding = null;
        this.filterConfig = null;
    }
    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
    throws IOException, ServletException {
        if (ignore || (request.getCharacterEncoding() == null)) {
            String encoding = selectEncoding(request);
            if (encoding != null)
                request.setCharacterEncoding(encoding);
        }
        chain.doFilter(request, response);
    }

    public void init(FilterConfig filterConfig) throws ServletException {
     this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
        String value = filterConfig.getInitParameter("ignore");
        if (value == null)
            this.ignore = true;
        else if (value.equalsIgnoreCase("true"))
            this.ignore = true;
        else if (value.equalsIgnoreCase("yes"))
            this.ignore = true;
        else
            this.ignore = false;
    }
    protected String selectEncoding(ServletRequest request) {
        return (this.encoding);
    }
}



三羽 2008-09-27 15:03 发表评论
]]>
servlet 和JSP的上传下?/title><link>http://www.tkk7.com/tunaic/archive/2008/09/27/231502.html</link><dc:creator>三羽</dc:creator><author>三羽</author><pubDate>Sat, 27 Sep 2008 06:58:00 GMT</pubDate><guid>http://www.tkk7.com/tunaic/archive/2008/09/27/231502.html</guid><wfw:comment>http://www.tkk7.com/tunaic/comments/231502.html</wfw:comment><comments>http://www.tkk7.com/tunaic/archive/2008/09/27/231502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/tunaic/comments/commentRss/231502.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/tunaic/services/trackbacks/231502.html</trackback:ping><description><![CDATA[     摘要: 具体可以看下面的例子:主要是SERVLET package oa.home.servlet;import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import java.sql.*; import org.apache.commons.fileupload.D...  <a href='http://www.tkk7.com/tunaic/archive/2008/09/27/231502.html'>阅读全文</a><img src ="http://www.tkk7.com/tunaic/aggbug/231502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/tunaic/" target="_blank">三羽</a> 2008-09-27 14:58 <a href="http://www.tkk7.com/tunaic/archive/2008/09/27/231502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://sds54.com" target="_blank">aѹۿƵ</a>| <a href="http://mallmirror.com" target="_blank">ŮƵaƵȫվһ</a>| <a href="http://tqdrhj.com" target="_blank">þerƷѹۿ8</a>| <a href="http://ydysmedia.com" target="_blank">ѳҹƵ</a>| <a href="http://jomujy.com" target="_blank">˳߹ۿվ </a>| <a href="http://liulian88.com" target="_blank">˳ɼƵ߹ۿ </a>| <a href="http://my55572.com" target="_blank">Ļþ</a>| <a href="http://njjngs.com" target="_blank">ëƬ18ŮëƬ96</a>| <a href="http://datian-cn.com" target="_blank">¹Ʒ</a>| <a href="http://144446.com" target="_blank">Ʒ鶹Ѱ</a>| <a href="http://zjjtejia.com" target="_blank">רëƬ߳ˮ</a>| <a href="http://binz132.com" target="_blank">þþþþ޾Ʒ</a>| <a href="http://hhrrrr.com" target="_blank">Aһ</a>| <a href="http://wwwff113.com" target="_blank">AV뾫Ʒ</a>| <a href="http://szgreater.com" target="_blank">պƷһůů</a>| <a href="http://vvv75.com" target="_blank">޵Ӱѹۿ</a>| <a href="http://7778kk.com" target="_blank">պŷһѹۿ</a>| <a href="http://276194.com" target="_blank">³Դվav</a>| <a href="http://lookvod.com" target="_blank">˳վ߹ۿ</a>| <a href="http://sztsa.com" target="_blank">һƵ߹ۿwww</a>| <a href="http://w9366.com" target="_blank">һձþþ</a>| <a href="http://416164.com" target="_blank">69xxѹۿƵ</a>| <a href="http://www-44455588.com" target="_blank">Ļ뱬</a>| <a href="http://yuezhaoming.com" target="_blank">www޾Ʒٸһ</a>| <a href="http://777cc55.com" target="_blank">þóѲ</a>| <a href="http://31xyz.com" target="_blank">޸һ</a>| <a href="http://1y3c.com" target="_blank">ëƬƵ</a>| <a href="http://www4jbd.com" target="_blank">һaƵۿվ</a>| <a href="http://52099jy.com" target="_blank">AVպƷþþþþþ </a>| <a href="http://jiujiujingpin.com" target="_blank">Ļ߾ƷӰ</a>| <a href="http://zjszbwzl.com" target="_blank">þ99Ʒһ</a>| <a href="http://222xx8.com" target="_blank">ۺɫ</a>| <a href="http://www-33758.com" target="_blank">Ʒר</a>| <a href="http://www998xe.com" target="_blank">ŮˬˬˬƵ</a>| <a href="http://zmnhssn.com" target="_blank">þþ뾫Ʒպ˳ </a>| <a href="http://4388x4.com" target="_blank">Ļavѷdvd</a>| <a href="http://zjpcyh.com" target="_blank">һ޾ƷҺ</a>| <a href="http://bdgxhome.com" target="_blank">91鶹Բ߹ۿ</a>| <a href="http://tlyyt.com" target="_blank">18ڵվ</a>| <a href="http://468862.com" target="_blank">޾Ʒ˳߲va </a>| <a href="http://ygpx6.com" target="_blank">ձѲ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>