﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-猪-随笔分类-学习java</title><link>http://www.blogjava.net/liuspring/category/34385.html</link><description>java .net</description><language>zh-cn</language><lastBuildDate>Fri, 01 Jan 2010 00:59:47 GMT</lastBuildDate><pubDate>Fri, 01 Jan 2010 00:59:47 GMT</pubDate><ttl>60</ttl><item><title>java.lang.InstantiationException</title><link>http://www.blogjava.net/liuspring/archive/2009/12/29/307621.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Tue, 29 Dec 2009 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/12/29/307621.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/307621.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/12/29/307621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/307621.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/307621.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial; font-size: 14px; line-height: 20px; ">
<p style="line-height: normal; ">java.lang.InstantiationException</p>
<p style="line-height: normal; ">在Struts creating form bean的时候遇到这个异常</p>
<p style="line-height: normal; ">在form bean 中加一个无参的构造函数就Ok了</p>
</span>
<img src ="http://www.blogjava.net/liuspring/aggbug/307621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-12-29 12:19 <a href="http://www.blogjava.net/liuspring/archive/2009/12/29/307621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.IllegalStateException STREAMED</title><link>http://www.blogjava.net/liuspring/archive/2009/10/19/298836.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Mon, 19 Oct 2009 05:48:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/10/19/298836.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/298836.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/10/19/298836.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/298836.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/298836.html</trackback:ping><description><![CDATA[<p>request.<strong>getInputStream</strong>() 和 request.<strong>getReader</strong>()不能同时调用，否则会引发java.lang.IllegalStateException异常。</p>
<p>API中有写：</p>
<h3>getInputStream</h3>
<pre>public <a href="mk:@MSITStore:D:%20spring%20J2EEAPI%20J2EE%20API%20帮助文档.chm::/javax/servlet/ServletInputStream.html">ServletInputStream</a> <strong>getInputStream</strong>()
throws java.io.IOException</pre>
<dl>
<dd>Retrieves the body of the request as binary data using a <a href="mk:@MSITStore:D:%20spring%20J2EEAPI%20J2EE%20API%20帮助文档.chm::/javax/servlet/ServletInputStream.html"><code><font face="NSimsun">ServletInputStream</font></code></a>. Either this method or <a href="mk:@MSITStore:D:%20spring%20J2EEAPI%20J2EE%20API%20帮助文档.chm::/javax/servlet/ServletRequest.html#getReader()"><code><font face="NSimsun">getReader()</font></code></a> may be called to read the body, not both.
<dd>
<dl>
<dt><strong>Returns:</strong>
<dd>a <a href="mk:@MSITStore:D:%20spring%20J2EEAPI%20J2EE%20API%20帮助文档.chm::/javax/servlet/ServletInputStream.html"><code><font face="NSimsun">ServletInputStream</font></code></a> object containing the body of the request
<dt><strong>Throws:</strong>
<dd><code><font face="NSimsun">java.lang.IllegalStateException</font></code> - if the <a href="mk:@MSITStore:D:%20spring%20J2EEAPI%20J2EE%20API%20帮助文档.chm::/javax/servlet/ServletRequest.html#getReader()"><code><font face="NSimsun">getReader()</font></code></a> method has already been called for this request
<dd><code><font face="NSimsun">java.io.IOException</font></code> - if an input or output exception occurred</dd></dl></dd></dl>
<img src ="http://www.blogjava.net/liuspring/aggbug/298836.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-10-19 13:48 <a href="http://www.blogjava.net/liuspring/archive/2009/10/19/298836.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在eclipse中 高亮显示相同的变量</title><link>http://www.blogjava.net/liuspring/archive/2009/10/17/298706.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Sat, 17 Oct 2009 12:41:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/10/17/298706.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/298706.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/10/17/298706.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/298706.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/298706.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; line-height: 18px; ">
<table style="table-layout: fixed; width: 958px; ">
    <tbody>
        <tr>
            <td style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 12px; line-height: 18px; ">
            <div id="blog_text" class="cnt" style="font-family: Arial; word-wrap: break-word; word-break: normal; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 20px; color: #000000; overflow-x: hidden; overflow-y: hidden; position: static; ">
            <p style="line-height: normal; ">eclipse中如果选中一个变量，则在本源文件中高亮显示相同的变量</p>
            <p style="line-height: normal; ">Window-&gt;Preferences,在type filter text 中输入Mark Occurrences</p>
            <p style="line-height: normal; ">在Java-Editor-Mark Occurrences中将Mark occurrences of the selected element in the current file.选中OK即可</p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span>
<img src ="http://www.blogjava.net/liuspring/aggbug/298706.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-10-17 20:41 <a href="http://www.blogjava.net/liuspring/archive/2009/10/17/298706.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>昨天试着弄了个SSH的demo</title><link>http://www.blogjava.net/liuspring/archive/2009/10/17/298704.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Sat, 17 Oct 2009 12:39:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/10/17/298704.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/298704.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/10/17/298704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/298704.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/298704.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial; font-size: 14px; line-height: 20px; ">
<p style="line-height: normal; ">工作快三年了,一直没有用到spring,做的几个项目全部基于struts+hibernate,昨天忙完手头的活儿，自己建了个struts+spring+hibernate的demo，能用MyEclipse自动生成的全部自动生成，表映射、pojo、SessionFactory、applicationContext.xml、struts-config.xml都自动生成了，弄了两个jsp，一个add，一个view</p>
<p style="line-height: normal; ">运行发现，spring未被加载，原因找来找去找不到，最后还是看了以前写的一篇blog，可能存在重复jar包，有冲突，确实发现Myeclipse自动键入的jar包好多好多，而且有的有重复，捣鼓出以前做的例子，复制lib里面的jar包，果然OK了，实现了增查。</p>
<p style="line-height: normal; ">spring确实是个好东西，强大、强大。</p>
<p style="line-height: normal; ">Google SSH整合的例子，发现都是Struts2SpringHibernate了，俺还struts1呢，out了</p>
</span>
<img src ="http://www.blogjava.net/liuspring/aggbug/298704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-10-17 20:39 <a href="http://www.blogjava.net/liuspring/archive/2009/10/17/298704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>google app engine for java:org.datanucleus.exceptions.NucleusUserException</title><link>http://www.blogjava.net/liuspring/archive/2009/10/14/298268.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Wed, 14 Oct 2009 10:01:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/10/14/298268.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/298268.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/10/14/298268.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/298268.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/298268.html</trackback:ping><description><![CDATA[<font color="#ff6600">开发中遇到这个异常：<br />
NestedThrowablesStackTrace:<br />
Attempt was made to manually set the id component of a Key primary key.
If you want to control the value of the primary key, set the name
component instead.<br />
org.datanucleus.exceptions.NucleusUserException: Attempt was made to
manually set the id component of a Key primary key. If you want to
control the value of the primary key, set the name component instead.</font><br />
<br />
原来的修改代码是这样些的：<br />
public void attachDirty(UrlTarget instance) {<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  PersistenceManager pm = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  pm = PMF.get().getPersistenceManager();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  UrlTarget ut = (UrlTarget) pm.getObjectById(UrlTarget.class, instance.getId());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  ut.setName(instance.getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  ut.setRemark(instance.getRemark());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  ut.setUrl(instance.getUrl());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pm.makePersistent(ut);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch(Exception ex){<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }finally {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(pm != null)pm.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  <br />
&nbsp;&nbsp;&nbsp;  }<br />
<br />
public UrlTarget findById(Long id) {<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  PersistenceManager pm = PMF.get().getPersistenceManager();<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  try{<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  return (UrlTarget) pm.getObjectById(UrlTarget.class, id);<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }catch(Exception ex){<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }finally {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pm.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  return null;<br />
&nbsp;&nbsp;&nbsp;  }<br />
在利用findById方法得到对象后修改，但是findById中pm已经关闭，这就是错误的原因了
<img src ="http://www.blogjava.net/liuspring/aggbug/298268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-10-14 18:01 <a href="http://www.blogjava.net/liuspring/archive/2009/10/14/298268.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用DateFormat的parse方法验证字符串是否是日期的问题</title><link>http://www.blogjava.net/liuspring/archive/2009/07/13/286598.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Mon, 13 Jul 2009 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/07/13/286598.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/286598.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/07/13/286598.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/286598.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/286598.html</trackback:ping><description><![CDATA[因为最近比较闲 有点不思进取 也没什么问题要写了<br />
今天不错，发现一个，恩，感觉不错<br />
做了一个上传Excel并解析数据然后入库的功能，里面涉及到是否是日期格式的判断<br />
之前是这么写的(深谙这么写是不好的，但以为它是可靠的)<br />
<br />
private boolean checkDate(String content) {<br />
&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   sdf.parse(content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   } catch (Exception e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   }<br />
&nbsp;&nbsp;&nbsp;     }<br />
<br />
现在发现问题了，对于&#8220;2008-06-23asdf&#8221;这种情况是返回true的，哈哈，看来是孤陋寡闻了，基础不扎实了，看API上这样讲：<br />
<strong><br />
在默认情况下，进行的分析是不严格的：如果输入的形式不是此对象的格式化方法使用的形式，但仍可作为日期进行分析，则分析将获得成功。客户机可能通过调用  setLenient(false) 来强调严格遵守该格式。</strong><br />
<br />
按照API说法，将代码改成<br />
private boolean checkDate(String content) {<br />
&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   sdf.<strong> setLenient(false);</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   sdf.parse(content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   } catch (Exception e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   }<br />
&nbsp;&nbsp;&nbsp;     }<br />
<br />
运行结果&#8220;2008-06-23asdf&#8221;这种情况还是返回true的，但&#8220;2008-13-23&#8221;这种情况是返回false的<br />
最后改进程这种写法，可以适应"yyyy-MM-dd""yyyy-M-d""yyyy-MM-d""yyyy-M-dd"<br />
<br />
private boolean checkDate(String content) {<br />
&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;   sdf.setLenient(false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;   content = content.replaceAll("-0", "-");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   Date d = sdf.parse(content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   String s = sdf.format(d);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   return content.equals(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   } catch (Exception e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   }<br />
&nbsp;&nbsp;&nbsp;     }<br />
<br />
参考资料http://www.99inf.net/SoftwareDev/Java/52734.htm<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  http://blog.163.com/everlee@126/blog/static/263574220089822631229/<br />
<br />
当然也可以用正则表达式做到。
<img src ="http://www.blogjava.net/liuspring/aggbug/286598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-07-13 17:11 <a href="http://www.blogjava.net/liuspring/archive/2009/07/13/286598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>部署我的Google App Engine</title><link>http://www.blogjava.net/liuspring/archive/2009/04/19/266351.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Sat, 18 Apr 2009 16:32:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/04/19/266351.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/266351.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/04/19/266351.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/266351.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/266351.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;   截止到今天下午，中午把自己的应用部署到了Google app engine，用了一周的时间啊，真是费劲周折<br />
&nbsp;&nbsp;&nbsp;   好长时间了，听说Google出了个<a href="http://code.google.com/appengine/" target="_blank" class="l"><em>Google App Engine</em> - <em>Google</em> Code</a>，说是可以让用户上传自己的应用，但是只支持python，当时就想什么<br />
<br />
时候支持java啦啊，上个月看新闻就听说Google app engine 要开始支持java啦，哈哈，喜，到时候把我的写的blog传上去，哈哈<br />
&nbsp;&nbsp;&nbsp;   上周，终于知道了Google app engine终于开始宣布支持java了，哈哈呼呼，动手，到官网一看，没有支持java的动静啊，<br />
<br />
对，英文页面，哈哈，看来中文的还是慢一拍啊<br />
&nbsp;&nbsp;&nbsp;   首先到注册一个，竟然还要手机号发注册码，Google了一下 说在手机号前加 86就OK了，填上手机号点按钮，呦，短信马<br />
<br />
上就来啦，搞定，注册成功。<br />
&nbsp;&nbsp;&nbsp;   这下下载SDK，还有eclipse插件，帮助文档只有英文的，配合Google工具栏的翻译功能，基本能看懂，哈哈，感觉一路下<br />
<br />
来，英语水平有所上升啊，哈哈<br />
&nbsp;&nbsp;&nbsp;   打开eclipse，装上插件，很轻松的建了第一个应用，插件自动生成了一个小实例，部署上去，惊叹于Google的GWT<br />
&nbsp;&nbsp;&nbsp;   开始一直我原来写的blog程序，原来到处找免费的空间，jsp的空间不好找，先是找了<a target="_blank" href="http://www.eatj.com/">http://www.eatj.com/</a>，但是没24小<br />
<br />
时(好像是)就会自动停止，必须手动重启服务，原来还坚持去上去看看，后来终于因为有一次很忙时间太长被注销了，接下来就听<br />
<br />
说了<a target="_blank" href="http://www.stax.net/">http://www.stax.net/</a>，跟Google的路子差不多，好像还更自定义些，继续使用着，搞java朋友可以去看看<br />
&nbsp;&nbsp;&nbsp;   因为google app engine使用Google Account，原来的用户管理模块需要剔除，原来数据库使用的是mysql hibernate，现在<br />
<br />
Google 使用JDO，数据库被封装了，还好，当初设计是采用了工厂模式，实现了数据库访问模块与业务处理模块的松耦合，很容易<br />
<br />
配置数据库访问模块的更改，感受到好的设计真是为以后修改省很多事啊。<br />
&nbsp;&nbsp;&nbsp;   接着说部署我的Google app engine，终于改好相关代码，准备上传了，噩梦开始了<br />
&nbsp;&nbsp;&nbsp;   1、Unable to upload:<br />
java.lang.IllegalStateException: cannot find javac executable based on java.home, tried &#8220;D:\Java\jdk1.6.0_13<br />
<br />
\jre\bin\javac.exe&#8221; and &#8220;D:\Java\bin\javac.exe&#8221;<br />
参考http://zhuyx808.javaeye.com/blog/370124<br />
http://onlypython.group.javaeye.com/group/blog/366471<br />
http://618119.com/archives/2009/04/12/148.html<br />
&nbsp;&nbsp;&nbsp;   2、决定转战Linux..<br />
&nbsp;&nbsp;&nbsp; 手上有四个版本的Linux，Ubuntu，Redhat，Fedora，openSUSE，都装过，后来感觉还是Fedora比较好用，我装的是<br />
<br />
Fedora9，Fedora10正在下载中 <br />
<br />
以下Linux安装配置，仅限于在Fedora9上安装通过，资料都是通过Google搜索得来，感谢各位网友，网络的力量真是强大。<br />
<br />
1、在VMware中装上Fedora9后，首先安装VMware-tools，方便与主机交互<br />
<br />
首先需要下载相应的kernel-devel.rpm包进行安装<br />
首先查看内核版本:uname -r一下,我的是2.6.25-14.fc9.i686,<br />
<br />
所以下载kernel-devel-2.6.25-14.fc9.i686.rpm,然后运行rpm -ivh  kernel-devel-2.6.25-14.fc9.i686.rpm 进行安装. 内核安<br />
<br />
装完毕后，需要用这个命令确定内核 C header 的安装目录:ls -d /usr/src/kernels/$(uname -r)*/include<br />
<br />
安装内核具体步骤如下:<br />
<br />
[root@localhost ~]# uname -r<br />
2.6.25-14.fc9.i686<br />
[root@localhost ~]# rpm -q kernel-devel<br />
package kernel-devel is not installed<br />
[root@localhost ~]# cd /home<br />
[root@localhost home]# wget ftp://rpmfind.net/linux/fedora/releases/9/Everything/i386/os/Packages/kernel-devel-<br />
<br />
2.6.25-14.fc9.i686.rpm<br />
[root@localhost home]# rpm -i kernel-devel-2.6.25-14.fc9.i686.rpm<br />
[root@localhost home]# rpm -q kernel-devel<br />
kernel-devel-2.6.25-14.fc9.i686<br />
<br />
再安装gcc，否则安装VMware-tools时会提示：Setup is unable to find the "gcc" program on your machine.  Please make <br />
<br />
sure it<br />
is installed.  Do you want to specify the location of this program by hand? <br />
[yes] <br />
<br />
What is the location of the "gcc" program on your machine? <br />
<br />
在命令行执行：yum install gcc<br />
<br />
<br />
然后安装VMware Tools就行了，打开菜单&#8220;VM -&gt; Install VMware Tools&#8221;,然后有光盘自动弹出,把里面的源代码拷贝出来.我的文<br />
<br />
件是VMwareTools-6.5.0-xxxxx.tar.gz,我把它拷贝到/opt里.<br />
<br />
安装 VMware TOOLS<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   cd /opt<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   tar -zxvf VMwareTools-6.5.0-xxxxx.tar.gz<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   cd vmware-tools-distrib/<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   ./vmware-install.pl<br />
<br />
再一路安回车OK<br />
<br />
<br />
2、由于在装载xorg-x11-drv-vmmouse驱动时的一个bug，在客户虚拟机的显示中，鼠标位置可能不正确。直到被更新前，在客户机<br />
<br />
中添加Option NoAutoAddDevices到/etc/X11/xorg.conf文件的ServerFlags节中。如果需要，创建这个节：<br />
<br />
Section "ServerFlags"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   Option&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   "NoAutoAddDevices"<br />
EndSection<br />
<br />
<br />
3、第一,安装JDK<br />
第一,到http://java.sun.com下载最新JDK,当前本人下载的是jdk1.6.0_02!下载文件:jdk-6u2-linux-i586-rpm.bin.注意是<br />
<br />
rpm.bin的!<br />
<br />
第二,给下载回来的文件增加执行权限:chmod 755 jdk-6u2-linux-i586-rpm.bin.<br />
<br />
第三,执行文件:./jdk-6u2-linux-i586-rpm.bin.<br />
<br />
第四,执行文件产生一个rpm文件,可直接双击执行也可以在shell下执行:rpm -ivh jdk-6u2-linux-i586-rpm.<br />
<br />
第五:配置环境变量,环境变量配置可在全局文件/etc/profile下修改,这样所有linux系统的用户都可以用JDK,如果只是特定的<br />
<br />
用户用可修改/root/.bashrc文件,本人的修改为:<br />
<br />
#java set<br />
set JAVA_HOME=/usr/java/jdk1.6.0_02<br />
export JAVA_HOME<br />
export JRE_HOME=/usr/java/jre1.6.0_02<br />
set JAVA_BIN=/usr/java/jre1.6.0_02<br />
export JAVA_BIN<br />
<br />
第五,当环境变量修改完后,重起系统,在shell下输入java,看是否输入相关JAVA帮助信息,如果有,说明已经安装成功!如果没有,<br />
<br />
检查一下变量环境设置是否有误!<br />
<br />
2,安装Eclipse，Eclipse不需要安装，只要解压缩就行了<br />
<br />
运行Google app Engine不需要Tomcat<br />
3,安装tomcat的方法跟安装eclipse的一样,也是下一个tar.gz的文件按安装eclipse方法和步骤就行了!进入tomcat/bin<br />
<br />
下./startup.sh,如果在shell出现jdk的相关信息说明已经安装成功启动了,在firefox下打http://localhost:8080/出现tomcat页就<br />
<br />
大成功了!<br />
<br />
在以上的安装过程之中,出现了小插曲,就是tomcat找不到JDK,后来我又到JAVA网站下了一个JRE回来安装,并建JRE_HOME,重起<br />
<br />
TOMCAT,成功了!<br />
<br />
<br />
4、运行Google App Engine的应用，提示<br />
<pre>** Unable to load Mozilla for hosted mode **<br />
java.lang.UnsatisfiedLinkError:<br />
/home/dhofmann/development/ide/gwt-linux-1.4.61/mozilla-1.7.12/libxpcom.so:<br />
libstdc++.so.5: cannot open shared object file: No such file or directory<br />
at java.lang.ClassLoader$NativeLibrary.load(Native Method)<br />
</pre>
解决办法：<br />
Search for stdc++5 in synaptic package manager (System-&gt;Administration-&gt;Synaptic) and then mark and install it. Or <br />
<br />
use this console command:<br />
yum install libstdc++.so.5<br />
<br />
停止进程命令：<br />
就是kill 比较不错，如果kill不了. 加上-9<br />
如#kill -9 1778<br />
注1778 为进程pid<br />
pid可以通过ps aux|grep 服务名查得<br />
<br />
<br />
启动Eclipse时，提示错误：<br />
<br />
eclipse.buildId=M20090211-1700<br />
java.version=1.6.0<br />
java.vendor=Sun Microsystems Inc.<br />
BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=zh_CN<br />
Command-line arguments:  -os linux -ws gtk -arch x86<br />
<br />
!ENTRY org.eclipse.ui.workbench 4 0 2009-04-18 02:12:18.085<br />
!MESSAGE Widget disposed too early!<br />
!STACK 0<br />
java.lang.RuntimeException: Widget disposed too early!<br />
&nbsp;&nbsp;&nbsp;   at org.eclipse.ui.internal.WorkbenchPartReference$1.widgetDisposed(WorkbenchPartReference.java:171)<br />
<br />
在网上搜索得知：&nbsp;&nbsp;&nbsp;   <br />
eclipse.ini文件加个参数<br />
-vmargs<br />
-Dorg.eclipse.swt.browser.XULRunnerPath=<br />
<br />
在Fedora9中安装拼音输入法<br />
保证Fedora 9联网的状态下<br />
在application-&gt;system tools-&gt;terminal 应用程序-&gt;系统工具-&gt;终端<br />
输入<br />
su 回车<br />
提示输入root密码<br />
yum install scim 回车<br />
系统会自动从一个镜uy像站点检索scim，并询问是否下载，选择y<br />
下载完成后输入<br />
yum install scim-pinyin 回车<br />
提示和操作如上<br />
然后输入<br />
scim 回车<br />
（笔者的电脑运行到starting SCIM后就没有反应了，不过没关系这时候可以按ctrl+c中断）<br />
选择Fedora 9<br />
System-&gt;Preference-&gt;Personal-&gt;Input Method<br />
系统-&gt;首选项-&gt;个人-&gt;输入法<br />
选择启用新特性，然后选择里面的SCIM，然后选择配置SCIM，<br />
在进入后的界面中选择Global Set 全局设置，在这里设置激活热键即可，然后重新启动电脑，就可以在Fedora 9下面使用中文输入<br />
<br />
法了 虽然有点麻烦 但毕竟fedora等众多linux桌面系统还很年轻，有很多不足之处。<br />
<br />
参考资料：<br />
http://www.5dlinux.com/article/6/2007/linux_9042.html<br />
http://zhidao.baidu.com/question/62290384.html<br />
http://www.linuxidc.com/Linux/2008-09/16011.htm<br />
<img src ="http://www.blogjava.net/liuspring/aggbug/266351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-04-19 00:32 <a href="http://www.blogjava.net/liuspring/archive/2009/04/19/266351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate异常</title><link>http://www.blogjava.net/liuspring/archive/2009/03/31/263103.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Tue, 31 Mar 2009 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/03/31/263103.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/263103.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/03/31/263103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/263103.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/263103.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial; font-size: 14px; line-height: 20px; "><strong style="line-height: normal; ">备案：<br style="line-height: normal; " />
java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode</strong><br style="line-height: normal; " />
<br style="line-height: normal; " />
hibernate查询时报上面的异常，仔细检查hql写的有不对的地方，我就是把逗号,写成点.</span>
<img src ="http://www.blogjava.net/liuspring/aggbug/263103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-03-31 13:27 <a href="http://www.blogjava.net/liuspring/archive/2009/03/31/263103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取这个月的最后一天</title><link>http://www.blogjava.net/liuspring/archive/2009/03/31/263101.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Tue, 31 Mar 2009 05:23:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/03/31/263101.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/263101.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/03/31/263101.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/263101.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/263101.html</trackback:ping><description><![CDATA[<font  face="Arial" size="4"><span  style="font-size: 14px; line-height: 18px;"><strong><span  style="font-weight: normal; line-height: 20px; ">给你一个日期2009-01-01 00：00：00 获取这个月的最后一天。<br style="line-height: normal; " />
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br style="line-height: normal; " />
Date date=null;<br style="line-height: normal; " />
try {<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp; date = sdf.parse("2009-12-01 00:00:00");<br style="line-height: normal; " />
} catch (ParseException e) {<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp; e.printStackTrace();<br style="line-height: normal; " />
}<br style="line-height: normal; " />
Calendar calendar = new GregorianCalendar();<br style="line-height: normal; " />
calendar.setTime(date);<br style="line-height: normal; " />
calendar.set(Calendar.DATE, calendar<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .getActualMaximum(Calendar.DATE));<br style="line-height: normal; " />
Date d = calendar.getTime();<br style="line-height: normal; " />
System.out.println(sdf.format(d));</span></strong></span></font>
<img src ="http://www.blogjava.net/liuspring/aggbug/263101.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-03-31 13:23 <a href="http://www.blogjava.net/liuspring/archive/2009/03/31/263101.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始学习struts2(六)</title><link>http://www.blogjava.net/liuspring/archive/2009/01/16/251588.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Fri, 16 Jan 2009 08:08:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/01/16/251588.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/251588.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/01/16/251588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/251588.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/251588.html</trackback:ping><description><![CDATA[前两天实践了关于拦截器的具体实现，说实话关于底层实现还没有看明白，看jdk的源码中的<br />
public static Class&lt;?&gt; getProxyClass(ClassLoader loader,Class&lt;?&gt;... interfaces)<br />
方法，好长啊<br />
迂回一下，今儿看struts2的具体拦截器Interceptor怎么配置<br />
配置可比自己写实现拦截器容易多了<br />
1、首先写一个拦截器类，拦截器类有两只写法(目前俺知道的)<br />
一种是显示com.opensymphony.xwork2.interceptor.Interceptor接口，com.opensymphony.xwork2.interceptor.Interceptor接口有三个方法destroy()、init()和String intercept(ActionInvocation actionInvocation)，跟过滤器差不多<br />
这里指出的是init初始化方法将在容器启动是调用这个方法。<br />
<div style="background-color: #f9f7ed;" id="codee_html">
<div style="font-family: &quot;Courier New&quot;,&quot;Lucida Console&quot;,&quot;monospace&quot;; background-color: #f9f7ed;" class="source"> package com.<span style="color: #ff0000;">test</span>.<span style="color: #ff0000;">interceptor</span>;<br />
<br />
<span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;"> * Created by IntelliJ IDEA.</span><br />
<span style="color: #008800; font-style: italic;"> * User: Administrator</span><br />
<span style="color: #008800; font-style: italic;"> * Date: 2009-1-15</span><br />
<span style="color: #008800; font-style: italic;"> * Time: 16:34:17</span><br />
<span style="color: #008800; font-style: italic;"> * To change this template use File | Settings | File Templates.</span><br />
<span style="color: #008800; font-style: italic;"> */</span><br />
import com.opensymphony.xwork2.interceptor.Interceptor;<br />
import com.opensymphony.xwork2.ActionInvocation;<br />
<br />
<span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">class</span> MyInterceptor <span style="color: #000080; font-weight: bold;">implements</span> Interceptor{<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">void</span> destroy() {<br />
<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">void</span> init() {<br />
<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> String intercept(ActionInvocation actionInvocation) <span style="color: #000080; font-weight: bold;">throws</span> Exception {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: #ff0000;">out</span>.<span style="color: #ff0000;">println</span>(<span style="color: #0000ff;">"test intercept begin"</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String result = actionInvocation.<span style="color: #ff0000;">invoke</span>();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: #ff0000;">out</span>.<span style="color: #ff0000;">println</span>(<span style="color: #0000ff;">"test intercept finish"</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">return</span> result;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
</div>
</div>
<br />
另一种就是继承com.opensymphony.xwork2.interceptor.AbstractInterceptor，这是个抽象类，并实现了com.opensymphony.xwork2.interceptor.Interceptor接口，分别实现了init和destroy方法，但什么都没做，继承AbstractInterceptor后，实现intercept方法就行了，<br />
这里指出的是在intercept方法中执行actionInvocation.invoke();执行所拦截的action中的方法；<br />
2、拦截器写完了剩下就是配置了，这里要用到struts.xml的组织结构&lt;struts&gt;中有&lt;package&gt;包的的概念，包与包之间可以继承extends,就像子类继承父类一样，子类将拥有父类的属性和配置，我们一般都继承extends="struts-default"，而struts-default定义在struts2-core.jar 中的struts-default.xml中，struts-default包中定义了很多struts2提供的拦截器和拦截器栈（拦截器栈可以包含多个拦截器或拦截器栈），struts2的好多功能都是实现在这些拦截器中，其中有个&lt;default-interceptor-ref name="defaultStack"/&gt;标签定义了默认的拦截器，如果&lt;action&gt;配置中没有拦截器配置，那就调用默认拦截器，如果有拦截器配置，要么同时加上默认拦截器，要么在自己的package中加入设置默认拦截器的标签。<br />
<div style="background-color: #f9f7ed;" id="codee_html">
<div style="font-family: &quot;Courier New&quot;,&quot;Lucida Console&quot;,&quot;monospace&quot;; background-color: #f9f7ed;" class="source"> <span style="color: #000080; font-weight: bold;">&lt;package</span> <span style="color: #ff0000;">name=</span><span style="color: #0000ff;">"capinfo"</span> <span style="color: #ff0000;">extends=</span><span style="color: #0000ff;">"struts-default"</span><span style="color: #000080; font-weight: bold;">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">&lt;interceptors&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">&lt;interceptor</span> <span style="color: #ff0000;">name=</span><span style="color: #0000ff;">"myInterceptor"</span> <span style="color: #ff0000;">class=</span><span style="color: #0000ff;">"com.test.interceptor.MyInterceptor"</span><span style="color: #000080; font-weight: bold;">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">&lt;/interceptor&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">&lt;/interceptors&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">&lt;action</span> <span style="color: #ff0000;">name=</span><span style="color: #0000ff;">"HelloWorld"</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #ff0000;">class=</span><span style="color: #0000ff;">"com.capinfo.struts2.action.HelloWordAction"</span><span style="color: #000080; font-weight: bold;">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">&lt;result&gt;</span>/HelloWorld.jsp<span style="color: #000080; font-weight: bold;">&lt;/result&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">&lt;interceptor-ref</span> <span style="color: #ff0000;">name=</span><span style="color: #0000ff;">"myInterceptor"</span><span style="color: #000080; font-weight: bold;">&gt;&lt;/interceptor-ref&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">&lt;interceptor-ref</span> <span style="color: #ff0000;">name=</span><span style="color: #0000ff;">"defaultStack"</span><span style="color: #000080; font-weight: bold;">&gt;&lt;/interceptor-ref&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">&lt;/action&gt;</span><br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">&lt;!-- Add your actions here --&gt;</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">&lt;/package&gt;</span><br />
</div>
</div>
<br />
<img src ="http://www.blogjava.net/liuspring/aggbug/251588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-01-16 16:08 <a href="http://www.blogjava.net/liuspring/archive/2009/01/16/251588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始学习struts2(五)</title><link>http://www.blogjava.net/liuspring/archive/2009/01/13/251091.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Tue, 13 Jan 2009 03:26:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/01/13/251091.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/251091.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/01/13/251091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/251091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/251091.html</trackback:ping><description><![CDATA[说是struts2的核心就是拦截器<br />
先看看拦截器的实现<br />
实现拦截器有这么几个东西构成<br />
1、目标对象-将被拦截的对象，这个对象中的方法被调用是将被拦截<br />
要求目标对象面向接口编程，首先要定义接口
<div style="background-color: #f9f7ed;" id="codee_html">
<div style="font-family: &quot;Courier New&quot;,&quot;Lucida Console&quot;,&quot;monospace&quot;; background-color: #f9f7ed;" class="source"> package com.<span style="color: #ff0000;">test</span>.<span style="color: #ff0000;">interceptor</span>;<br />
<br />
<span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;"> * Created by IntelliJ IDEA.</span><br />
<span style="color: #008800; font-style: italic;"> * User: Administrator</span><br />
<span style="color: #008800; font-style: italic;"> * Date: 2009-1-9</span><br />
<span style="color: #008800; font-style: italic;"> * Time: 17:37:23</span><br />
<span style="color: #008800; font-style: italic;"> * 面向接口编程</span><br />
<span style="color: #008800; font-style: italic;"> * 目标对象的接口</span><br />
<span style="color: #008800; font-style: italic;"> */</span><br />
<span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">interface</span> TargetInterface {<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">void</span> doSomething();<br />
}<br />
</div>
</div>
目标对象实现<br />
<div style="background-color: #f9f7ed;" id="codee_html">
<div style="font-family: &quot;Courier New&quot;,&quot;Lucida Console&quot;,&quot;monospace&quot;; background-color: #f9f7ed;" class="source">package com.<span style="color: #ff0000;">test</span>.<span style="color: #ff0000;">interceptor</span>;<br />
<br />
<span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;"> * Created by IntelliJ IDEA.</span><br />
<span style="color: #008800; font-style: italic;"> * User: Administrator</span><br />
<span style="color: #008800; font-style: italic;"> * Date: 2009-1-9</span><br />
<span style="color: #008800; font-style: italic;"> * Time: 17:36:26</span><br />
<span style="color: #008800; font-style: italic;"> * 目标对象</span><br />
<span style="color: #008800; font-style: italic;"> */</span><br />
<span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">class</span> Target <span style="color: #000080; font-weight: bold;">implements</span> TargetInterface{<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">void</span> doSomething(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: #ff0000;">out</span>.<span style="color: #ff0000;">println</span>(<span style="color: #0000ff;">"do something"</span>);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
</div>
</div>
<br />
2、拦截器对象-里面包含在调用目标对象前或后要调用的方法
<div style="background-color: #f9f7ed;" id="codee_html">
<div style="font-family: &quot;Courier New&quot;,&quot;Lucida Console&quot;,&quot;monospace&quot;; background-color: #f9f7ed;" class="source"> package com.<span style="color: #ff0000;">test</span>.<span style="color: #ff0000;">interceptor</span>;<br />
<br />
<span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;"> * Created by IntelliJ IDEA.</span><br />
<span style="color: #008800; font-style: italic;"> * User: Administrator</span><br />
<span style="color: #008800; font-style: italic;"> * Date: 2009-1-9</span><br />
<span style="color: #008800; font-style: italic;"> * Time: 17:39:32</span><br />
<span style="color: #008800; font-style: italic;"> * 拦截器</span><br />
<span style="color: #008800; font-style: italic;"> */</span><br />
<span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">class</span> Interceptor {<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">void</span> before(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: #ff0000;">out</span>.<span style="color: #ff0000;">println</span>(<span style="color: #0000ff;">"before"</span>);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">void</span> after(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: #ff0000;">out</span>.<span style="color: #ff0000;">println</span>(<span style="color: #0000ff;">"after"</span>);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
</div>
</div>
<br />
3、处理器-处理器决定拦截器如何拦截目标对象<br />
<div style="background-color: #f9f7ed;" id="codee_html">
<div style="font-family: &quot;Courier New&quot;,&quot;Lucida Console&quot;,&quot;monospace&quot;; background-color: #f9f7ed;" class="source"> package com.<span style="color: #ff0000;">test</span>.<span style="color: #ff0000;">interceptor</span>;<br />
<br />
<span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;"> * Created by IntelliJ IDEA.</span><br />
<span style="color: #008800; font-style: italic;"> * User: Administrator</span><br />
<span style="color: #008800; font-style: italic;"> * Date: 2009-1-9</span><br />
<span style="color: #008800; font-style: italic;"> * Time: 17:41:08</span><br />
<span style="color: #008800; font-style: italic;"> */</span><br />
import java.lang.reflect.InvocationHandler;<br />
import java.lang.reflect.Method;<br />
<br />
<span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;"> * 处理器</span><br />
<span style="color: #008800; font-style: italic;"> * 在这里将目标对象Target和拦截器Interceptor联系在了一起</span><br />
<span style="color: #008800; font-style: italic;"> */</span><br />
<span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">class</span> MyHandler <span style="color: #000080; font-weight: bold;">implements</span> InvocationHandler{<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * 目标对象</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * 将来目标对象的方法将被注入interceptor</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; */</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">private</span> Object object;<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * 拦截器</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * MyHandler负责将Interceptor这个拦截器注入到传入的目标对象object</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; */</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">private</span> Interceptor interceptor = <span style="color: #000080; font-weight: bold;">new</span> Interceptor();<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">void</span> setObject(Object object){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">this</span>.<span style="color: #ff0000;">object</span> = object;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * 实现InvocationHandler接口的方法</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * @param o 在其上调用方法的代理实例</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * @param method 对应于在代理实例上调用的接口方法的 Method 实例</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * @param objects 包含传入代理实例上方法调用的参数值的对象数组</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * @return&nbsp; 从代理实例的方法调用返回的值</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * @throws Throwable</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; */</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> Object invoke(Object o, Method method, Object[] objects) <span style="color: #000080; font-weight: bold;">throws</span> Throwable {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object result = <span style="color: #000080; font-weight: bold;">null</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; interceptor.<span style="color: #ff0000;">before</span>();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = method.<span style="color: #ff0000;">invoke</span>(object,objects);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; interceptor.<span style="color: #ff0000;">after</span>();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">return</span> result;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
</div>
</div>
<br />
4、代理对象-用于得到目标对象的代理对象<br />
<div style="background-color: #f9f7ed;" id="codee_html">
<div style="font-family: &quot;Courier New&quot;,&quot;Lucida Console&quot;,&quot;monospace&quot;; background-color: #f9f7ed;" class="source"> package com.<span style="color: #ff0000;">test</span>.<span style="color: #ff0000;">interceptor</span>;<br />
<br />
<span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;"> * Created by IntelliJ IDEA.</span><br />
<span style="color: #008800; font-style: italic;"> * User: Administrator</span><br />
<span style="color: #008800; font-style: italic;"> * Date: 2009-1-9</span><br />
<span style="color: #008800; font-style: italic;"> * Time: 17:50:52</span><br />
<span style="color: #008800; font-style: italic;"> * 代理类</span><br />
<span style="color: #008800; font-style: italic;"> */</span><br />
import java.lang.reflect.Proxy;<br />
<span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">class</span> MyProxy {<br />
&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * 返回obj的，处理器为MyHandler的代理对象</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * @param obj 目标对象</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; * @return&nbsp; 目标对象的代理对象</span><br />
<span style="color: #008800; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp; */</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> Object getProxy(Object obj){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyHandler myHandler = <span style="color: #000080; font-weight: bold;">new</span> MyHandler();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myHandler.<span style="color: #ff0000;">setObject</span>(obj);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">return</span> Proxy.<span style="color: #ff0000;">newProxyInstance</span>(obj.<span style="color: #ff0000;">getClass</span>().<span style="color: #ff0000;">getClassLoader</span>(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj.<span style="color: #ff0000;">getClass</span>().<span style="color: #ff0000;">getInterfaces</span>(),myHandler); <br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
</div>
</div>
<br />
5、最后客户调用代码
<div style="background-color: #f9f7ed;" id="codee_html">
<div style="font-family: &quot;Courier New&quot;,&quot;Lucida Console&quot;,&quot;monospace&quot;; background-color: #f9f7ed;" class="source"> package com.<span style="color: #ff0000;">test</span>.<span style="color: #ff0000;">interceptor</span>;<br />
<br />
<span style="color: #008800; font-style: italic;">/**</span><br />
<span style="color: #008800; font-style: italic;"> * Created by IntelliJ IDEA.</span><br />
<span style="color: #008800; font-style: italic;"> * User: Administrator</span><br />
<span style="color: #008800; font-style: italic;"> * Date: 2009-1-9</span><br />
<span style="color: #008800; font-style: italic;"> * Time: 17:55:45</span><br />
<span style="color: #008800; font-style: italic;"> * 客户调用</span><br />
<span style="color: #008800; font-style: italic;"> */</span><br />
<span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">class</span> Client {<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">static</span> <span style="color: #000080; font-weight: bold;">void</span> main(String[] args){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">//目标对象</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TargetInterface target = <span style="color: #000080; font-weight: bold;">new</span> Target();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">//代理对象</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyProxy myProxy = <span style="color: #000080; font-weight: bold;">new</span> MyProxy();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">//通过代理对象得到目标对象的代理</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TargetInterface proxy = (TargetInterface)myProxy.<span style="color: #ff0000;">getProxy</span>(target);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">//通过目标对象的代理调用目标对象的方法</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy.<span style="color: #ff0000;">doSomething</span>();<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<span style="color: #008800; font-style: italic;">//输出：</span><br />
<span style="color: #008800; font-style: italic;">//before&nbsp; </span><br />
<span style="color: #008800; font-style: italic;">//do something</span><br />
<span style="color: #008800; font-style: italic;">//after</span><br />
</div>
</div>
<br />
将自己的理解写了注释，现在只理解到这个程度，像<br />
Proxy.<span style="color: #ff0000;">newProxyInstance</span><br />
里面是怎么实现的，还没深入考究<br />
继续努力<br />
<br />
<img src ="http://www.blogjava.net/liuspring/aggbug/251091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-01-13 11:26 <a href="http://www.blogjava.net/liuspring/archive/2009/01/13/251091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始学习struts2(四)</title><link>http://www.blogjava.net/liuspring/archive/2009/01/08/250480.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Thu, 08 Jan 2009 05:30:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/01/08/250480.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/250480.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/01/08/250480.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/250480.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/250480.html</trackback:ping><description><![CDATA[关于类型转换还有一种写法：
<div style="background-color: #f9f7ed;" id="codee_html">
<div style="font-family: &quot;Courier New&quot;,&quot;Lucida Console&quot;,&quot;monospace&quot;; background-color: #f9f7ed;" class="source"><span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">class</span> ConverterPoint <span style="color: #000080; font-weight: bold;">extends</span> StrutsTypeConverter {<br />
<br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp; @Override</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp; public Object convertValue(Map context, Object value, Class toType) {</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Point.class == toType){</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] params = (String[])value;</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params = params[0].split(",");</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Point point = new Point();</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; point.setX(Integer.parseInt(params[0]));</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; point.setY(Integer.parseInt(params[1]));</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return point;</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(String.class == toType){</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Point point = (Point)value;</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "x=" + point.getX() + ",y=" + point.getY();</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return super.convertValue(context, value, toType);</span><br />
<span style="color: #008800; font-style: italic;">//&nbsp;&nbsp;&nbsp; }</span><br />
<br />
&nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> Object convertFromString(Map arg0, String[] arg1, Class arg2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] params = arg1;<span style="color: #008800; font-style: italic;">//(String[])value;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params = params[<span style="color: #0000ff;">0</span>].<span style="color: #ff0000;">split</span>(<span style="color: #0000ff;">","</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Point point = <span style="color: #000080; font-weight: bold;">new</span> Point();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; point.<span style="color: #ff0000;">setX</span>(Integer.<span style="color: #ff0000;">parseInt</span>(params[<span style="color: #0000ff;">0</span>]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; point.<span style="color: #ff0000;">setY</span>(Integer.<span style="color: #ff0000;">parseInt</span>(params[<span style="color: #0000ff;">1</span>]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">return</span> point;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> String convertToString(Map arg0, Object arg1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Point point = (Point)arg1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">return</span> <span style="color: #0000ff;">"x="</span> + point.<span style="color: #ff0000;">getX</span>() + <span style="color: #0000ff;">",y="</span> + point.<span style="color: #ff0000;">getY</span>();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; <br />
}<br />
</div>
</div>
<br />
原来是继承ognl.DefaultTypeConverter类，现在改成继承org.apache.struts2.util.StrutsTypeConverter类了，看org.apache.struts2.util.StrutsTypeConverter的源码可知道org.apache.struts2.util.StrutsTypeConverter是个抽象类，并实现了ognl.TypeConverter，org.apache.struts2.util.StrutsTypeConverter中有两个要实现的方法一个convertFromString，一个convertToString，看方法名字就知道一个从字符串转换成Object，一个是将Object转换成String，这样好像更加清晰<br />
<br />
另外还有一种全局转换的配置，就是建立一个统一的属性文件，文件名为xwork-conversion.properties，与struts.xml位于统一目录下，里面的配置改成了<br />
com.test.struts2.data.Point=com.test.struts2.action.ConverterPoint<br />
意思是所有com.test.struts2.data.Point类型的对象都要通过com.test.struts2.action.ConverterPoint来转换<br />
<br />
<img src ="http://www.blogjava.net/liuspring/aggbug/250480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-01-08 13:30 <a href="http://www.blogjava.net/liuspring/archive/2009/01/08/250480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始学习struts2(三)</title><link>http://www.blogjava.net/liuspring/archive/2009/01/05/249898.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Mon, 05 Jan 2009 05:12:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/01/05/249898.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/249898.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/01/05/249898.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/249898.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/249898.html</trackback:ping><description><![CDATA[
<p>struts2局部类型转换</p>
<p>需求为：在页面的文本框输入一个x、y坐标，之间用","隔开，Action中有一个Point类型的属性，Point类里面有两个字段，分别是x，y，int型，要求当页面提交时将文本框中的字符串转换成Point对象，当Action返回到页面时将Point转换成字符串显示</p>
<p>1、首先做一个jsp用于输入和提交：point.jsp</p>
<div style="BACKGROUND-COLOR: rgb(249,247,237)" id="codee_html">
<div style="FONT-FAMILY: 'Courier New','Lucida Console','monospace'; BACKGROUND-COLOR: rgb(249,247,237)" class="source"><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;s:form</span> <span style="COLOR: rgb(255,0,0)">action=</span><span style="COLOR: rgb(0,0,255)">"Converter"</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;s:textfield</span> <span style="COLOR: rgb(255,0,0)">name=</span><span style="COLOR: rgb(0,0,255)">"point"</span> <span style="COLOR: rgb(255,0,0)">label=</span><span style="COLOR: rgb(0,0,255)">"Point"</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&gt;&lt;/s:textfield&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;s:textfield</span> <span style="COLOR: rgb(255,0,0)">name=</span><span style="COLOR: rgb(0,0,255)">"point.x"</span> <span style="COLOR: rgb(255,0,0)">label=</span><span style="COLOR: rgb(0,0,255)">"Point.X"</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&gt;&lt;/s:textfield&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;s:textfield</span> <span style="COLOR: rgb(255,0,0)">name=</span><span style="COLOR: rgb(0,0,255)">"point.y"</span> <span style="COLOR: rgb(255,0,0)">label=</span><span style="COLOR: rgb(0,0,255)">"Point.Y"</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&gt;&lt;/s:textfield&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;s:submit</span> <span style="COLOR: rgb(255,0,0)">label=</span><span style="COLOR: rgb(0,0,255)">"submit"</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&gt;&lt;/s:submit&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;/s:form&gt;</span>
<br/></div>
</div>
<p>2、再建一个用于显示的jsp-converter.jsp</p>
<div style="BACKGROUND-COLOR: rgb(249,247,237)" id="codee_html">
<div style="FONT-FAMILY: 'Courier New','Lucida Console','monospace'; BACKGROUND-COLOR: rgb(249,247,237)" class="source"><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;body&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;s:property</span> <span style="COLOR: rgb(255,0,0)">value=</span><span style="COLOR: rgb(0,0,255)">"point"</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">/&gt;&lt;br&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;s:property</span> <span style="COLOR: rgb(255,0,0)">value=</span><span style="COLOR: rgb(0,0,255)">"point.x"</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">/&gt;&lt;br&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;s:property</span> <span style="COLOR: rgb(255,0,0)">value=</span><span style="COLOR: rgb(0,0,255)">"point.y"</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">/&gt;&lt;br&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;/body&gt;</span>
<br/></div>
</div>
<p>3、Action类 ConverterAction</p>
<div style="BACKGROUND-COLOR: rgb(249,247,237)" id="codee_html">
<div style="FONT-FAMILY: 'Courier New','Lucida Console','monospace'; BACKGROUND-COLOR: rgb(249,247,237)" class="source"><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">public</span> <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">class</span> ConverterAction <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">extends</span> ActionSupport{
<br/>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">private</span> Point point;
<br/>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">public</span> Point getPoint() {
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">return</span> point;
<br/>
}
<br/>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">public</span> <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">void</span> setPoint(Point point) {
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">this</span>.<span style="COLOR: rgb(255,0,0)">point</span> = point;
<br/>
}
<br/>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">public</span> String execute()<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">throws</span> Exception {
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">return</span> <span style="COLOR: rgb(0,0,255)">"success"</span>;
<br/>
}
<br/>
}
<br/></div>
</div>
<p>4、struts.xml</p>
<div style="BACKGROUND-COLOR: rgb(249,247,237)" id="codee_html">
<div style="FONT-FAMILY: 'Courier New','Lucida Console','monospace'; BACKGROUND-COLOR: rgb(249,247,237)" class="source"><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;action</span> <span style="COLOR: rgb(255,0,0)">name=</span><span style="COLOR: rgb(0,0,255)">"Converter"</span>
<br/>
<span style="COLOR: rgb(255,0,0)">class=</span><span style="COLOR: rgb(0,0,255)">"com.test.struts2.action.ConverterAction"</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;result</span> <span style="COLOR: rgb(255,0,0)">name=</span><span style="COLOR: rgb(0,0,255)">"success"</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&gt;</span>/converter.jsp<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;/result&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;result</span> <span style="COLOR: rgb(255,0,0)">name=</span><span style="COLOR: rgb(0,0,255)">"input"</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&gt;</span>/point.jsp<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;/result&gt;</span>
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">&lt;/action&gt;</span>
<br/></div>
</div>
<p>5、转换类 ConverterPoint</p>
<div style="BACKGROUND-COLOR: rgb(249,247,237)" id="codee_html">
<div style="FONT-FAMILY: 'Courier New','Lucida Console','monospace'; BACKGROUND-COLOR: rgb(249,247,237)" class="source"><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">public</span> <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">class</span> ConverterPoint <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">extends</span> DefaultTypeConverter {
<br/>
<br/>
@Override
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">public</span> Object convertValue(Map context, Object value, Class toType) {
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">if</span>(Point.<span style="COLOR: rgb(255,0,0)">class</span> == toType){
<br/>
String[] params = (String[])value;
<br/>
params = params[<span style="COLOR: rgb(0,0,255)">0</span>].<span style="COLOR: rgb(255,0,0)">split</span>(<span style="COLOR: rgb(0,0,255)">","</span>);
<br/>
Point point = <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">new</span> Point();
<br/>
point.<span style="COLOR: rgb(255,0,0)">setX</span>(Integer.<span style="COLOR: rgb(255,0,0)">parseInt</span>(params[<span style="COLOR: rgb(0,0,255)">0</span>]));
<br/>
point.<span style="COLOR: rgb(255,0,0)">setY</span>(Integer.<span style="COLOR: rgb(255,0,0)">parseInt</span>(params[<span style="COLOR: rgb(0,0,255)">1</span>]));
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">return</span> point;
<br/>
<br/>
}<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">else</span> <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">if</span>(String.<span style="COLOR: rgb(255,0,0)">class</span> == toType){
<br/>
Point point = (Point)value;
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">return</span> <span style="COLOR: rgb(0,0,255)">"x="</span> + point.<span style="COLOR: rgb(255,0,0)">getX</span>() + <span style="COLOR: rgb(0,0,255)">",y="</span> + point.<span style="COLOR: rgb(255,0,0)">getY</span>();
<br/>
}
<br/>
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">return</span> <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,128)">super</span>.<span style="COLOR: rgb(255,0,0)">convertValue</span>(context, value, toType);
<br/>
}
<br/>
<br/>
<br/>
}
<br/></div>
</div>
<p>6、配置转换
<br/>
在ConverterAction 类的同一目录下定义属性文件ConverterAction-conversion.properties，注意文件名，-conversion.properties为固定不变，ConverterAction为Action的名字，文件内容：</p>
<p>point=com.test.struts2.action.ConverterPoint</p>
<p>Ok了，这样就完工了</p>
<img src ="http://www.blogjava.net/liuspring/aggbug/249898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-01-05 13:12 <a href="http://www.blogjava.net/liuspring/archive/2009/01/05/249898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始学习struts2(二)</title><link>http://www.blogjava.net/liuspring/archive/2009/01/05/249859.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Mon, 05 Jan 2009 02:47:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2009/01/05/249859.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/249859.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2009/01/05/249859.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/249859.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/249859.html</trackback:ping><description><![CDATA[<p>前两天初步认识了一下struts2
<br />
今儿看来教程的第二三讲，搞清了一些前面的一些猜测或是疑问
<br />
1、struts2是不用&lt;html:...&gt;标签了，统一成了&lt;s:...&gt;
<br />
如下这样：
<br />
&lt;s:form action="Converter"&gt;
<br />
&lt;s:textfield name="point" label="Point"&gt;&lt;/s:textfield&gt;
<br />
&lt;s:submit label="submit"&gt;&lt;/s:submit&gt;
<br />
&lt;/s:form&gt;
<br />
显示效果：</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/liuspring/point.JPG" height="136" width="361" /></p>
<p>注意到&lt;s:textfield name="point" label="Point"&gt;&lt;/s:textfield&gt;
<br />
中的label属性，它指定了文本框前面显示的内容，还自动加了冒号，哈哈，挺聪明的嘛，但是担心这样在复杂的页面设计中是不是好使。</p>
<p>哦对了，要想这么写，要在页面上方加上这个：&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;</p>
<p>2、Action
<br />
前面说的Action不再需要继承任何struts类，现在看来要失望了，为了方便起见还是建议集成ActionSupport类，目前觉得有用的是ActionSupport中定义了几个static的result name，比如SUCCESS、ERROR，原来的return "success";现在可以写成return super.SUCCESS;，将标识用的字符串常量定义成static的是一直提倡的，还有就是validate()方法，验证有错误可以调用addFieldError()方法，好像就是struts1 ActionForm里的东西，有所改进的是super.addFieldError("username", "username is null");将在页面中显示的效果为：错误信息"username is null"将在名字为"username"文本框的上面显示，这些如果能用ajax实现就好了。
<br />
对于Action解耦，可能在于它不再需要HttpServletRequest 、HttpServletResponse这样的容器运行时参数吧</p>
<p xmlns="" class="poweredbyzoundry">Powered by <a href="http://www.zoundryraven.com" class="poweredbyzoundry_link" rel="nofollow">Zoundry Raven</a></p>
<img src ="http://www.blogjava.net/liuspring/aggbug/249859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2009-01-05 10:47 <a href="http://www.blogjava.net/liuspring/archive/2009/01/05/249859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始学习struts2</title><link>http://www.blogjava.net/liuspring/archive/2008/12/29/249013.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Mon, 29 Dec 2008 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/12/29/249013.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/249013.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/12/29/249013.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/249013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/249013.html</trackback:ping><description><![CDATA[今天第一次感觉到经济危机在我身边了，部门现在没有在做的项目了<br />
经济危机中，赶紧为自己充充电，好到时候柳暗花明又一村，哈哈<br />
学struts2<br />
据说struts2基于webwork，基本上跟struts1没啥关系，如果有webwork的经验上手会很迅速<br />
我没接触过webwork，就知道有这么个东西<br />
今儿开始第一个struts<br />
见过好多blog写有struts2的入门步骤，俺也写一个，为自己造个轮子，加深印象。<br />
首先下载struts2的jar包，到http://struts.apache.org/，右上角有个struts2的链接，今天下到的是<br />
struts2的2.0.14，昨天在javaeye上看到发布<a title="Struts2.1.3 发布!" href="/news/4703-struts2-1-3-released">Struts2.1.3
发布</a>了，只是主页还没看到，不止一次听大拿们说过不要追求新版本，哈哈<br />
下载后的目录：app--struts的例子<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; docs-doc文档<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lib-struts的jar包或依赖包<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src-源码<br />
HelloWorld：<br />
<br />
1、index.jsp<br />
&nbsp; 耳目一新的是，不需要用到struts html标签，这只是猜测，或许例子过于简单？今天工作中还感觉struts1的html标签真是不好用，想加个class、maxlength、size都不好使，让我很是郁闷。希望在继续学习中真的能耳目一新。<br />
struts的action惯例后缀名改成了.action，不再像struts1的.do了，说是延续到webwork的惯例。<br />
下面的页面代码submit的时候将提交到login.action <br />
<a href="http://www.fayaa.com/code/view//">index.jsp</a><br />
<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;body&gt;</span><br />
&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;form</span> <span style="color: rgb(255, 0, 0);">action=</span><span style="color: rgb(0, 0, 255);">"login.action"</span> <span style="color: rgb(255, 0, 0);">method=</span><span style="color: rgb(0, 0, 255);">"post"</span><span style="color: rgb(0, 0, 128); font-weight: bold;">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username:<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;input</span> <span style="color: rgb(255, 0, 0);">type=</span><span style="color: rgb(0, 0, 255);">"text"</span> <span style="color: rgb(255, 0, 0);">name=</span><span style="color: rgb(0, 0, 255);">"username"</span><span style="color: rgb(0, 0, 128); font-weight: bold;">/&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password:<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;input</span> <span style="color: rgb(255, 0, 0);">type=</span><span style="color: rgb(0, 0, 255);">"password"</span> <span style="color: rgb(255, 0, 0);">name=</span><span style="color: rgb(0, 0, 255);">"password"</span><span style="color: rgb(0, 0, 128); font-weight: bold;">/&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;input</span> <span style="color: rgb(255, 0, 0);">type=</span><span style="color: rgb(0, 0, 255);">"submit"</span> <span style="color: rgb(255, 0, 0);">value=</span><span style="color: rgb(0, 0, 255);">"submit"</span><span style="color: rgb(0, 0, 128); font-weight: bold;">/&gt;</span><br />
&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/form&gt;</span><br />
<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/body&gt;</span><br />
2、Action类<br />
struts2的Action可是大进步，不用再继承任何类，实现了松耦合，它好像将struts1的ActionForm融合了进来，据说struts2不再用ActionForm，页面上对应的字段写在了Action中，struts2框架会自动调用get/set方法，在我印象里struts1中的Action对象不是线程安全的，会在不同线程间重用，所以谨慎在里面定义字段，在这看来struts2的Action不是这样的，只是猜测<br />
package com.mystart.action;<br />
<br />
<span style="color: rgb(0, 0, 128); font-weight: bold;">public</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">class</span> LoginAction {<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">private</span> String <span style="color: rgb(255, 0, 0);">username</span>;<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">private</span> String <span style="color: rgb(255, 0, 0);">password</span>;<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">public</span> String getUsername() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">return</span> username;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">public</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">void</span> setUsername(String username) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">this</span>.<span style="color: rgb(255, 0, 0);">username</span> = username;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">public</span> String getPassword() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">return</span> password;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">public</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">void</span> setPassword(String password) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">this</span>.<span style="color: rgb(255, 0, 0);">password</span> = password;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">public</span> String execute() <span style="color: rgb(0, 0, 128); font-weight: bold;">throws</span> Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">return</span> <span style="color: rgb(0, 0, 255);">"success"</span>;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
3、jsp、java类都定义了，现在要它们联系起来-struts配置文件<br />
新的struts配置文件有个package包的概念，还没闹明白这个package的详细用法，有待继续深入<br />
&lt;action&gt;标签有变化，type变成了class，path变成了name，struts1中name属性是制定ActionForm的，现在ActionForm没有了<br />
forward变成了result，result的默认name=success<br />
<br />
<span style="color: rgb(0, 128, 128);">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span><br />
<span style="color: rgb(0, 128, 128);">&lt;!DOCTYPE struts PUBLIC</span><br />
<span style="color: rgb(0, 128, 128);">&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"</span><br />
<span style="color: rgb(0, 128, 128);">&nbsp;&nbsp;&nbsp; "http://struts.apache.org/dtds/struts-2.0.dtd"&gt;</span><br />
<br />
<br />
<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;struts&gt;</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;package</span> <span style="color: rgb(255, 0, 0);">name=</span><span style="color: rgb(0, 0, 255);">"struts"</span> <span style="color: rgb(255, 0, 0);">extends=</span><span style="color: rgb(0, 0, 255);">"struts-default"</span><span style="color: rgb(0, 0, 128); font-weight: bold;">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;action</span> <span style="color: rgb(255, 0, 0);">name=</span><span style="color: rgb(0, 0, 255);">"login"</span> <span style="color: rgb(255, 0, 0);">class=</span><span style="color: rgb(0, 0, 255);">"com.mystart.action.LoginAction"</span><span style="color: rgb(0, 0, 128); font-weight: bold;">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;result</span> <span style="color: rgb(255, 0, 0);">name=</span><span style="color: rgb(0, 0, 255);">"success"</span><span style="color: rgb(0, 0, 128); font-weight: bold;">&gt;</span>/result.jsp<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/result&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/action&gt;</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/package&gt;</span><br />
<br />
<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/struts&gt;</span><br />
<br />
4、最后启动struts2，配置web.xml<br />
struts1的web.xml配置是放在&lt;servlet&gt;中，也就是是一个servlet<br />
struts2变成了一个过滤器Filter<br />
struts1中&lt;url-pattern&gt;被配置成拦截.do的链接<br />
struts2变成了拦截所有链接 /*<br />
<br />
<span style="color: rgb(0, 128, 128);">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span><br />
<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;web-app</span> <span style="color: rgb(255, 0, 0);">version=</span><span style="color: rgb(0, 0, 255);">"2.4"</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(255, 0, 0);">xmlns=</span><span style="color: rgb(0, 0, 255);">"http://java.sun.com/xml/ns/j2ee"</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(255, 0, 0);">xmlns:xsi=</span><span style="color: rgb(0, 0, 255);">"http://www.w3.org/2001/XMLSchema-instance"</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(255, 0, 0);">xsi:schemaLocation=</span><span style="color: rgb(0, 0, 255);">"http://java.sun.com/xml/ns/j2ee</span><br />
<span style="color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span><span style="color: rgb(0, 0, 128); font-weight: bold;">&gt;</span><br />
&nbsp;&nbsp; <br />
&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;filter&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;filter-name&gt;</span>struts2<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/filter-name&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;filter-class&gt;</span>org.apache.struts2.dispatcher.FilterDispatcher<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/filter-class&gt;</span><br />
&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/filter&gt;</span><br />
&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;filter-mapping&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;filter-name&gt;</span>struts2<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/filter-name&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;url-pattern&gt;</span>/*<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/url-pattern&gt;</span><br />
&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/filter-mapping&gt;</span><br />
&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;welcome-file-list&gt;</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;welcome-file&gt;</span>index.jsp<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/welcome-file&gt;</span><br />
&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/welcome-file-list&gt;</span><br />
<span style="color: rgb(0, 0, 128); font-weight: bold;">&lt;/web-app&gt;</span><br />
<br />
以上是驴了个struts的视频教程，今儿看了第一节课，看完后做了一下总结，里面有一些自己的理解，有不对的地方请兄弟们指正，别光光说我是猪，猪也要进步啊，嘿嘿，每一步都有疑问，明天带着问题接着看下一节，睡觉去。<br />
<img src ="http://www.blogjava.net/liuspring/aggbug/249013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-12-29 23:06 <a href="http://www.blogjava.net/liuspring/archive/2008/12/29/249013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义Annotation</title><link>http://www.blogjava.net/liuspring/archive/2008/12/28/248762.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Sun, 28 Dec 2008 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/12/28/248762.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/248762.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/12/28/248762.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/248762.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/248762.html</trackback:ping><description><![CDATA[自定义Annotation<br />
早就知道jdk5加了新特性Annotation，但是没研究过，前几天公司培训，有一部分是介绍jdk5新特性的，一个是注解一个泛型<br />
今儿复习一下注解<br />
&nbsp;&nbsp;&nbsp; //用@Deprecated声明该方法不建议使用<br />
&nbsp;&nbsp;&nbsp; @Deprecated public void doSomething1(){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Map map = new HashMap();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; map.put("some", "thing");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(map);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; //用@SuppressWarnings声明不再进行类型检查<br />
&nbsp;&nbsp;&nbsp; @SuppressWarnings(value={"unchecked"})<br />
&nbsp;&nbsp;&nbsp; public void doSomething2(){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Map map = new HashMap();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; map.put("some", "thing");<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
<br />
写一个自定义注解先<br />
import java.lang.annotation.Retention;<br />
import java.lang.annotation.RetentionPolicy;<br />
//要在运行时使用这个注解，必须声明成RUNTIME<br />
Annotation分为三种级别：RUNTIME、CLASS、SOURCE<br />
@Retention(RetentionPolicy.<span style="color: #ff0000;">RUNTIME</span>)<br />
<span style="color: #000080; font-weight: bold;">public</span> @interface SomeAnnotation{<br />
&nbsp;&nbsp;&nbsp; String value();<br />
&nbsp;&nbsp;&nbsp; String name();<br />
}<br />
<br />
下面来使用这个自定义注解：<br />
import java.lang.reflect.Method;<br />
<span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">class</span> AnnotationTest {<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; @SomeAnnotation(value=<span style="color: #0000ff;">"value1"</span>,name=<span style="color: #0000ff;">"name1"</span>)<br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">void</span> doSomething3(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">public</span> <span style="color: #000080; font-weight: bold;">static</span> <span style="color: #000080; font-weight: bold;">void</span> main(String[] args){<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class&lt;AnnotationTest&gt; c = AnnotationTest.<span style="color: #ff0000;">class</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">try</span> {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">//利用反射得到方法doSomething3</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method method = c.<span style="color: #ff0000;">getMethod</span>(<span style="color: #0000ff;">"doSomething3"</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">//查找doSomething3方法是否有SomeAnnotation的Annotation</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000080; font-weight: bold;">if</span>(method.<span style="color: #ff0000;">isAnnotationPresent</span>(SomeAnnotation.<span style="color: #ff0000;">class</span>)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: #ff0000;">out</span>.<span style="color: #ff0000;">println</span>(<span style="color: #0000ff;">"找到SomeAnnotation"</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic;">//得到SomeAnnotation</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SomeAnnotation annotation = method.<span style="color: #ff0000;">getAnnotation</span>(SomeAnnotation.<span style="color: #ff0000;">class</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: #ff0000;">out</span>.<span style="color: #ff0000;">println</span>(<span style="color: #0000ff;">"annotation.value="</span>+annotation.<span style="color: #ff0000;">value</span>());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: #ff0000;">out</span>.<span style="color: #ff0000;">println</span>(<span style="color: #0000ff;">"annotation.name="</span>+annotation.<span style="color: #ff0000;">name</span>());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<span style="color: #000080; font-weight: bold;">else</span>{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: #ff0000;">out</span>.<span style="color: #ff0000;">println</span>(<span style="color: #0000ff;">"没有找到omeAnnotation"</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <span style="color: #000080; font-weight: bold;">catch</span> (SecurityException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.<span style="color: #ff0000;">printStackTrace</span>();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <span style="color: #000080; font-weight: bold;">catch</span> (NoSuchMethodException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.<span style="color: #ff0000;">printStackTrace</span>();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
输出结果：<br />
找到SomeAnnotation<br />
annotation.value=value1<br />
annotation.name=name1<br />
<img src ="http://www.blogjava.net/liuspring/aggbug/248762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-12-28 16:47 <a href="http://www.blogjava.net/liuspring/archive/2008/12/28/248762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse设置项目jdk的问题</title><link>http://www.blogjava.net/liuspring/archive/2008/12/04/244376.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Thu, 04 Dec 2008 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/12/04/244376.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/244376.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/12/04/244376.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/244376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/244376.html</trackback:ping><description><![CDATA[
<p>因为要修改一个以前的老项目，老项目用的jdk是1.4版本，遂在项目右键Properties-Java Compiler中将Compiler compliance level 设成了1.4</p>
<p><img src="http://lh4.ggpht.com/_v1Lc1r1RLbA/STeAfPocdLI/AAAAAAAAAYk/2WCo4rou7tg/zrclip_001n72b83cec.png?imgmax=800" height="555" width="723"/></p>
<p>以为万事大吉了呢，昨晚上因为Integer的一个方法发现了问题</p>
<p>Integer中有个方法valueOf</p>
<table cellpadding="3" width="100%" cellspacing="0" border="1" summary="">
<tbody>
<tr bgcolor="white" class="TableRowColor">
<td width="1%" align="right" valign="top"><span style="FONT-SIZE: 0.6em"><code>static <a href="mk:@MSITStore:E:/spring/J2EEAPI/JAVA5.0API_CN.CHM::/java/lang/Integer.html" title="java.lang 中的类">Integer</a></code></span></td>
<td><code><strong><a href="mk:@MSITStore:E:/spring/J2EEAPI/JAVA5.0API_CN.CHM::/java/lang/Integer.html#valueOf(int)">valueOf</a></strong>(int i)</code>
<br/>
返回一个表示指定的 <tt>int</tt> 值的 <tt>Integer</tt> 实例。</td>
</tr>
<tr bgcolor="white" class="TableRowColor">
<td width="1%" align="right" valign="top"><span style="FONT-SIZE: 0.6em"><code>static <a href="mk:@MSITStore:E:/spring/J2EEAPI/JAVA5.0API_CN.CHM::/java/lang/Integer.html" title="java.lang 中的类">Integer</a></code></span></td>
<td><code><strong><a href="mk:@MSITStore:E:/spring/J2EEAPI/JAVA5.0API_CN.CHM::/java/lang/Integer.html#valueOf(java.lang.String)">valueOf</a></strong>(<a href="mk:@MSITStore:E:/spring/J2EEAPI/JAVA5.0API_CN.CHM::/java/lang/String.html" title="java.lang 中的类">String</a> s)</code>
<br/>
返回保持指定的 <code>String</code> 的值的 <code>Integer</code> 对象。</td>
</tr>
<tr bgcolor="white" class="TableRowColor">
<td width="1%" align="right" valign="top"><span style="FONT-SIZE: 0.6em"><code>static <a href="mk:@MSITStore:E:/spring/J2EEAPI/JAVA5.0API_CN.CHM::/java/lang/Integer.html" title="java.lang 中的类">Integer</a></code></span></td>
<td><code><strong><a href="mk:@MSITStore:E:/spring/J2EEAPI/JAVA5.0API_CN.CHM::/java/lang/Integer.html#valueOf(java.lang.String, int)">valueOf</a></strong>(<a href="mk:@MSITStore:E:/spring/J2EEAPI/JAVA5.0API_CN.CHM::/java/lang/String.html" title="java.lang 中的类">String</a> s, int radix)</code>
<br/>
返回一个 <code>Integer</code> 对象，该对象中保持了用第二个参数提供的基数进行分析时从指定的 <code>String</code> 中提取的值。</td>
</tr>
</tbody>
</table>
<p>其中<a href="mk:@MSITStore:E:/spring/J2EEAPI/JAVA5.0API_CN.CHM::/java/lang/Integer.html#valueOf(int)"><strong><span style="FONT-FAMILY: Courier New">valueOf</span></strong></a><span style="FONT-FAMILY: Courier New">(int i)</span></p>
<dl>
<dt><strong>从以下版本开始：</strong></dt>
<dd>1.5</dd>
</dl>
<p>也就是在1.5之前没有这个方法，但是在eclipse中却有这个方法的提示</p>
<p><img src="http://lh3.ggpht.com/_v1Lc1r1RLbA/STeAfTUq9zI/AAAAAAAAAYo/TElgTBFCIXM/zrclip_002n5ac79d9b.png?imgmax=800" height="380" width="765"/></p>
<p>找了半天，原来问题出在这，在Java Build Path 中Libraries 中jdk是1.5的，把它remove掉，添加一个1.4的就OK了</p>
<p><img src="http://lh4.ggpht.com/_v1Lc1r1RLbA/STeAf1NFpGI/AAAAAAAAAYs/darqo_IB3Cc/zrclip_003p7f504e4f.png?imgmax=720" height="535" width="713"/></p>
<p>还是功力不够啊 充电 充电ing</p>
<img src ="http://www.blogjava.net/liuspring/aggbug/244376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-12-04 15:02 <a href="http://www.blogjava.net/liuspring/archive/2008/12/04/244376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重温Hibernate基础--get/load的区别</title><link>http://www.blogjava.net/liuspring/archive/2008/11/07/239169.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Fri, 07 Nov 2008 02:15:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/11/07/239169.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/239169.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/11/07/239169.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/239169.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/239169.html</trackback:ping><description><![CDATA[
<p>下了个Hibernate视频教程听，虽然一年多以前跟老师学过Hibernate，但现在听听还是有很多收获的，发现自己的知识知道的都是些皮毛，用了很久的东西，知道怎么操作怎么用，但要说说它的所以然，摇摇头，呵呵</p>
<p>根据主键Id得到一个持久对象，Hibernate中有两个方法，一个get，一个load，他们两个参数相同，都返回一个Object</p>
<p>它们的区别：
<br/>
执行get方法即时生成查询sql去查询数据库得到相应的pojo，如果数据库中没有相应记录，则返回null
<br/>
执行load方法不会即时产生sql语句，而是在用到返回的对象时采取查询数据库，也就是load方法有默认的延迟加载，在执行load方法后返回的不是一个pojo对象，是pojo对象的一个代理(据说Hibernate是用代理的方式实现延迟加载的，这块还迷糊)，如果数据库中没有相应记录，load方法会抛出异常ObjectNotFoundException
<br/>
看了一下我们用MyEclipse hibernate工具通过数据库生成的DAO类，它的findById方法是用的session.get()方法，这是即时获得pojo对象，如果是load方法，在执行完load后如果关闭了session，那在接下来用到这个pojo对象时恐怕会报session已关闭的错误。
<br/>
还有就是这两个方法的第二个参数id，它必须是实现了java.io.Serializable接口，也就是可序列化的。</p>
<p>今天好像是立冬，冬天到了，抓紧时间充充电，明天接着学...</p>
<img src ="http://www.blogjava.net/liuspring/aggbug/239169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-11-07 10:15 <a href="http://www.blogjava.net/liuspring/archive/2008/11/07/239169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 将给定日期增加n个月</title><link>http://www.blogjava.net/liuspring/archive/2008/10/26/236737.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Sun, 26 Oct 2008 10:37:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/10/26/236737.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/236737.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/10/26/236737.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/236737.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/236737.html</trackback:ping><description><![CDATA[//将给定日期增加NumDay个月<br />
&nbsp;&nbsp;&nbsp;  function addDate(dtDate,NumDay){<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  var date = new Date(dtDate);<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  var lIntval = parseInt(NumDay);<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  date.setMonth(date.getMonth() + lIntval);<br />
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  return date.getYear() +'-' +  (date.getMonth()+1) + '-' +date.getDate();<br />
&nbsp;&nbsp;&nbsp;  }<br />
<br />
addDate("2008-01-01".replace(/-/g, "\/"),2);<br />
<br />
<br />
=======================================<br />
// addDate("5",5,"2004/12/1 00:00:00")<br />
function addDate(type,NumDay,dtDate){<br />
&nbsp;&nbsp;  var date = new Date(dtDate)<br />
type = parseInt(type) //类型 <br />
lIntval = parseInt(NumDay)//间隔<br />
switch(type){<br />
&nbsp;&nbsp;  case 6 ://年<br />
date.setYear(date.getYear() + lIntval)<br />
break;<br />
case 7 ://季度<br />
date.setMonth(date.getMonth() + (lIntval * 3) )<br />
break;<br />
case 5 ://月<br />
date.setMonth(date.getMonth() + lIntval)<br />
break;<br />
case 4 ://天<br />
date.setDate(date.getDate() + lIntval)<br />
break<br />
case 3 ://时<br />
date.setHours(date.getHours() + lIntval)<br />
break<br />
case 2 ://分<br />
date.setMinutes(date.getMinutes() + lIntval)<br />
break<br />
case 1 ://秒<br />
date.setSeconds(date.getSeconds() + lIntval)<br />
break;<br />
default:<br />
&nbsp;&nbsp;&nbsp;  <br />
} <br />
return date.getYear() +'-' + (date.getMonth()+1) + '-' +date.getDate()+
' '+ date.getHours()+':'+date.getMinutes()+':'+date.getSeconds()<br />
}
<img src ="http://www.blogjava.net/liuspring/aggbug/236737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-10-26 18:37 <a href="http://www.blogjava.net/liuspring/archive/2008/10/26/236737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR Convert</title><link>http://www.blogjava.net/liuspring/archive/2008/10/23/236219.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Thu, 23 Oct 2008 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/10/23/236219.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/236219.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/10/23/236219.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/236219.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/236219.html</trackback:ping><description><![CDATA[DWR不能识别以<br />
Class c = Class.forName(ClassName);<br />
方式产生的对象，<br />
它被是别为java.lang.Class
<img src ="http://www.blogjava.net/liuspring/aggbug/236219.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-10-23 17:34 <a href="http://www.blogjava.net/liuspring/archive/2008/10/23/236219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>随机快速排序算法</title><link>http://www.blogjava.net/liuspring/archive/2008/10/23/236213.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Thu, 23 Oct 2008 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/10/23/236213.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/236213.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/10/23/236213.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/236213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/236213.html</trackback:ping><description><![CDATA[随机快速排序算法：
<br />
还没怎么整明白，有点晕<br />
<u>Java语言</u>:
<div style="font-family: &quot;Courier New&quot;,&quot;Lucida Console&quot;,&quot;monospace&quot;; background-color: rgb(249, 247, 237);" class="source">import java.util.*;<br />
<span style="color: rgb(0, 0, 128); font-weight: bold;">public</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">class</span> Test {<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">int</span>[] x = {<span style="color: rgb(0, 0, 255);">3</span>,<span style="color: rgb(0, 0, 255);">7</span>,<span style="color: rgb(0, 0, 255);">5</span>,<span style="color: rgb(0, 0, 255);">6</span>,<span style="color: rgb(0, 0, 255);">4</span>,<span style="color: rgb(0, 0, 255);">9</span>,<span style="color: rgb(0, 0, 255);">8</span>,<span style="color: rgb(0, 0, 255);">1</span>};<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">int</span> comps = <span style="color: rgb(0, 0, 255);">0</span>;<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">void</span> quicksort(<span style="color: rgb(0, 0, 128); font-weight: bold;">int</span> l, <span style="color: rgb(0, 0, 128); font-weight: bold;">int</span> u)<br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">int</span> i, m;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">if</span> (l &gt;= u) <span style="color: rgb(0, 0, 128); font-weight: bold;">return</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap(l, getRandom(l, u));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m = l;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; comps += u - <span style="color: rgb(0, 0, 255);">1</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">for</span> (i = l+<span style="color: rgb(0, 0, 255);">1</span>; i &lt;= u; i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 136, 0); font-style: italic;">//comps++;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">if</span> (x[i] &lt; x[l])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap(++m, i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap(l, m);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; quicksort(l, m-<span style="color: rgb(0, 0, 255);">1</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; quicksort(m+<span style="color: rgb(0, 0, 255);">1</span>, u);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">void</span> swap(<span style="color: rgb(0, 0, 128); font-weight: bold;">int</span> a,<span style="color: rgb(0, 0, 128); font-weight: bold;">int</span> b){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">int</span> temp = x[a];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x[a] = x[b];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x[b] = temp;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">int</span> getRandom(<span style="color: rgb(0, 0, 128); font-weight: bold;">int</span> min,<span style="color: rgb(0, 0, 128); font-weight: bold;">int</span> max){&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">return</span> (<span style="color: rgb(0, 0, 128); font-weight: bold;">int</span>)(Math.<span style="color: rgb(255, 0, 0);">random</span>()*(max-min+<span style="color: rgb(0, 0, 255);">1</span>)) + min;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 136, 0); font-style: italic;">//Math.round(Math.random()*(Max-Min)+Min);</span><br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold;">public</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">static</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">void</span> main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Test t = <span style="color: rgb(0, 0, 128); font-weight: bold;">new</span> Test();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: rgb(255, 0, 0);">out</span>.<span style="color: rgb(255, 0, 0);">println</span>(Arrays.<span style="color: rgb(255, 0, 0);">toString</span>(t.<span style="color: rgb(255, 0, 0);">x</span>));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.<span style="color: rgb(255, 0, 0);">quicksort</span>(<span style="color: rgb(0, 0, 255);">0</span>,t.<span style="color: rgb(255, 0, 0);">x</span>.<span style="color: rgb(255, 0, 0);">length</span> - <span style="color: rgb(0, 0, 255);">1</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: rgb(255, 0, 0);">out</span>.<span style="color: rgb(255, 0, 0);">println</span>(t.<span style="color: rgb(255, 0, 0);">comps</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color: rgb(255, 0, 0);">out</span>.<span style="color: rgb(255, 0, 0);">println</span>(Arrays.<span style="color: rgb(255, 0, 0);">toString</span>(t.<span style="color: rgb(255, 0, 0);">x</span>));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
<br />
}<br />
</div>
<br />
<br />
<img src ="http://www.blogjava.net/liuspring/aggbug/236213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-10-23 17:24 <a href="http://www.blogjava.net/liuspring/archive/2008/10/23/236213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用javascript获取和设置style</title><link>http://www.blogjava.net/liuspring/archive/2008/10/10/233589.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Fri, 10 Oct 2008 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/10/10/233589.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/233589.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/10/10/233589.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/233589.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/233589.html</trackback:ping><description><![CDATA[
<p>好久没写了
<br/>
中间过了个十一，在家混沌过了好几天</p>
<p>回来转眼上了一星期班了，忙的屁滚尿流
<br/>
一年前的系统要增加两个大功能，200多个报表要挨个修改，报表校验的页面效果客户又提出了新建议，一个字 改</p>
<p>从昨天晚上开始捣鼓到现在终于解决了一个问题，心情好了些，上来写写，哈哈</p>
<p>这两天用了baidu 百度空间中的弹出窗口js，感觉不错，很强大，很好很简单的解决了好几个问题，界面友好度以及美化也好多了，以前都是硬邦邦window.open();</p>
<p>有兴趣的朋友搜索"<a href="http://www.google.cn/search?q=百度+popup&amp;sourceid=navclient-ff&amp;ie=UTF-8&amp;rlz=1B3GGGL_zh-CNCN266CN267&amp;aq=t">百度 popup</a>"就好了，已经有人给出了注释，强大。</p>
<p>最有意思的是用javascript获取和设置style</p>
<p>DOM标准引入了覆盖样式表的概念，当我们用document.getElementById("id").style.backgroundColor 获取样式时 获取的只是id中style属性中设置的背景色，如果id中的style属性中没有设置background-color那么就会返回空，也就是说如果id用class属性引用了一个外部样式表，在这个外部样式表中设置的背景色，那么不好意思document.getElementById("id").style.backgroundColor 这种写法不好使，如果要获取外部样式表中的设置，需要用到window对象的getComputedStyle()方法，代码这样写window.getComputedStyle(id,null).backgroundColor
<br/>
但是兼容问题又来了，这么写在firefox中好使，但在IE中不好使
<br/>
两者兼容的方式写成
<br/>
window.getComputedStyle?window.getComputedStyle(id,null).backgroundColor:id.currentStyle["backgroundColor"];
<br/>
如果是获取背景色，这种方法在firefox和IE中的返回值还是不一样的，IE中是返回"#ffff99"样子的，而firefox中返回"rgb(238, 44, 34) "
<br/>
值得注意的是：window.getComputedStyle(id,null)这种方式不能设置样式，只能获取，要设置还得写成类似这样id.style.background="#EE2C21";</p>
<p>参考：
<br/>
JavaScript权威指南
<br/>
<a href="http://bokee.shinylife.net/blog/article.asp?id=817">http://bokee.shinylife.net/blog/article.asp?id=817</a>
<br/>
<a href="http://book.csdn.net/bookfiles/679/10067921329.shtml">http://book.csdn.net/bookfiles/679/10067921329.shtml</a>
<br/></p>
<img src ="http://www.blogjava.net/liuspring/aggbug/233589.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-10-10 14:49 <a href="http://www.blogjava.net/liuspring/archive/2008/10/10/233589.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Url Rewrite Filter重写url</title><link>http://www.blogjava.net/liuspring/archive/2008/09/24/230953.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Wed, 24 Sep 2008 10:04:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/09/24/230953.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/230953.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/09/24/230953.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/230953.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/230953.html</trackback:ping><description><![CDATA[<p>今天发现一个好东西</p>
<p><a href="http://tuckey.org/urlrewrite/">Url Rewrite Filter</a></p>
<p>它可以实现url重写，从而隐藏实际的url，同时使url看起来更美观，简单</p>
<p>最令人兴奋的是它一下解决了一值在寻找的blog用户访问自己的空间的问题</p>
<p>比如<a href="http://hi.baidu.com/liuspring">http://hi.baidu.com/liuspring</a> 就显示我的空间</p>
<p>1、下载<a href="http://tuckey.org/urlrewrite/">Url Rewrite Filter</a></p>
<p>2、在项目的web.xml配置过滤器<br />
<br />
</p>
<div style="background: rgb(253,253,253); moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"><span style="text-decoration: underline">XML语言</span>:</div>
<div class="source" style="font-family: 'Courier New','Lucida Console','monospace'; background-color: rgb(249,247,237)"><span style="font-weight: bold; color: rgb(0,0,128)">&lt;filter&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;filter-name&gt;</span>UrlRewriteFilter<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/filter-name&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;filter-class&gt;</span>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/filter-class&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;init-param&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;param-name&gt;</span>logLevel<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/param-name&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;param-value&gt;</span>debug<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/param-value&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/init-param&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/filter&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;filter-mapping&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;filter-name&gt;</span>UrlRewriteFilter<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/filter-name&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;url-pattern&gt;</span>/*<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/url-pattern&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/filter-mapping&gt;</span></div>
<p><br />
3、将urlrewrite-2.6.0.jar放入lib文件夹<br />
4、新建urlrewrite.xml文件置于WEB-INF目录<br />
5、配置urlrewrite.xml<br />
<br />
</p>
<div style="background: rgb(253,253,253); moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"><span style="text-decoration: underline">XML语言</span>: <a href="http://www.fayaa.com/code/view//">临时自用代码@代码发芽网</a></div>
<div class="source" style="font-family: 'Courier New','Lucida Console','monospace'; background-color: rgb(249,247,237)"><span style="color: rgb(0,128,128)">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span> <br />
<span style="color: rgb(0,128,128)">&lt;!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"</span> <br />
<span style="color: rgb(0,128,128)">"http://tuckey.org/res/dtds/urlrewrite2.6.dtd"&gt;</span> <br />
<br />
<span style="color: rgb(0,136,0); font-style: italic">&lt;!--</span> <br />
<br />
<span style="color: rgb(0,136,0); font-style: italic">Configuration file for UrlRewriteFilter</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">http://tuckey.org/urlrewrite/</span> <br />
<br />
<span style="color: rgb(0,136,0); font-style: italic">--&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;urlrewrite&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;rule&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;from&gt;</span>^/([a-z]+)/?$<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/from&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;to</span> <span style="color: rgb(255,0,0)">type=</span> <span style="color: rgb(0,0,255)">"forward"</span> <span style="font-weight: bold; color: rgb(0,0,128)">&gt;</span>/blogView.do?go=$1<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/to&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/rule&gt;</span> <br />
<br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;rule&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;note&gt;</span> 这是一个通用请求url rewrite<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/note&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;from&gt;</span>^/([a-z0-9A-Z_]+)/([a-z0-9A-Z_]+)/?$<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/from&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;to</span> <span style="color: rgb(255,0,0)">type=</span> <span style="color: rgb(0,0,255)">"forward"</span> <span style="font-weight: bold; color: rgb(0,0,128)">&gt;</span>/$2.do?go=$1<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/to&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/rule&gt;</span> <br />
<br />
<br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;outbound-rule&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;note&gt;</span> <br />
The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url) <br />
the url /rewrite-status will be rewritten to /test/status/. <br />
<br />
The above rule and this outbound-rule means that end users should never see the <br />
url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks <br />
in your pages. <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/note&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;from&gt;</span>/rewrite-status<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/from&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;to&gt;</span>/test/status/<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/to&gt;</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/outbound-rule&gt;</span> <br />
<br />
<span style="font-weight: bold; color: rgb(0,0,128)">&lt;/urlrewrite&gt;</span> </div>
<p><br />
<br />
<br />
url匹配使用正则表达式的规则，<br />
实验中发现一个问题，就是必须把里面的正则表达式用小括号括起来，在正则表达式中叫分组<br />
不然会报异常：<br />
<span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry">java.lang.IndexOutOfBoundsException: No group 2<br />
</span><span>哈哈，前几日还费劲的自己写Servlet重写url呢，原来这有现成的，更加觉得自己现在的水平遇到的问题网上的前辈们早都遇到过了，一定要站在巨人的肩膀上，少走弯路啊。<br />
</span><br />
<br />
把我的servlet贴在这，呵呵，参考自blojsom<br />
<br />
</p>
<div style="background: rgb(253,253,253); moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"><span style="text-decoration: underline">Java语言</span>: <a href="http://www.fayaa.com/code/view//">临时自用代码@代码发芽网</a></div>
<div class="source" style="font-family: 'Courier New','Lucida Console','monospace'; background-color: rgb(249,247,237)">package com.<span style="color: rgb(255,0,0)">capinfo</span>.<span style="color: rgb(255,0,0)">servlet</span>; <br />
<br />
import org.apache.commons.logging.Log; <br />
import org.apache.commons.logging.LogFactory; <br />
<br />
import com.capinfo.util.PageConstraint; <br />
import com.capinfo.util.PigBlogUtil; <br />
<br />
<br />
import javax.servlet.ServletConfig; <br />
import javax.servlet.ServletException; <br />
import javax.servlet.ServletRequest; <br />
import javax.servlet.ServletResponse; <br />
import javax.servlet.http.HttpServlet; <br />
import javax.servlet.http.HttpServletRequest; <br />
import javax.servlet.http.HttpServletResponse; <br />
import java.io.IOException; <br />
<br />
<br />
<span style="color: rgb(0,136,0); font-style: italic">/**</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">*</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">* @author Administrator</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">*</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">*/</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">public</span> <span style="font-weight: bold; color: rgb(0,0,128)">class</span> PigBlogServlet <span style="font-weight: bold; color: rgb(0,0,128)">extends</span> HttpServlet { <br />
<br />
<span style="font-weight: bold; color: rgb(0,0,128)">protected</span> Log _logger = LogFactory.<span style="color: rgb(255,0,0)">getLog</span>(PigBlogServlet.<span style="color: rgb(255,0,0)">class</span>); <br />
<br />
<br />
<br />
<span style="color: rgb(0,136,0); font-style: italic">/**</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">* Initialize</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">*</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">* @param servletConfig {@link ServletConfig}</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">* @throws ServletException If there is an error initializing</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">*/</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">public</span> <span style="font-weight: bold; color: rgb(0,0,128)">void</span> init(ServletConfig servletConfig) <span style="font-weight: bold; color: rgb(0,0,128)">throws</span> ServletException { <br />
<span style="font-weight: bold; color: rgb(0,0,128)">super</span>.<span style="color: rgb(255,0,0)">init</span>(servletConfig); <br />
} <br />
<br />
<span style="color: rgb(0,136,0); font-style: italic">/**</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">* Handle requests made to</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">*</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">* @param httpServletRequest {@link HttpServletRequest} request</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">* @param httpServletResponse {@link HttpServletResponse} response</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">* @throws ServletException If there is an error serving the request</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">* @throws IOException If there is an error serving the request</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">*/</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">protected</span> <span style="font-weight: bold; color: rgb(0,0,128)">void</span> service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) <span style="font-weight: bold; color: rgb(0,0,128)">throws</span> ServletException, IOException { <br />
<br />
<br />
<span style="color: rgb(0,136,0); font-style: italic">// Make sure that we have a request URI ending with a / otherwise we need to</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// redirect so that the browser can handle relative link generation</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// if (!httpServletRequest.getRequestURI().endsWith("/")) {</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// StringBuffer redirectURL = new StringBuffer();</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// redirectURL.append(httpServletRequest.getRequestURI());</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// redirectURL.append("/");</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// if (httpServletRequest.getParameterMap().size() &gt; 0) {</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// redirectURL.append("?");</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// redirectURL.append(PigBlogUtil.convertRequestParams(httpServletRequest));</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// }</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">//</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// if (_logger.isDebugEnabled()) {</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// _logger.debug("Redirecting the user to: " + redirectURL.toString());</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// }</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">//</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// httpServletResponse.sendRedirect(redirectURL.toString());</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">//</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// return;</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">// }</span> <br />
<br />
<br />
<br />
<span style="color: rgb(0,136,0); font-style: italic">// Check for an overriding id</span> <br />
String blogId = httpServletRequest.<span style="color: rgb(255,0,0)">getParameter</span>(PageConstraint.<span style="color: rgb(255,0,0)">GO</span>); <br />
<span style="font-weight: bold; color: rgb(0,0,128)">if</span> (PigBlogUtil.<span style="color: rgb(255,0,0)">checkNullOrBlank</span>(blogId)) { <br />
String blogIdFromPath = PigBlogUtil.<span style="color: rgb(255,0,0)">getBlogFromPath</span>(httpServletRequest.<span style="color: rgb(255,0,0)">getPathInfo</span>()); <br />
<span style="font-weight: bold; color: rgb(0,0,128)">if</span> (blogIdFromPath == <span style="font-weight: bold; color: rgb(0,0,128)">null</span>) { <br />
blogId = PageConstraint.<span style="color: rgb(255,0,0)">GO1</span>; <br />
} <span style="font-weight: bold; color: rgb(0,0,128)">else</span> { <br />
blogId = blogIdFromPath; <br />
} <br />
} <br />
<br />
<span style="font-weight: bold; color: rgb(0,0,128)">if</span> (PigBlogUtil.<span style="color: rgb(255,0,0)">checkNullOrBlank</span>(blogId)) { <br />
httpServletResponse.<span style="color: rgb(255,0,0)">sendError</span>(HttpServletResponse.<span style="color: rgb(255,0,0)">SC_NOT_FOUND</span>, <span style="color: rgb(0,0,255)">"Blog ID not specified"</span>); <br />
<br />
<span style="font-weight: bold; color: rgb(0,0,128)">return</span>; <br />
} <br />
StringBuffer redirectURL = <span style="font-weight: bold; color: rgb(0,0,128)">new</span> StringBuffer(); <br />
<br />
<span style="color: rgb(0,136,0); font-style: italic">//redirectURL.append(httpServletRequest.getContextPath());</span> <br />
System.<span style="color: rgb(255,0,0)">out</span>.<span style="color: rgb(255,0,0)">println</span>(httpServletRequest.<span style="color: rgb(255,0,0)">getRequestURI</span>()); <br />
<span style="font-weight: bold; color: rgb(0,0,128)">if</span>(httpServletRequest.<span style="color: rgb(255,0,0)">getRequestURI</span>().<span style="color: rgb(255,0,0)">indexOf</span>(<span style="color: rgb(0,0,255)">"/blog/"</span>) &gt; -<span style="color: rgb(0,0,255)">1</span> &amp;&amp; httpServletRequest.<span style="color: rgb(255,0,0)">getRequestURI</span>().<span style="color: rgb(255,0,0)">indexOf</span>(<span style="color: rgb(0,0,255)">".jsp"</span>) == -<span style="color: rgb(0,0,255)">1</span> ){ <br />
<span style="font-weight: bold; color: rgb(0,0,128)">if</span>(!httpServletRequest.<span style="color: rgb(255,0,0)">getRequestURI</span>().<span style="color: rgb(255,0,0)">endsWith</span>(<span style="color: rgb(0,0,255)">"/"</span>) &amp;&amp; httpServletRequest.<span style="color: rgb(255,0,0)">getRequestURI</span>().<span style="color: rgb(255,0,0)">indexOf</span>(<span style="color: rgb(0,0,255)">".do"</span>) &gt; -<span style="color: rgb(0,0,255)">1</span>){ <br />
redirectURL.<span style="color: rgb(255,0,0)">append</span>(httpServletRequest.<span style="color: rgb(255,0,0)">getRequestURI</span>().<span style="color: rgb(255,0,0)">substring</span>(httpServletRequest.<span style="color: rgb(255,0,0)">getRequestURI</span>().<span style="color: rgb(255,0,0)">lastIndexOf</span>(<span style="color: rgb(0,0,255)">"/"</span>), httpServletRequest.<span style="color: rgb(255,0,0)">getRequestURI</span>().<span style="color: rgb(255,0,0)">length</span>())); <br />
<br />
}<span style="font-weight: bold; color: rgb(0,0,128)">else</span> <span style="font-weight: bold; color: rgb(0,0,128)">if</span>(httpServletRequest.<span style="color: rgb(255,0,0)">getRequestURI</span>().<span style="color: rgb(255,0,0)">indexOf</span>(<span style="color: rgb(0,0,255)">"/blog/"</span>) == -<span style="color: rgb(0,0,255)">1</span>){ <br />
<br />
}<span style="font-weight: bold; color: rgb(0,0,128)">else</span>{ <br />
redirectURL.<span style="color: rgb(255,0,0)">append</span>(<span style="color: rgb(0,0,255)">"/blogView.do"</span>); <br />
<br />
} <br />
redirectURL.<span style="color: rgb(255,0,0)">append</span>(<span style="color: rgb(0,0,255)">"?go="</span>); <br />
redirectURL.<span style="color: rgb(255,0,0)">append</span>(blogId); <br />
<br />
httpServletRequest.<span style="color: rgb(255,0,0)">getRequestDispatcher</span>(redirectURL.<span style="color: rgb(255,0,0)">toString</span>()) <br />
.<span style="color: rgb(255,0,0)">forward</span>((ServletRequest)httpServletRequest, (ServletResponse)httpServletResponse); <br />
<span style="color: rgb(0,136,0); font-style: italic">//httpServletResponse.sendRedirect(redirectURL.toString());</span> <br />
}<span style="font-weight: bold; color: rgb(0,0,128)">else</span>{ <br />
httpServletRequest.<span style="color: rgb(255,0,0)">getRequestDispatcher</span>(httpServletRequest.<span style="color: rgb(255,0,0)">getRequestURI</span>()) <br />
.<span style="color: rgb(255,0,0)">forward</span>((ServletRequest)httpServletRequest, (ServletResponse)httpServletResponse); <br />
<span style="color: rgb(0,136,0); font-style: italic">//httpServletResponse.sendRedirect(httpServletRequest.getRequestURI());</span> <br />
} <br />
System.<span style="color: rgb(255,0,0)">out</span>.<span style="color: rgb(255,0,0)">println</span>(redirectURL.<span style="color: rgb(255,0,0)">toString</span>()); <br />
<span style="font-weight: bold; color: rgb(0,0,128)">return</span>; <br />
<br />
<br />
} <br />
<br />
<span style="color: rgb(0,136,0); font-style: italic">/**</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">* Take out of service</span> <br />
<span style="color: rgb(0,136,0); font-style: italic">*/</span> <br />
<span style="font-weight: bold; color: rgb(0,0,128)">public</span> <span style="font-weight: bold; color: rgb(0,0,128)">void</span> destroy() { <br />
<span style="font-weight: bold; color: rgb(0,0,128)">super</span>.<span style="color: rgb(255,0,0)">destroy</span>(); <br />
<br />
<span style="font-weight: bold; color: rgb(0,0,128)">if</span> (_logger.<span style="color: rgb(255,0,0)">isDebugEnabled</span>()) { <br />
_logger.<span style="color: rgb(255,0,0)">debug</span>(<span style="color: rgb(0,0,255)">" destroyed"</span>); <br />
} <br />
} <br />
} </div>
<p><br />
<br />
<br />
<br />
<br />
&nbsp;</p>
<img src ="http://www.blogjava.net/liuspring/aggbug/230953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-09-24 18:04 <a href="http://www.blogjava.net/liuspring/archive/2008/09/24/230953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>普元培训第五天</title><link>http://www.blogjava.net/liuspring/archive/2008/09/18/229796.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Thu, 18 Sep 2008 13:01:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/09/18/229796.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/229796.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/09/18/229796.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/229796.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/229796.html</trackback:ping><description><![CDATA[
<p>培训最后一天，报表~</p>
<p>感觉普元的报表有点水晶的味道，弄了个分组报表，又建数据源又建数据集有设行分组，列分组的，赶紧挺麻烦，没有用润乾好使，虽然润乾工作量也挺大</p>
<p>看来老板要贴了心上普元了，接下来可能要实战了，不知道啥样，现在有两点困难;</p>
<p>1\、普元报的错误，无从下手，不知道哪出的毛病，比如有时在展现层的毛病，而在逻辑处理层报错，摸不着头脑啊。</p>
<p>2、普元的构件不熟悉，据说有1000多个构件，不像java api一样按照功能分的包，它是按层分的包，业务逻辑层构件、运算层构件、展现层构件。要实现一个功能怎么能知道构件包里有没有现成的，恐怕这只能慢慢熟悉那些构件库了</p>
<p>3、觉得普元的报表系统不怎么样，至少没有什么让人耳目一新的，工作流系统还挺强，对工作流不熟悉，不敢说什么，然后就是可维护性，可扩展性，可能一直是自己写代码的，看不见代码总觉得不踏实最然功能实现了并以更迅速的</p>
<p>4、听头儿说这是未来软件开发的趋势，听得我直郁闷，未来开发就是这么托构件然后用连线一拉基本完事儿了吗？！得，要不我还是转行做小买卖去吧，呜呜，总的来说，觉得这种模式对程序员个人的发展没多大好处，核心代码都被封装好了，不知道什么是类，对象，方法，面向对象，也能轻而易举做软件工程师了，呵呵，工程师以后不值钱喽。</p>
<p>自己的一点感觉，胡侃一通，不知道合不合乎逻辑，在前面的blog里有朋友留言说"千万别被普元忽悠了"，哈哈，不知道那位兄弟的理由是什么，想多听听大家的意见，望广留言，多谢多谢多谢！！！</p>
<img src ="http://www.blogjava.net/liuspring/aggbug/229796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-09-18 21:01 <a href="http://www.blogjava.net/liuspring/archive/2008/09/18/229796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过Xpath来访问数据</title><link>http://www.blogjava.net/liuspring/archive/2008/09/18/229672.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Thu, 18 Sep 2008 05:48:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/09/18/229672.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/229672.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/09/18/229672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/229672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/229672.html</trackback:ping><description><![CDATA[
<p style="MARGIN: 0cm 0cm 6pt 21pt; TEXT-ALIGN: left; mso-para-margin-left: 21.0pt; mso-para-margin-top: 0cm; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd">例子1：Entity的格式</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-char-indent-count: 2.0; mso-layout-grid-align: none">&lt;root&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-char-indent-count: 4.0; mso-layout-grid-align: none">&lt;data&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 84pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-char-indent-count: 8.0; mso-layout-grid-align: none">&lt;myEntity&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-layout-grid-align: none">&lt;myField1&gt;1234&lt;/myField1&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-layout-grid-align: none">&lt;myField2&gt;This is demo&lt;/myField2&gt;</p>
<p style="MARGIN: 0cm 0cm 6pt 52.5pt; TEXT-ALIGN: left; mso-para-margin-left: 5.0gd; mso-para-margin-top: 0cm; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd">&lt;/myEntity&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-char-indent-count: 4.0; mso-layout-grid-align: none">&lt;/data&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-char-indent-count: 2.0; mso-layout-grid-align: none">&lt;/root&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-char-indent-count: 2.0; mso-layout-grid-align: none"> </p>
<p style="MARGIN: 0cm 0cm 6pt 21pt; TEXT-ALIGN: left; mso-para-margin-left: 21.0pt; mso-para-margin-top: 0cm; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd">例子2：EntityList的格式为</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-char-indent-count: 2.0; mso-layout-grid-align: none">&lt;root&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-char-indent-count: 4.0; mso-layout-grid-align: none">&lt;data&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: 21pt">&lt;list length=2&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-para-margin-left: 6.0gd; mso-layout-grid-align: none">&lt;myEntity name="test1"&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-para-margin-left: 6.0gd; mso-layout-grid-align: none">&lt;myField1&gt;1234&lt;/myField1&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-para-margin-left: 6.0gd; mso-layout-grid-align: none">&lt;myField2&gt;This is demo&lt;/myField2&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-ALIGN: left; tab-stops: 4.5pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-para-margin-left: 6.0gd; mso-layout-grid-align: none">&lt;/myEntity&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-para-margin-left: 6.0gd; mso-layout-grid-align: none">&lt;myEntity name="test2"&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-para-margin-left: 6.0gd; mso-layout-grid-align: none">&lt;myField1&gt;2345&lt;/myField1&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-para-margin-left: 6.0gd; mso-layout-grid-align: none">&lt;myField2&gt;This is demo&lt;/myField2&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-para-margin-left: 6.0gd; mso-layout-grid-align: none">&lt;/myEntity&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 52.5pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-char-indent-count: 5.0; mso-layout-grid-align: none">&lt;list&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-char-indent-count: 4.0; mso-layout-grid-align: none">&lt;/data&gt;</p>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; tab-stops: 15.0pt 30.0pt 45.0pt 60.0pt 75.0pt 90.0pt 105.0pt 120.0pt 135.0pt 150.0pt 165.0pt 180.0pt 195.0pt 210.0pt 225.0pt 240.0pt 255.0pt 270.0pt 285.0pt 300.0pt; mso-char-indent-count: 2.0; mso-layout-grid-align: none">&lt;/root&gt;</p>
<p style="MARGIN: 0cm 0cm 6pt 21pt; TEXT-ALIGN: left; mso-para-margin-left: 21.0pt; mso-para-margin-top: 0cm; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd"> </p>
<p style="MARGIN: 0cm 0cm 6pt 21pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left; mso-para-margin-left: 21.0pt; mso-para-margin-top: 0cm; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-layout-grid-align: none">通过Xpath来访问数据，比如</p>
<p style="MARGIN: 0cm 0cm 6pt 21pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left; mso-para-margin-left: 21.0pt; mso-para-margin-top: 0cm; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-layout-grid-align: none">/root/data /myEntity将访问到例子1中的&lt;myEntity&gt;实体</p>
<p style="MARGIN: 0cm 0cm 6pt 21pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left; mso-para-margin-left: 21.0pt; mso-para-margin-top: 0cm; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-layout-grid-align: none">/root/data/myEntity/ myField1 将访问到例子1中的myField1，结果为1234</p>
<p style="MARGIN: 0cm 0cm 6pt 21pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left; mso-para-margin-left: 21.0pt; mso-para-margin-top: 0cm; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-layout-grid-align: none">/root/data/list/myEntity[@name="test1"]将访问例子2中的&lt;myEntity name="test1"&gt; 实体</p>
<p style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt">/root/data/list/myEntity[@name="test1"]/myField1将访问例子2中的myField1，值为1234</p>
<img src ="http://www.blogjava.net/liuspring/aggbug/229672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-09-18 13:48 <a href="http://www.blogjava.net/liuspring/archive/2008/09/18/229672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>普元培训第三天</title><link>http://www.blogjava.net/liuspring/archive/2008/09/16/229228.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Tue, 16 Sep 2008 10:22:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/09/16/229228.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/229228.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/09/16/229228.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/229228.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/229228.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天接着培训普元EOS讲rishWeb和工作流上午实现了一个在一个table中实现增删改查，有个控件datacell，一下子就把我搞蒙了， 一个劲儿的复制黏贴，也不知道哪是哪，看起来好像类似与那个.net中的那个DataGrid，关键是还不大明白那些输入输出参数应该以什么套路配置。应该是在开始的时候就配置输入输出参数，但是又是如何跳回到jsp的呢，&lt;datacell:datacell ...&nbsp;&nbsp;<a href='http://www.blogjava.net/liuspring/archive/2008/09/16/229228.html'>阅读全文</a><img src ="http://www.blogjava.net/liuspring/aggbug/229228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-09-16 18:22 <a href="http://www.blogjava.net/liuspring/archive/2008/09/16/229228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>普元EOS培训第二天</title><link>http://www.blogjava.net/liuspring/archive/2008/09/11/228446.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Thu, 11 Sep 2008 13:16:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/09/11/228446.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/228446.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/09/11/228446.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/228446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/228446.html</trackback:ping><description><![CDATA[
<p>今天剖析了昨天三下两下生成的增删改查的代码（能看到的代码也仅仅限于jsp页面中的一些标签），其他的要看的话都是xml，要用EOS的设计器看才是类似于流程图的东西</p>
<p>感觉看不到亲切的java代码很不爽，呵呵</p>
<p>然后练习自定义运算逻辑，这下自己写类了呵呵，eos能够由向导自动生成类和方法体，就像Myeclipse中新建struts的action一样，发现eos的方法都是静态的，都是返回一个int整型值，参数列表也都是Document doc, BizContext param，看起来只有方法名可以自定义了，呵呵！</p>
<p>之前说过普元这套东西都是用xml格式传递参数的，这里就是从param中获取xml，然后拆解每个要用到的节点，来获取传入的参数，然后经过处理后把返回值再放到xml节点中，好费劲。</p>
<p>然后是handler，为了灵活的加入新的处理，可以在一个业务逻辑的前后加入多个handler,跟一般的过滤器写法没什么差别。</p>
<p>然后是jsp Tag自定义，也是继承了javax.servlet.jsp.tagext.TagSupport，没有普元的东西</p>
<p>再然后是复杂查询，多表查询，他是创建一个查询实体，就是视图啦</p>
<p>一天下来对普元EOS了解的多了些，它以方法为单位作为构成构件，以达到重用的目的，各个层之间以xml格式作为联系，开发人员基本上已图形化开发，不接触底层技术，给程序员的门槛降低了（大学生就业更难了呵呵），开发系统开始工业化，把零件装起来，螺丝拧上就OK了</p>
<p>可能经历实际开发了，会有多一些不一样的感触吧</p>
<p>还是没闹明白难道这就是所谓SOA吗？？？</p>
<img src ="http://www.blogjava.net/liuspring/aggbug/228446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-09-11 21:16 <a href="http://www.blogjava.net/liuspring/archive/2008/09/11/228446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>普元EOS培训第一天</title><link>http://www.blogjava.net/liuspring/archive/2008/09/10/228197.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Wed, 10 Sep 2008 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/09/10/228197.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/228197.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/09/10/228197.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/228197.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/228197.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span style="font-family: 宋体;">普元</span><span lang="EN-US">EOS</span><span style="font-family: 宋体;">，面向构件的开发</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">公司要购进普元的EOS开发工具，组织为期5天的培训<br />
</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">为了今天的培训我把我的笔记本系统都重装了，折腾了半天装数据库，装</span><span lang="EN-US">EOS</span><span style="font-family: 宋体;">，装</span><span lang="EN-US">EOS</span><span style="font-family: 宋体;">补丁，不知道干嘛不做一个集成了补丁的安装包</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">安装过程中要配置数据库，要初始化数据库，会向数据库中自动建好多表，然后安装成功后可以在服务控制台管理。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">首先做了个</span><span lang="EN-US">HelloWorld</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">界面就是这样的</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;"><img alt="" src="http://www.blogjava.net/images/blogjava_net/liuspring/eos1.JPG" width="800" height="600" /><br />
</span></p>
<p class="MsoNormal"><span lang="EN-US"><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter" />
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0" />
<v:f eqn="sum @0 1 0" />
<v:f eqn="sum 0 0 @1" />
<v:f eqn="prod @2 1 2" />
<v:f eqn="prod @3 21600 pixelWidth" />
<v:f eqn="prod @3 21600 pixelHeight" />
<v:f eqn="sum @0 0 1" />
<v:f eqn="prod @6 1 2" />
<v:f eqn="prod @7 21600 pixelWidth" />
<v:f eqn="sum @8 21600 0" />
<v:f eqn="prod @7 21600 pixelHeight" />
<v:f eqn="sum @10 21600 0" />
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" />
<o:lock v:ext="edit" aspectratio="t" />
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:414.75pt;
height:311.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\11\clip_image001.png" o:title="" />
</v:shape><![endif]--><!--[if !vml]--><!--[endif]--></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">首先新建一个构件包</span><span lang="EN-US">(</span><span style="font-family: 宋体;">面向构件的开发嘛</span><span lang="EN-US">)</span><span style="font-family: 宋体;">，每个构建包下有页面构件</span><span lang="EN-US">page</span><span style="font-family: 宋体;">，展现逻辑构件</span><span lang="EN-US">pr</span><span style="font-family: 宋体;">，业务逻辑构件</span><span lang="EN-US">biz</span><span style="font-family: 宋体;">，数据逻辑构件</span><span lang="EN-US">data</span><span style="font-family: 宋体;">等等。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">我的理解就是每个构件就相当于分层架构中的一层，</span><span lang="EN-US">page</span><span style="font-family: 宋体;">就是</span><span lang="EN-US">jsp</span><span style="font-family: 宋体;">页面，</span><span lang="EN-US">pr</span><span style="font-family: 宋体;">是</span><span lang="EN-US">Struts</span><span style="font-family: 宋体;">的</span><span lang="EN-US">action</span><span style="font-family: 宋体;">，</span><span lang="EN-US">biz</span><span style="font-family: 宋体;">是</span><span lang="EN-US">spring</span><span style="font-family: 宋体;">的</span><span lang="EN-US">bean,data</span><span style="font-family: 宋体;">是</span><span lang="EN-US">hibernate</span><span style="font-family: 宋体;">的映射，普元在这之上又进行了封装，以前我们在各个层之间传递数据通常由一个</span><span lang="EN-US">DTO</span><span style="font-family: 宋体;">数据传递对象，而普元在各个层用</span><span lang="EN-US">xml</span><span style="font-family: 宋体;">来传递，普元把普遍通用的实现逻辑处理都封装成了构件，我们只要调用构件就行了。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">之后又来了复杂点有刺激的，通过向导实现对一个单表的增删改查，向导跟</span><span lang="EN-US">vs.net</span><span style="font-family: 宋体;">中的那个数据连接，数据适配器拖到页面上选择表，选择字段，就自动生成了增删改查，只是</span><span lang="EN-US">vs.net</span><span style="font-family: 宋体;">中可以看到生成的</span><span lang="EN-US">C#</span><span style="font-family: 宋体;">的代码，而普元生成的只是一堆</span><span lang="EN-US">xml</span><span style="font-family: 宋体;">。</span></p>
<p class="MsoNormal"><span lang="EN-US"><!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:288.75pt;height:274.5pt'>
<v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\11\clip_image003.png" o:title="" />
</v:shape><![endif]--><!--[if !vml]--><img alt="" src="http://www.blogjava.net/images/blogjava_net/liuspring/eos2.JPG" width="388" height="372" /><br />
<!--[endif]--></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">原来一天未必能完成的事，现在十分钟做完，能傻瓜的都傻瓜了，真的也要下岗了。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">哦，对了，这些和</span><span lang="EN-US">SOA</span><span style="font-family: 宋体;">怎么联系上呢？</span></p>
<img src ="http://www.blogjava.net/liuspring/aggbug/228197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-09-10 17:47 <a href="http://www.blogjava.net/liuspring/archive/2008/09/10/228197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp下载文件的问题</title><link>http://www.blogjava.net/liuspring/archive/2008/09/05/227186.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Fri, 05 Sep 2008 04:49:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/09/05/227186.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/227186.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/09/05/227186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/227186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/227186.html</trackback:ping><description><![CDATA[要提供给客户一个下载xml文件备份的功能<br />
思路确定了<br />
生成xml<br />
在服务器指定目录创建文件<br />
取得文件路径，弹出下载框<br />
<br />
<div id="codee_html" style="background-color: #f9f7ed">
<div style="background: #fdfdfd"><u>Java语言</u>: </div>
<div class="source" style="font-family: 'Courier New','Lucida Console','monospace'; background-color: #f9f7ed" jquery1220589733765="2"><span class="lineno" style="color: #008800; font-style: italic">01</span> &lt;%<span style="color: #a61717; background-color: #e3d2d2">@</span> page contentType=<span style="color: #0000ff">"text/html;charset=UTF-8"</span> language=<span style="color: #0000ff">"java"</span>%&gt;<br />
<span class="lineno" style="color: #008800; font-style: italic">02</span> &lt;%<span style="color: #a61717; background-color: #e3d2d2">@</span> page import=<span style="color: #0000ff">"java.io.*"</span> %&gt;<br />
<span class="lineno" style="color: #008800; font-style: italic">03</span> &lt;%<br />
<span class="lineno" style="color: #008800; font-style: italic">04</span> &nbsp;&nbsp;&nbsp;&nbsp; String pathurl = (String)request.<span style="color: #ff0000">getAttribute</span>(<span style="color: #0000ff">"pathurl"</span>);<br />
<span class="lineno special">05</span> &nbsp;&nbsp;&nbsp;&nbsp; <span style="font-weight: bold; color: #000080">if</span>(pathurl !=<span style="font-weight: bold; color: #000080">null</span> &amp;&amp; !pathurl.<span style="color: #ff0000">equals</span>(<span style="color: #0000ff">""</span>)){<br />
<span class="lineno" style="color: #008800; font-style: italic">06</span> &nbsp;&nbsp;&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">07</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String addressReport = application.<span style="color: #ff0000">getRealPath</span>(<span style="color: #0000ff">"/"</span>)+<span style="color: #0000ff">"saveFiles"</span>+File.<span style="color: #ff0000">separator</span>+pathurl;<br />
<span class="lineno" style="color: #008800; font-style: italic">08</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//String addressReport = PageConstraint.XML_PATH_SEND+pathurl;</span><br />
<span class="lineno" style="color: #008800; font-style: italic">09</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addressReport = addressReport.<span style="color: #ff0000">replace</span>(File.<span style="color: #ff0000">separator</span>,File.<span style="color: #ff0000">separator</span>+File.<span style="color: #ff0000">separator</span>);<br />
<span class="lineno special">10</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">11</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//&nbsp;&nbsp; 设置响应头和下载保存的文件名&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">12</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.<span style="color: #ff0000">setContentType</span>(<span style="color: #0000ff">"APPLICATION/OCTET-STREAM;charset=UTF-8"</span>);&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">13</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.<span style="color: #ff0000">setHeader</span>(<span style="color: #0000ff">"Content-Disposition"</span>,&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">14</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff">"attachment;&nbsp;&nbsp; filename=\""</span>&nbsp;&nbsp; +&nbsp;&nbsp; pathurl&nbsp;&nbsp; +&nbsp;&nbsp; <span style="color: #0000ff">"\""</span>);&nbsp; <br />
<span class="lineno special">15</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">16</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//&nbsp;&nbsp; 打开指定文件的流信息&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">17</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.<span style="color: #ff0000">io</span>.<span style="color: #ff0000">FileInputStream</span>&nbsp;&nbsp; fileInputStream&nbsp;&nbsp; =&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">18</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-weight: bold; color: #000080">new</span>&nbsp;&nbsp; java.<span style="color: #ff0000">io</span>.<span style="color: #ff0000">FileInputStream</span>(addressReport);&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">19</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<span class="lineno special">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008800; font-style: italic">写出流信息&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">int&nbsp;&nbsp; i;&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">while&nbsp;&nbsp; ((i=fileInputStream.read())&nbsp;&nbsp; !=&nbsp;&nbsp; -1)&nbsp;&nbsp; {&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008800; font-style: italic">out.write(i);&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">}</span><br />
<span class="lineno special">25</span> &nbsp;&nbsp;&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">fileInputStream.close();&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">out.close(); </span><br />
<span class="lineno" style="color: #008800; font-style: italic">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<em><font color="#008800">29</font></em>&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<span class="lineno" style="color: #008800; font-style: italic">30</span>&nbsp;&nbsp; %&gt;<br />
</div>
</div>
<br />
这么写在jsp文件中的代码，开始试验没有问题，但是如果xml中有中文，就会是乱码，xml文件是使用utf8生成的，猜想可能是在流读取的时候编码不对，于是在网上搜得了下面这样的写法，通过InputStreamReader设置了编码UTF-8<br />
测试成功<br />
<br />
<div id="codee_html" style="background-color: #f9f7ed">
<div style="background: #fdfdfd"><u>Java语言</u>: <br />
<span class="lineno" style="color: #008800; font-style: italic">01</span> &lt;%<span style="color: #a61717; background-color: #e3d2d2">@</span> page contentType=<span style="color: #0000ff">"text/html;charset=UTF-8"</span> language=<span style="color: #0000ff">"java"</span>%&gt;<br />
<span class="lineno" style="color: #008800; font-style: italic">02</span> &lt;%<span style="color: #a61717; background-color: #e3d2d2">@</span> page import=<span style="color: #0000ff">"java.io.*"</span> %&gt;<br />
<span class="lineno" style="color: #008800; font-style: italic">03</span> &lt;%<br />
<span class="lineno" style="color: #008800; font-style: italic">04</span> &nbsp;&nbsp;&nbsp;&nbsp; String pathurl = (String)request.<span style="color: #ff0000">getAttribute</span>(<span style="color: #0000ff">"pathurl"</span>);<br />
<span class="lineno special">05</span> &nbsp;&nbsp;&nbsp;&nbsp; <span style="font-weight: bold; color: #000080">if</span>(pathurl !=<span style="font-weight: bold; color: #000080">null</span> &amp;&amp; !pathurl.<span style="color: #ff0000">equals</span>(<span style="color: #0000ff">""</span>)){<br />
<span class="lineno" style="color: #008800; font-style: italic">06</span> &nbsp;&nbsp;&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">07</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String addressReport = application.<span style="color: #ff0000">getRealPath</span>(<span style="color: #0000ff">"/"</span>)+<span style="color: #0000ff">"saveFiles"</span>+File.<span style="color: #ff0000">separator</span>+pathurl;<br />
<span class="lineno" style="color: #008800; font-style: italic">08</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//String addressReport = PageConstraint.XML_PATH_SEND+pathurl;</span><br />
<span class="lineno" style="color: #008800; font-style: italic">09</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addressReport = addressReport.<span style="color: #ff0000">replace</span>(File.<span style="color: #ff0000">separator</span>,File.<span style="color: #ff0000">separator</span>+File.<span style="color: #ff0000">separator</span>);<br />
<span class="lineno special">10</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">11</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//&nbsp;&nbsp; 设置响应头和下载保存的文件名&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">12</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.<span style="color: #ff0000">setContentType</span>(<span style="color: #0000ff">"APPLICATION/OCTET-STREAM;charset=UTF-8"</span>);&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">13</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.<span style="color: #ff0000">setHeader</span>(<span style="color: #0000ff">"Content-Disposition"</span>,&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">14</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff">"attachment;&nbsp;&nbsp; filename=\""</span>&nbsp;&nbsp; +&nbsp;&nbsp; pathurl&nbsp;&nbsp; +&nbsp;&nbsp; <span style="color: #0000ff">"\""</span>);&nbsp; <br />
<span class="lineno special">15</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">16</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//&nbsp;&nbsp; 打开指定文件的流信息&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">17</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.<span style="color: #ff0000">io</span>.<span style="color: #ff0000">FileInputStream</span>&nbsp;&nbsp; fileInputStream&nbsp;&nbsp; =&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">18</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-weight: bold; color: #000080">new</span>&nbsp;&nbsp; java.<span style="color: #ff0000">io</span>.<span style="color: #ff0000">FileInputStream</span>(addressReport);&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">19</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<span class="lineno special">20</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//&nbsp;&nbsp; 写出流信息&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">21</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//int&nbsp;&nbsp; i;&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">22</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//while&nbsp;&nbsp; ((i=fileInputStream.read())&nbsp;&nbsp; !=&nbsp;&nbsp; -1)&nbsp;&nbsp; {&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">23</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//out.write(i);&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">24</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//}</span><br />
<span class="lineno special">25</span> &nbsp;&nbsp;&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">26</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//fileInputStream.close();&nbsp; </span><br />
<span class="lineno" style="color: #008800; font-style: italic">27</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008800; font-style: italic">//out.close(); </span><br />
<span class="lineno" style="color: #008800; font-style: italic">28</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">29</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStreamReader&nbsp;&nbsp; reader=<span style="font-weight: bold; color: #000080">new</span>&nbsp;&nbsp; InputStreamReader(fileInputStream,<span style="color: #0000ff">"UTF-8"</span>);&nbsp; <br />
<span class="lineno special">30</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-weight: bold; color: #000080">int</span>&nbsp;&nbsp; i=<span style="color: #0000ff">0</span>;&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">31</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-weight: bold; color: #000080">while</span>((i=reader.<span style="color: #ff0000">read</span>())!=-<span style="color: #0000ff">1</span>){&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">32</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.<span style="color: #ff0000">write</span>(i);<br />
<span class="lineno" style="color: #008800; font-style: italic">33</span> <br />
<span class="lineno" style="color: #008800; font-style: italic">34</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<span class="lineno special">35</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader.<span style="color: #ff0000">close</span>();&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">36</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileInputStream.<span style="color: #ff0000">close</span>(); <br />
<span class="lineno" style="color: #008800; font-style: italic">37</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.<span style="color: #ff0000">close</span>();&nbsp; <br />
<span class="lineno" style="color: #008800; font-style: italic">38</span> &nbsp;&nbsp;&nbsp; }<br />
<span class="lineno" style="color: #008800; font-style: italic">39</span> &nbsp; %&gt;<br />
</div>
<br />
</div>
<br />
总结：还是对java的流相关只是掌握不清啊，不能熟练运用
<img src ="http://www.blogjava.net/liuspring/aggbug/227186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-09-05 12:49 <a href="http://www.blogjava.net/liuspring/archive/2008/09/05/227186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一点心得</title><link>http://www.blogjava.net/liuspring/archive/2008/09/01/226201.html</link><dc:creator>猪</dc:creator><author>猪</author><pubDate>Mon, 01 Sep 2008 13:38:00 GMT</pubDate><guid>http://www.blogjava.net/liuspring/archive/2008/09/01/226201.html</guid><wfw:comment>http://www.blogjava.net/liuspring/comments/226201.html</wfw:comment><comments>http://www.blogjava.net/liuspring/archive/2008/09/01/226201.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/liuspring/comments/commentRss/226201.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuspring/services/trackbacks/226201.html</trackback:ping><description><![CDATA[<p>忙里偷闲<br />
一直想写一个blog程序<br />
架子打起来了，用struts1.2+hibernate</p>
如何为用户的url做转向，比如<a href="http://www.blogjava.net/liuspring">http://www.blogjava.net/liuspring</a>，怎样转向属于liuspring的文章、留言、评论啊等等，简单的说就是liuspring的页面，<br />
这个问题可把我难住了（功力太浅），于是google上搜开源的blog系统，看他们的源码，首先下的<a href="http://www.open-open.com/open7102.htm" target="_blank">roller</a>，费了好大劲把系统配起来了，运行起来那个高兴，接下来晕了，新版本是<a href="http://struts.apache.org/2.x/" target="_blank">struts2</a>，还没研究过，看了一下好像struts2能很容易实现我要的，可是我用的是1.x啊，接着搜,<a href="http://www.open-open.com/open7702.htm" target="_blank">Pebble</a>,<a href="http://www.open-open.com/open34002.htm" target="_blank">blojsom&nbsp;</a>，<a href="http://www.open-open.com/open134002.htm" target="_blank">DLOG4J</a> ，<a href="http://www.open-open.com/open181302.htm">myblog</a>，都试用了，其中<a href="http://www.open-open.com/open34002.htm" target="_blank">blojsom</a>使用了一个servlet，在里面解析URI，比如请求的地址是/blog/spring/,那么就被解析成/blogView.do?go=spring，以这个地址转向，从而被struts的控制器接收。<br />
这里得用（并且redirectURL必须是相对路径，用完整路径好像还不行，在我这报404错误）<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">httpServletRequest.getRequestDispatcher(redirectURL.toString())<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.forward((ServletRequest)httpServletRequest,&nbsp;(ServletResponse)httpServletResponse);</span></div>
不能用<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">httpServletResponse.sendRedirect(redirectURL.toString());</span></div>
因为这样是使IE重定向，请求的URL也随之改变，这个圈儿就转不下去了。<br />
<br />
又建立了一个过滤器，用以判断session中的用户是否是当前访问的博客的管理员，比如访问/blog/spring/,判断session中保存的用户是否是spring，然后往request,setAttribute中放一个标示，标示是否具有管理员权限，在jsp页面中获取这个参数以决定是否显示后台管理连接。<br />
到这里，最基本，最挠头的问题暂时解决了，感觉肯定有更加方便、更加精妙、更加简单的方法，只是功力还没涉到那么深，哪位博友看到了不胜赐教，接下来还要攻克的，如何产生静态html页面，如何rss...... 
 <img src ="http://www.blogjava.net/liuspring/aggbug/226201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuspring/" target="_blank">猪</a> 2008-09-01 21:38 <a href="http://www.blogjava.net/liuspring/archive/2008/09/01/226201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>