??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩在线播放一区,一区二区三区中文字幕精品精品,久久久久高潮毛片免费全部播放http://www.aygfsteel.com/terry-zj/archive/2006/10/11/74530.htmlTerry的BlogTerry的BlogWed, 11 Oct 2006 05:41:00 GMThttp://www.aygfsteel.com/terry-zj/archive/2006/10/11/74530.htmlhttp://www.aygfsteel.com/terry-zj/comments/74530.htmlhttp://www.aygfsteel.com/terry-zj/archive/2006/10/11/74530.html#Feedback0http://www.aygfsteel.com/terry-zj/comments/commentRss/74530.htmlhttp://www.aygfsteel.com/terry-zj/services/trackbacks/74530.html说明Q?br />一、forward、include由javax.servlet.RequestDispatcher来封?由包容器container提供RequestDispatcher接口的实玎ͼ其中声明如下Q?br />void forward(ServletRequest req,ServletResponse res)
void include(ServeltRequest req,ServletResponse res)
可以通过两种方式得到RequestDispatcher:
1、ServletContext.getRequestDispatcher(String path);
其中q里的path必须开始ؓ(f)"/"Q即q里的path必须相对于context的root.
2、ServeltRequest.getRequestDispatcher(String path)
q里的path可以为相对\?如果path开始ؓ(f)"/",则也认ؓ(f)是从context的root开始的?br />二、Redirect由HttpServletResponse.sendRedirect(String location)来支?br />差别Q?br />三个都可以对用户的requestq行转发Q但是还是有许多的不同,差别最主要集中在如下几个方面:(x)
1、forward与include׃Request范围内的对象,而redirect则不行,卻I(x)如果一个javabean被声明ؓ(f)request范围的话Q则被forward到的资源也可以访问这个javabean,而redriect则不行?br />2、forward与include基本上都是{发到context内部的资源,而redirect可以重定向到外部的资?如:(x) req.sendRedriect("
以上来源
http://www.cn-java.com/target/news.php?news_id=3176

?br />struts-config.xml
<forward name="succ" (tng) path="/pages/dynabean2.jsp" redirect="true"/>
讄redirect="true"?转向目标面时效果和redirect一致?br />

Terry的Blog 2006-10-11 13:41 发表评论
]]>
jsp面上调用Batchhttp://www.aygfsteel.com/terry-zj/archive/2006/10/10/74308.htmlTerry的BlogTerry的BlogTue, 10 Oct 2006 07:53:00 GMThttp://www.aygfsteel.com/terry-zj/archive/2006/10/10/74308.htmlhttp://www.aygfsteel.com/terry-zj/comments/74308.htmlhttp://www.aygfsteel.com/terry-zj/archive/2006/10/10/74308.html#Feedback0http://www.aygfsteel.com/terry-zj/comments/commentRss/74308.htmlhttp://www.aygfsteel.com/terry-zj/services/trackbacks/74308.html有这样一个需求,web服务器是sun Soaris5.8 (tng)原来有一个java写的Batch打包成jar文g由shell调用 (tng)现在要在面上增加一个按钮调用这个shell?br />代码如下Q?br /> (tng)struts中的Action

public  (tng)ActionForward (tng)execute(
 (tng) (tng) (tng) (tng)ActionMapping (tng)mapping,
 (tng) (tng) (tng) (tng)ActionForm (tng)form,
 (tng) (tng) (tng) (tng)HttpServletRequest (tng)request,
 (tng) (tng) (tng) (tng)HttpServletResponse (tng)response)
 (tng) (tng) (tng) (tng)
throws  (tng)Exception (tng){

 (tng) (tng) (tng) (tng)String (tng)command (tng)
=  (tng) " csh (tng)/home/zwfe/shell/zwfecv101.csh " ;
 (tng) (tng) (tng) (tng)Process (tng)child;
 (tng) (tng) (tng) (tng)
try  (tng){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)child (tng)
=  (tng)Runtime.getRuntime().exec(command);

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)BufferedReader (tng)in (tng)
=  (tng) new  (tng)BufferedReader( new  (tng)I(yng)nputStreamReader(child.getInputStream()));
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)line (tng)
=  (tng) "" ;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
while  (tng)((line (tng) =  (tng)in.readLine()) (tng) !=  (tng) null ) (tng){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)System.out.println(line);
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)in.close();

 (tng) (tng) (tng) (tng)} (tng)
catch  (tng)(IOException (tng)e) (tng){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)System.out.println(
" e.getMessage() (tng)= (tng) "  (tng) +  (tng)e.getMessage());
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)e.printStackTrace();
 (tng) (tng) (tng) (tng)}

 (tng) (tng) (tng) (tng)BatchDateDAO (tng)dao (tng)
=  (tng) new  (tng)BatchDateDAO();
 (tng) (tng) (tng) (tng)Zwfecw002Form (tng)zwfe002form (tng)
=  (tng)(Zwfecw002Form) (tng)form;
 (tng) (tng) (tng) (tng)zwfe002form.setBatchDate(dao.batchDate());

 (tng) (tng) (tng) (tng)
return  (tng)mapping.findForward( " screen.zwfecw002 " );
}

q里应该注意child (tng)= (tng)Runtime.getRuntime().exec(command);后需要检查这个Process (tng)是否已经执行完毕Q否则当Action执行完返回后Process (tng)会(x)中断?br />


Terry的Blog 2006-10-10 15:53 发表评论
]]>
Ruby中文?/title><link>http://www.aygfsteel.com/terry-zj/archive/2006/03/15/35464.html</link><dc:creator>Terry的Blog</dc:creator><author>Terry的Blog</author><pubDate>Wed, 15 Mar 2006 09:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/terry-zj/archive/2006/03/15/35464.html</guid><wfw:comment>http://www.aygfsteel.com/terry-zj/comments/35464.html</wfw:comment><comments>http://www.aygfsteel.com/terry-zj/archive/2006/03/15/35464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/terry-zj/comments/commentRss/35464.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/terry-zj/services/trackbacks/35464.html</trackback:ping><description><![CDATA[<A >http://rubycn.ce-lab.net/</A><BR><BR><A >http://www.railscn.com/</A><img src ="http://www.aygfsteel.com/terry-zj/aggbug/35464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/terry-zj/" target="_blank">Terry的Blog</a> 2006-03-15 17:55 <a href="http://www.aygfsteel.com/terry-zj/archive/2006/03/15/35464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1.1中的Lazy ActionFormhttp://www.aygfsteel.com/terry-zj/archive/2006/03/01/33037.htmlTerry的BlogTerry的BlogWed, 01 Mar 2006 09:27:00 GMThttp://www.aygfsteel.com/terry-zj/archive/2006/03/01/33037.htmlhttp://www.aygfsteel.com/terry-zj/comments/33037.htmlhttp://www.aygfsteel.com/terry-zj/archive/2006/03/01/33037.html#Feedback0http://www.aygfsteel.com/terry-zj/comments/commentRss/33037.htmlhttp://www.aygfsteel.com/terry-zj/services/trackbacks/33037.html以前我{载过一“介lstruts的新Ҏ(gu)?Lazy ActionForm?br />http://www.aygfsteel.com/terry-zj/archive/2005/12/09/23090.html
q篇文章里面介绍的方法大大较?yu)?jin)ActionForm中的~码工作Q但是这个Lazy ActionForm在struts1.1的时候还没有。如果既要用struts1.1又想Lazy一下那Q(实际上struts1.1q是目前使用比较多的版本Q?br />其实量的代码就可以让普通的Form接近Lazy ActionForm的效果?br /> (tng)jsp中写Q?br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) <table align="center" border="0" width="300">
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <tr>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <td align="right" width="35%">
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 用户ID:
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) </td>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <td width="65%">
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <html:text property="data(username)" size="20" maxlength="20" />
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) </td>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) </tr>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <tr>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <td align="right">
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 密码:
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) </td>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <td>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <html:text property="data(password)" size="20" maxlength="10" />
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) </td>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) </tr>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <tr>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <td>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) &nbsp;&nbsp;&nbsp;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) </td>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <td>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <html:button property="login" value="认" onclick="submitForm();" />
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) &nbsp;&nbsp;&nbsp;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <html:reset value="清空" />
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) </td>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) </tr>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) </table>

LoginAction中写Q?br />public ActionForward doAction(ActionMapping mapping,
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) RequestContext req) {
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) String forward = "menu";
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) BaseForm frm = (BaseForm)req.getForm();
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) System.out.println(frm.get("username"));
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) System.out.println(frm.get("password"));
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) // (tng)...... (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return mapping.findForward(forward);
}

BaseForm中写Q?br />public class BaseForm extends ActionForm {
 (tng) (tng) (tng) (tng)private HashMap data = new HashMap();

 (tng) (tng) (tng) public HashMap getData() {
 (tng) (tng) (tng) (tng)  (tng) (tng) (tng) return data;
 (tng) (tng) (tng) }

 (tng) (tng) (tng) public void setData(HashMap data) {
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.data = data;
 (tng) (tng) (tng) }

 (tng) (tng) (tng) public String get(String key) {
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return (String) data.get(key);
 (tng) (tng) (tng) }

 (tng) (tng) (tng) public void set(String key, Object value) {
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) data.put(key, value);
 (tng) (tng) (tng) }
}

struts-config.xml中写Q?br /> (tng)<form-beans>
 (tng) (tng) (tng) <form-bean (tng) (tng) (tng) (tng) (tng) (tng) name="baseform" (tng) (tng) (tng) (tng) type="com.web.system.base.BaseForm"/>
 (tng) </form-beans>



Terry的Blog 2006-03-01 17:27 发表评论
]]>
session功能实现原理(转蝲)http://www.aygfsteel.com/terry-zj/archive/2005/12/30/26078.htmlTerry的BlogTerry的BlogFri, 30 Dec 2005 08:11:00 GMThttp://www.aygfsteel.com/terry-zj/archive/2005/12/30/26078.htmlhttp://www.aygfsteel.com/terry-zj/comments/26078.htmlhttp://www.aygfsteel.com/terry-zj/archive/2005/12/30/26078.html#Feedback1http://www.aygfsteel.com/terry-zj/comments/commentRss/26078.htmlhttp://www.aygfsteel.com/terry-zj/services/trackbacks/26078.htmlHTTP协议Q?A >http://www.w3.org/Protocols/Q是“一ơ性单向”协议?
服务端不能主动连接客L(fng)Q只能被动等待ƈ{复客户端请求。客L(fng)q接服务端,发出一个HTTP RequestQ服务端处理hQƈ且返回一个HTTP Responsel客L(fng)Q本ơHTTP Request-Response Cyclel束?
我们看到QHTTP协议本nq不能支持服务端保存客户端的状态信息。于是,W(xu)eb Server中引入了(jin)session的概念,用来保存客户端的状态信息?
q里用一个Ş象的比喻来解释session的工作方式。假设W(wng)eb Server是一个商场的存包处,HTTP Request是一个顾客,W一ơ来到存包处Q管理员把顾客的物品存放在某一个柜子里面(q个柜子q当于SessionQ,然后把一个号码牌交给q个֮Q作为取包凭证(q个L(fng)牌就是Session IDQ。顾客(HTTP RequestQ下一ơ来的时候,p把号码牌QSession IDQ交l存包处QWeb ServerQ的理员。管理员Ҏ(gu)L(fng)牌(Session IDQ找到相应的柜子QSessionQ,Ҏ(gu)֮QHTTP RequestQ的hQW(xu)eb Server可以取出、更换、添加柜子(SessionQ中的物品,W(xu)eb Server也可以让֮QHTTP RequestQ的L(fng)牌和L(fng)牌对应的柜子QSessionQ失效。顾客(HTTP RequestQ的忘性很大,理员在֮回去的时候(HTTP ResponseQ都要重新提醒顾客记住自qL(fng)牌(Session IDQ。这P֮QHTTP RequestQ下ơ来的时候,又带着L(fng)牌回来了(jin)?
我们可以看到QSession ID实际上是在客L(fng)和服务端之间通过HTTP Request和HTTP Response传来传去的?

我们看到Q号码牌QSession IDQ必d含在HTTP Request里面。关于HTTP Request的具体格式,请参见HTTP协议Q?A >http://www.w3.org/Protocols/Q。这里只做一个简单的介绍?
在Java Web ServerQ即Servlet/JSP ServerQ中QSession ID用jsessionid表示Q请参见Servlet规范Q?
HTTP Request一般由3部分l成Q?
Q?QRequest Line
q一行由HTTP MethodQ如GET或POSTQ、URL、和HTTP版本L(fng)成?
例如QGET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
GET http://www.google.com/search?q=Tomcat HTTP/1.1
POST http://www.google.com/search HTTP/1.1
GET http://www.somsite.com/menu.do;jsessionid=1001 HTTP/1.1

Q?QRequest Headers
q部分定义了(jin)一些重要的头部信息Q如Q浏览器的种c,语言Q类型。Request Headers中还可以包括Cookie的定义。例如:(x)
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Accept-Language: en-us
Cookie: jsessionid=1001

Q?QMessage Body
如果HTTP Method是GETQ那么Message Body为空?
如果HTTP Method是POSTQ说明这个HTTP Request是submit一个HTML Form的结果,
那么Message Body为HTML Form里面定义的Input属性。例如,
user=guest
password=guest
jsessionid=1001
LQ如果把HTML Form元素的Method属性改为GET。那么,Message Body为空Q所有的Input属性都?x)加在URL的后面。你在浏览器的URL地址栏中?x)看到这些属性,cM?
http://www.somesite/login.do?user=guest&password=guest&jsessionid=1001

从理Z来说Q这3个部分(Request URLQCookie Header, Message BodyQ都可以用来存放Session ID。由于Message BodyҎ(gu)必须需要一个包含Session ID的HTML FormQ所以这U方法不通用?
一般用来实现Session的方法有两种Q?
Q?QURL重写?
Web Server在返回Response的时候,(g)查页面中所有的URLQ包括所有的q接Q和HTML Form的Action属性,在这些URL后面加上?jsessionid=XXX”?
下一ơ,用户讉Kq个面中的URL。jsessionid׃(x)传回到Web Server?
Q?QCookie?
如果客户端支持CookieQW(xu)eb Server在返回Response的时候,在Response的Header部分Q加入一个“set-cookie: jsessionid=XXXX”header属性,把jsessionid攑֜Cookie里传到客L(fng)?
客户端会(x)把Cookie存放在本地文仉Q下一ơ访问Web Server的时候,再把Cookie的信息放到HTTP Request的“Cookie”header属性里面,q样jsessionid随着HTTP Requestq回lWeb Server?

我们来看Tomcat5的源代码如何支持jsessionid?
org.apache.coyote.tomcat5.CoyoteResponsecȝtoEncoded()Ҏ(gu)支持URL重写?
String toEncoded(String url, String sessionId) {
?
StringBuffer sb = new StringBuffer(path);
if( sb.length() > 0 ) { // jsessionid can't be first.
sb.append(";jsessionid=");
sb.append(sessionId);
}
sb.append(anchor);
sb.append(query);
return (sb.toString());
}

我们来看org.apache.coyote.tomcat5.CoyoteRequest的两个方法configureSessionCookie()
doGetSession()用Cookie支持jsessionid.

/**
* Configures the given JSESSIONID cookie.
*
* @param cookie The JSESSIONID cookie to be configured
*/
protected void configureSessionCookie(Cookie cookie) {
?
}

HttpSession doGetSession(boolean create){
?
// Creating a new session cookie based on that session
if ((session != null) && (getContext() != null)
&& getContext().getCookies()) {
Cookie cookie = new Cookie(Globals.SESSION_COOKIE_NAME,
session.getId());
configureSessionCookie(cookie);
((HttpServletResponse) response).addCookie(cookie);
}
?
}

Session的典型应用是存放用户的Login信息Q如用户名,密码Q权限角色等信息Q应用程序(如Email服务、网上银行等pȝQ根据这些信息进行n份验证和权限验证



Terry的Blog 2005-12-30 16:11 发表评论
]]>
介绍struts的新Ҏ(gu)?Lazy ActionFormQ{载)(j)http://www.aygfsteel.com/terry-zj/archive/2005/12/09/23090.htmlTerry的BlogTerry的BlogFri, 09 Dec 2005 02:43:00 GMThttp://www.aygfsteel.com/terry-zj/archive/2005/12/09/23090.htmlhttp://www.aygfsteel.com/terry-zj/comments/23090.htmlhttp://www.aygfsteel.com/terry-zj/archive/2005/12/09/23090.html#Feedback0http://www.aygfsteel.com/terry-zj/comments/commentRss/23090.htmlhttp://www.aygfsteel.com/terry-zj/services/trackbacks/23090.html STRUTS?ActionForm到现在ؓ(f)?出现?jin)最三U方?/span>: 普通的,动态的和懒?

所以你在你自已的开发中,可以有很多选择,如果你安全第一,可以用普通的.如果你更喜欢XML,则用动态的.

如果你很?那就用Lazy ActionForm. (tng) available in Version 1.2.6 onwards

STRUTS提供的这三种ActionForm方式,要实际应用中你只要选择一U就可以?

下面说说Lazy ActionForm: (tng)

如果你喜ƢSTRUTS的强大的功能的特?比如这个ActionForm有多U选择),又喜Ƣ快? Lazy ActionForm对你来说是一个好消息. q个有点cM于WW2中值得U道的一个特?可以减少~写ActionForm的麻?(STRUTS正在把WW2中好的东襉K吸收q来?难怪这两个东西以后?x)合qؓ(f)STRUTS IT).

CZ代码如下:

struts-config.xml配置
<struts-config> (tng)

 (tng) <form-beans> (tng)
 (tng) (tng) (tng) (tng) (tng)<form-bean name="lazyForm" type="org.apache.struts.validator.LazyValidatorForm"/> (tng)
 (tng) (tng)</form-beans> (tng)

 (tng) (tng)<action-mappings> (tng)
 (tng)  (tng) (tng)<action path="/myActionPath" type="myPackage.MyAction" name="lazyForm" validate="true"/> (tng)
 (tng) (tng)</action-mappings>

</struts-config>
JSP|页
<html:form action="/myActionPath"> (tng)

 (tng) <h2>Simple Property Example</h2>
 (tng)  (tng)  (tng)  (tng)  (tng)
 (tng)  (tng)  (tng)  (tng)  (tng) Customer Number: <html:text property="custNo"/>
 (tng)  (tng)  (tng)  (tng)  (tng) Customer Name: (tng)  (tng)<html:text property="custName"/> (tng)

 (tng) <h2>Mapped Property Example</h2>
 (tng)  (tng)  (tng)  (tng)  (tng)
 (tng)  (tng)  (tng)  (tng)  (tng) Street: (tng) <html:text property="address(street)"/>
 (tng)  (tng)  (tng)  (tng)  (tng) Town: (tng)  (tng) <html:text property="address(town)"/>
 (tng)  (tng)  (tng)  (tng)  (tng) State: (tng)  (tng)<html:text property="address(state)"/>
 (tng)  (tng)  (tng)  (tng)  (tng) Country: <html:text property="address(country)"/> (tng)

 (tng) <h2>Indexed Property Example</h2> (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
 (tng) <logic:iterate id="products" property="products"> (tng)
 (tng) (tng) (tng) (tng)Product Code:<html:text name="products" property="code" indexed="true"/> (tng)
 (tng) (tng) (tng) (tng)Product Description:<html:text name="products" property="description" indexed="true"/> (tng)
 (tng) (tng) (tng) (tng)Product Price:<html:text name="products" property="price" (tng)indexed="true"/> (tng)
 (tng) </logic:iterate>

</html:form>
action调用
java代码: (tng)
public ActionForward execute(ActionMapping mapping,
 (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)ActionForm form,
 (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)HttpServeletRequest request,
 (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng)HttpServletResponse response)throwsException{ (tng)
 (tng) (tng) (tng) (tng)// Cast form to DynaBean (tng)
 (tng) (tng) (tng) (tng)DynaBean dynaForm = (DynaBean)form; (tng)

 (tng) (tng) (tng) (tng)// Use the DynaBean (tng)
 (tng) (tng) (tng) (tng)String custNo = (String)dynaForm.get("custNo"); (tng)  (tng)// simple (tng)
 (tng) (tng) (tng) (tng)Map address (tng)  (tng)= (Map)dynaForm.get("address"); (tng)  (tng)  (tng)// mapped (tng)
 (tng) (tng) (tng) (tng)List products = (List)dynaForm.get("products"); (tng)  (tng)// indexed (tng) (tng)
 (tng) (tng) (tng) (tng)//... etc
}
在ACTION?你可以?BeanUtils 1.7.0的特?把dynaForm一ơ性拷贝到HIBERNATE的POJO中去!

转蝲地址Qhttp://forum.javaeye.com/viewtopic.php?t=17441


Terry的Blog 2005-12-09 10:43 发表评论
]]>
Java EE和dotnet的企业应用前?转蝲)http://www.aygfsteel.com/terry-zj/archive/2005/11/20/20672.htmlTerry的BlogTerry的BlogSun, 20 Nov 2005 10:15:00 GMThttp://www.aygfsteel.com/terry-zj/archive/2005/11/20/20672.htmlhttp://www.aygfsteel.com/terry-zj/comments/20672.htmlhttp://www.aygfsteel.com/terry-zj/archive/2005/11/20/20672.html#Feedback1http://www.aygfsteel.com/terry-zj/comments/commentRss/20672.htmlhttp://www.aygfsteel.com/terry-zj/services/trackbacks/20672.htmlJava EE和dotnet的企业应用前?BR>1、语a机制的比?

基本上大部分人都认同C#2.0的语a机制上要比Java5.0更加灉|Q功能更加强大。从开发h员的使用角度来看QC#更友好一些?

但是要看到的Q语a机制的优势ƈ不构成C#能够在企业应用战胜Java EE的理由。这U优势仅仅对部分开发h员有吸引力而已?

2、IDE的比?

Visual Studio和Eclipse是两U不同定位的IDE。VS是初学者友好的QEclipse是高手友好的。VS通过友好的菜单,对话框和向导让初学者可以快速开发出来像模像L(fng)应用Q但是对于大型项目的源代码管理,重构支持{高手非帔R要的功能上缺q很厉実?

我还没有接触Eclipse之前Q也很推崇VSQ用?jin)Eclipse以后Q观念完全{变(sh)(jin)。对于熟l的高手来说QEclipse比VS更具备吸引力。当然IDE也不是企业应用战场的册因素?

3、多语言支持

dotnetL(fng)支持多语aQ但是我一直视为噱_(d)他支持的多语a无非是基本语法不同而已Q但是支持的cd完全一栗大安知道Q基本语法的学习(fn)我半天就可以掌握Q关键是cd的掌握需要很长时间的学习(fn)和实战。我用C#做了(jin)半年目的话Q你让我改VB.netQ我也就是半天的旉而已。再者,没有Z(x)愿意一个项目中Q每个h都用不用的语ad作,那你后期怎么l护Q?

4、Microsoft是不可战胜的吗?

有很多hZ历史l验的角度的出结论,MS是不可战胜的Q最lMS?x)一一消灭竞争Ҏ(gu)。这U结论基本上是错误的QMicrosoft在很多年前就x(chng)胜OracleQ现在呢QMicrosoft一直觊觎ERP?jng)场Q但是现在呢Q更不要说在搜烦(ch)?jng)场上面临着Google的严L(xi)战?


抛开q些表明的不起作用的因素Q探I一下关键的因素Q?

1、从客户角度来看Q操作系l的选择很重?

q是相当重要的因素!dotnet只能够在Windows Server上面良好的运?mono不能UL完整的dotnet企业环境)Q而Java可以在绝大多数OS上面q行Q包括了(jin)传统的商业UnixQLinux/FreeBSDQMac OSQW(xu)indows。有一个现象值得注意QLinux的成长率q远过Windows成长率。目前高端行业基本不可能用Windows ServerQdotnet基本上没有指望。所以目前dotnet只能够被应用在中低端?jng)场?


2、从独立软g开发商角度来看Q跨q_能力很重要,成本也很重要

作ؓ(f)软g开发商Q你不希望自q产品无法在客L(fng)Unix/LinuxL上面跑吧Q对于中型应用Q你可以通过Tomcat/JBoss/MySQL的搭配降低成本,但是你不能要求客戯买全套的Windows Enterprise ServerQLinceseQSQL Server lincese吧?

3、从目开发商角度来看Q快速开发dotnet有优?

对于单的目Q几个初步掌握dotnet的开发h员就可以q速搞定一个项目,开发成本,开发周期都有保障。如果客戯求升U版本,再找几个人重新开发一套出来也完全可以接受?

4、从开发h员角度来看,各有优势

不可否认dotnet在某些技术方面具备领先的优势。单U从技术角度而言Qdotnet和Java基本上是互相渗透,你追我赶的态势。在争取开发h员的斚w来说Q也各有优势Qdotnet以易用性吸引开发h员;Java以自由性吸引开发h员?

M而言Q判断JavaQdotnet在企业应用市(jng)场的较量Q不能够单单从开发h员角度来看问题,单纯从开发h员角度来看,得不出有意义的结论,必须站高?sh)个层面,从整个行业各个参与的角色来评判。我个h的观Ҏ(gu)Q五q之内,Javaq是L?


可以参考我另外一个发aQ?

http://forum.javaeye.com/viewtopic.php?t=14186

Terry的Blog 2005-11-20 18:15 发表评论
]]>
整理一下技术\U?转蝲)http://www.aygfsteel.com/terry-zj/archive/2005/11/20/20667.htmlTerry的BlogTerry的BlogSun, 20 Nov 2005 08:54:00 GMThttp://www.aygfsteel.com/terry-zj/archive/2005/11/20/20667.htmlhttp://www.aygfsteel.com/terry-zj/comments/20667.htmlhttp://www.aygfsteel.com/terry-zj/archive/2005/11/20/20667.html#Feedback0http://www.aygfsteel.com/terry-zj/comments/commentRss/20667.htmlhttp://www.aygfsteel.com/terry-zj/services/trackbacks/20667.html一、Y件开发技?

1Q服务器?

在最q?q内QJavaq是LQ不光是因ؓ(f)当前的普?qing)程度和遗留pȝ问题Q而且除Microsoft几乎所有大公司都投资到Java上面的原因,此外开源也是一股无法忽略的力量Q除?jin)Java斚w的开源框架在推动JavaQ也有Linux在带动java企业应用在普?qing)(别忘记dotnet只能?Windows Server上面q行Q?

dotnet有自q优势Q但是在五年内无法和Java取得均势Q不光是因ؓ(f)Java普及(qing)带来的优势,也不光因为开源界对java的推动,也不光因为其他大公司在java上面的投资,而是很多公司的行业性质军_?jin)dotnet的出局Q例如电(sh)信行业,金融行业Q电(sh)子政务行业等{,是根本没有可能采?dotnet的?

Python和Ruby不上后P但是很有竞争实力Q不q基于上面的原因Q仍然不能成Z?

在Java服务器端技术中Q清晰的分ؓ(f)两条路线Q高端的商业路线Q这条\U是EJB3QJ2EE5.0Q低端的开源\U,q条路线是HibernateQ?Spring。这两条路线也有重叠的地方,例如开源的Struts几乎成ؓ(f)J2EE Web层的标准Q开源的Hibernate奠定?SPAN style="COLOR: #ffa34f">EJB3的基。但是划分\U不是基于技术上的区别,而是Z商业q作上的区别。注重技术支持和商业服务的公怼(x)选择前者,注重成本控制和选择自由的公怼(x)选择后者?

商业路线的技术方案是Q?SPAN style="COLOR: #ffa34f">EJB3QStrutsQ?
开源\U的技术方案是QSpringQHibernateQStruts/Webwork

Struts是一个很成功的开源框Ӟ它的C短期内还无法动摇QJavaEye有一命,是动摇Struts在Java Web领域的地位,把它赶下王Q把Webwork扶上位!

商业的Web层技术,JSTL是一个不错的东西Q但是和灉|的模板语a如FreeMarker相比Q却有很大的差距。JSF基本上是一个没有前途的东西。商业Web层技术因Z直没有出现好的应用,q样也导致了(jin)Struts的上位?

服务器端业务层和持久层框Ӟ我非常看?SPAN style="COLOR: #ffa34f">EJB3Q原因也不用多谈?jin),从商业上来说Q需要这样一个东西,跨国公司们也需要这样一个品来卖,来取代糟p的 EJB2。开源的Ҏ(gu)里面QSpringQHibenrate是一个很好的商业Ҏ(gu)的开源替代,他们不存在很直接的竞争,而是一个互补的关系。这里比较尴的反而是JDOQJDO是商业品(目前没有好的开源实玎ͼ(j)Q造成开源应用不?x)对它感兴趣QJDO没有一个像EJB容器那样的脱环境,造成商业Ҏ(gu)对它不感兴趣。不q有?jin)JDOQ我觉得是对EJB3Q对Hibernate形成一个良好的竞争环境Q这一Ҏ(gu)非常有利的?

2Q客L(fng)技?

准确的说是RIA应用。虽然我前面对XAMLq行?jin)正面的评h(hun)Q但是我认ؓ(f)我前面有些结论给错了(jin)。经q这D|_(d)我觉得,XAMLx(chng)在多q之后,也未必能够成Z个非常成功的解决Ҏ(gu)。道理很二:(x)

1、XAML?x)带来比ActiveX更严重的安全性问题?
XAML本质上就是一个本地应用程序,虽然L(fng)可以在IE览器里面运行,但IE是一个皮而已QXAML应用具备Ҏ(gu)地资源完全的讉K能力Q就IE限制也没有用QIE限制׃失功能,那样的话Q功能ƈ不会(x)比Javascript来得更多Q不限制的话Q就为所Ʋؓ(f)?jin)?j)Q因此只要IE具备?jin)运行XAML的能力,黑客可以非常轻易的通过IEq行入RQ这仅仅需要引导用户在不知不觉中访问一个恶意的|页搞定了(jin)Q用户必面临选择Q要么禁止IE对XAML的运行能力,要么接受随时被攻ȝ危险?

2、XAML应用本质上也是RIA应用Q因此必进行大量的RPC调用
当前XAML采用XML Web Servicesq行通讯Q这是一U低效的RPC。当前的XAML案例中ƈ没有注意到RPC领域Q实际上Ҏ(gu)我现在做RIA的体验来_(d)RPCl对不是一个简单的事情Q要考虑的问题非常多?

从当前的阶段来说Q最实际可用的方案有两个Q?

1、AJAX
实际上就是基于XMLHTTP的JS异步交互Q这个东西已l出现很多年?jin),最q随着Google应用和Sun Blueprint的推出开始火热。我原来对这个东西持否定态度Q但是后来{变(sh)(jin)。我原来否定态度的一个前提就是:(x)XMLHTTP~Z成熟的组件库Q但是没有想到的是,现在XMLHTTP从去q下半年开始,如雨后春W般冒出来。AJAX应用最大的好处是充分利用现有资源Q我认ؓ(f)应成为RIA应用的首选?

2、Flash
Flash的优势也很明显,强大的AS支持Q强大的lg可视化设计,强大的交互能力和很炫的用户体验,q且Flash Remoting也已l非常成熟了(jin)。Flash的缺点就是Flash虽然嵌入|页Q但是和|页没有数据交互能力QFlash另一个缺点就是不适合处理大量文本内容QHTML最适合Q。现在有些h开始滥用Flash?jin)?

因此比较好的方式可能是两U؜用,一般不q度复杂的交互交lAJAXQ非常复杂,甚至需要托拽操作的Q交lFlash?

ȝ一下:(x)

软g开发领域服务器端技术Java是主,两个技术\U,一个是EJB3Q一个是SpringQHibernateQ此外iBATIS也有一席之圎ͼ客户端技术就是AJAX和Flash?

二、数据库技?

基本上格局不会(x)发生多大变化QOracleq是高高在上QSQL Serverq一步蚕食NTq_其他数据库的领地。开源方面,MySQL一枝独UQ但是开源数据库在很多方面还是和商业数据库有无法拉近的巨大差距。这也得商业数据库的地位不可替代。我?x)比较关注OracleQMySQLq两个数据库。面向对象数据库仍然不会(x)有什么v艌Ӏ?

三、桌面编E技?

我还是相信一点,对于桌面应用来说Q本C码的位置永远无法被取代,所以我总觉得XAML那样的东西效率实在很成问题。Longhorn要像成熟Q也不是W一个版本就可以辑ֈ的。当前桌面应用开发技术,q是首推DelphiQ不q我觉得Python是后起之UQ非常有可能在未来取代Delphi?BR>
初探在下一?Windows 中编写和部v应用E序
http://www.microsoft.com/china/MSDN/library/windev/longhorn/DevelopAppLonghorn.mspx

首先Q以Microsoft公司的实力和W(xu)indows操作pȝ的占有率来说QLonghornq早?x)被普?qing)Q而XAML的开发方式也有可能普?qing)的。记得当初WindowsXP刚出来的时候,因ؓ(f)资源占用率和新的Ȁzd度招致一片骂壎ͼ但是慢慢的,现在也都接受?jin)下来。由此可以推断,Longhorn以其更加丰富的桌面功能和׃h的外观,?x)在来成?f)L?

但是Longhorn什么时候才?x)全面普及(qing),q是很值得琢磨的问题。WindowsXP?001q推出的Q在随后的几q_(d)Microsoft采用?jin)一些商业手D|q用户升Q例如企囑֏消Windows98的技术支持,不再提供WindowsNT技术支持,不再销?WindowsNT/Windows98Q将Windows2000保持在一个比较高的售L(fng)同时Q对WindowsXP推出优惠hQ让 WindowsXP的售价低于Windows2000{等手段。但是直到现在,W(xu)indows2000仍然占据?jin)非帔R的䆾额,据我个h的观察是?WindowsXP略高。按照这U情冉|推断QLonghorn要普?qing),恐怕难度更大,非常多的用户现在仍然是Windows2000的死忠派Q?WindowsXP推广?jin)四q还未能过Windows2000Q那么LonghornI竟要几q才能超qWindowsXP呢?我估计四q以上是L(fng)的?

XAML应用E序不同以往(xin)Q它只能跑在Longhorn上面Q甚x(chng)Java和dotnet要求更严|后者仅仅下载安装一个运行环境就可以?jin),但是前者要求你必须更新操作pȝ。XAML在IE览器中q行虽然肯定是下一代RIA的主,但是不可忽视的问题是Q只要Longhorn没有d淘汰 Windows2000/XPQY件开发商和网站开发商׃敢大面积采用XAML。而根据我的观察,现在企业中,W(xu)indows98仍有部分市(jng)Z额。因此Longhorn必须要等待到d的,毫不D留的淘汰Windows98QW(xu)indows2000QW(xu)indowsXP之后Q才?x)全面普及(qing),而在此之前,不得不经历一个O长的q渡期?

好像现在,假设你开发桌面应用程序,你敢只针对WindowsXP开发吗Q而彻底不支持98?000吗?我想Q没有哪个Y件开发商敢这样做。除?Windows2000几乎被彻底淘C(jin)Q你才敢q样做,但是WindowsXP已经推出四年?jin),q没有Windows2000占用率高Q哪全面淘汰I竟要几q呢Q再看看现在dotnet winforms应用Q推Z已经五年旉?jin),但是到现在仍然没有普及(qing)开来,Ҏ(gu)的原因就是Windows2000/WindowsXP没有预装 dotnet framework。仅仅是需要打包安装一个运行环境就使得winforms五年都推q不?jin),更何况要求你升操作pȝ呢?

我个人的估计是,假设2006qLonghorn如期上市(jng)Q那么将需?-9q时间来d淘汰Windows2000/WindowsXP?Longhorm上面XAML应用的初步普?qing)也臛_需?-5q时间以后才?x)有软g开发商大量dQ想向dotnet?000q开始宣传和推广的,?2004q开始普?qing),今年和明q才?x)全面普?。因此,ZXAML应用的普?qing)可能是?010q以后!上面的估计中q没有包括MacOS 和Linux在桌面会(x)否有什么表现?

先说说服务器端吧Q?

从可预见的未来来看,服务器和客户端TCP通讯的主方式一定是HTTP协议Q即旉讯软g走UDP端口Q不在讨_(d)(j)。在ZHTTP协议之上Q又分ؓ(f)两类Q一cLSOAP协议Q异构系l支持良好,但是性能很差Q目前Microsoft很喜Ƣ用q种方式Q一cL轻量U二q制协议Q例如Flash?AMF协议QResin的Hessian协议。值得一提的是,不管哪种方式Q他们都支持异构的系l,所以完全可用在客户端采用dotnetQ在服务器端采用Java或者Python。因此,XAML的流行不?x)对服务器端技术生致命的影响Q肯定会(x)提高dotnet的服务器的市(jng)Z额)(j)。所以我们可用抛开客户端媄(jing)响,单独来看服务器端技术:(x)

1、Java
Java是当前服务器端技术当之无愧的王者,在未来五q内Q也不会(x)有Q何动摇(受到dotnet和python的媄(jing)响,?jng)场份额会(x)下降一些)(j)。Java特别有利的一Ҏ(gu)Q现在有太多的现存系l基于JavaQ这些系l都不会(x)Lq移到其他^C。另外还有一个决定因素是除了(jin)Microsoft之外的几乎全?IT大公叔R在Java斚w的投资巨大,攑ּJava对他们来说也意味着沉重的打击,甚至毁灭性的打击。这些公司可以列很长很长QIBMQHPQ?OracleQSAPQSunQBEAQMacromedia{等?

2、dotnet
׃Microsoft的媄(jing)响力Qdotnet?x)成Zؓ(f)仅次于Java的第二大服务器端技术,但是Microsoft有一个隐忧,是Linux操作pȝ在服务器端的高速成ѝ虽然现在Linux在整个服务器端市(jng)场的?gu)量只?3%左右Q但是成长率惊hQ根据我看到的资料显C,?008q_(d)占?25%以上的市(jng)Z额。考虑到很多公司是自己安装LinuxQ因此不?x)被g服务器厂商统计进来,因此Linux的服务器端的?jng)场份额应该?5%高(sh)些。ƈ且现在主要的服务器厂商都对Linux有非常巨大的投入和支持,q些公司包括IBMQHPQDellQ只有Sun不支持)(j)Q因此Linux在未来会(x)对Windows在服务器端的?jng)场构成最严重的威胁?

不要忘记dotnet只能在Windowsq_上面跑,虽然有monoQ但是你不可能移植MTSQCOM+QSQL Server etc。所以只要Linux在服务器?jng)场对Windows构成持箋(hu)的威胁,dotnet׃可能过JavaQJava的地位还是稳E的老大。从某种E度上来_(d)Java的命q是和Linux联系在一L(fng)Q只要Linux在服务器端不输于WindowsQJavaqE_制dotnet?

BTW:从未来来看,Linux和W(xu)indows?x)在低端和中端服务器市(jng)场成?f)主要竞争Ҏ(gu)Q由于各自都有其不可替代性,所以双斚w不可能彻底消灭对方,最大的可能性是Linux和W(xu)indowsq_?jng)场Q或者Windows?jng)场份额略高(sh)炏V?

3、Python
我个为Python?x)成长?f)W三大服务器端技术,Python成长于开源,但是又有商业公司来商业运作,q且背后q有大公司的支持Q在Ƨ洲普及(qing)的非常好。当然最重要的原因是我觉得Python在技术上非常先进Qƈ且技术发展方向上比较l一Q不?x)出现Java那种吉|的事情?

4、PHP
PHPq东西是不错QYahoo也在用,IBM现在也对他感兴趣Q但是我q是要说PHP没有太广阔的前途,原因很简单,PHP没有服务端中间gQ例?Java有App ServerQdotnet有IIS/MTSQPython有ZopeQ但是PHP他就是一个脚本,没有自己的中间g是致命问题。Yahoo用PHP有其特定的原因,主要是从原先自己的技术迁UdPHP很方便,而IBM支持PHPQ显焉之意不在酒QIBM意不在推qPHPQ而在于争取到那些使用 PHP的商业大客户们,向他们卖服务?

BTWQ感觉欧z用Python/PHP的很多,g开源在Ƨ洲非常深入人心(j)?

从服务器端技术来_(d)Javaq是我们最需要下功夫d?fn)和掌握的,此外Q我?x)比较們֐于钻研和应用PythonQ而不是dotnet。原因也很简单,跟随Micorsoft的技术会(x)很辛苦,Microsoft产生的新概念多,他L?x)猛的推出n多种技术,然后让他们在?jng)场上自q存,最后根据市(jng)场反馈,无情的抛弃某些东西,大力推进有市(jng)场前景的东西Q这L(fng)例子太多?jin),举不胜D?jin)。我的感觉就是这U方式会(x)让Microsftl过?jng)场试在技术竞争中{选最优秀的技术,但是对于Microsoft技术的跟随者来_(d)未免有点太不公^Q整天吭哧吭哧被Microsoft拿来当免费的试验品来用。我特别不理解的是MSDN宇宙版,MicrosoftL把无Ih的文档灌给你,让你永远学不完,但实际上我真的不需要那么多概念Q我只需要能够很好的完成我工作的技术,q且q个技术可以持l的完善好?jin)。而不是今天给我这样一个东西,明天灌给我无IL(fng)文档Q后天当我用手以后Q又告诉我这东西作废?jin),你给我重新学习(fn)新东西Q然后又是无IL(fng)文档QM很恼火?

所以就是:(x)重点学习(fn)JavaQ有旉d?fn)PythonQ保持对dotnet的关注即可?


客户端:(x)

前面说了(jin)那么多XAML的东西,都是和这有关Q七q以后肯定是XAML的天下,但是五到七年之内q(sh)是:(x)

1、Java
Java在客L(fng)真的是扶不v的阿斗,q都怪Sun。Sun造就?jin)Java的成功,又一手毁?jin)Java在客L(fng)的市(jng)场。那些个Swing和SWT的死忠团也不要和我争什么,我也懒得和你们争Q你们觉得好好吧,道不同不怸谋,你觉得好你就用你的,我觉得不好我q别的。用不着~着我非逼我说Java做客L(fng)好,没必要,况且q你逼我承认又怎样Q我是玉皇大帝金口玉言?jin)?得到我的承认QJava有前途了(jin)Q我好像q没有那么大本领吧?是IBMQ?Sun也没有那么大本领Q所以好不好也不是我说了(jin),用不着逼我?

2、dotnet winforms
׃Windows2000/WindowsXP不带dotnet CLRQ所以winforms一直没有能够普?qing)得很好Q等Longhorn一出来Q又变成?jin)XAML?jin),winforms又被淘汰?jin),所?winforms的地位特别尴,但是在这5-7q中Q你惛_发既能够在Windows2000/WindowsXPQ又能够在Longhorn上面跑的桌面E序Qwinforms好像又是Microsoft技术中最好的选择。所以只好一直尴下厅R?

3、VCQVB
dotnet出来以后开始尴了(jin)Q说用吧Q好像很落伍?jin),都dotnet时代?jin),说不用吧Q又没有好的替代品,现阶D开发桌面程序,q真得不得不用,而且q挺好用的。所以VC6SP5QVB6的死忠团也比较多?

4、Delphi
dotnet出来以后Borland开始跟风了(jin)Q这一跟风Q连老本都跟没有?jin)。未来的XAML时代Q我也不知道Borland怎样找自q定位Q但不管怎么_(d)从历史来看,本地代码的应用程序永q有它一席之圎ͼqXAML又如何如何做得漂亮了(jin)Q关键的地方Q和特定资源处理相关的部分,q是本地代码的程序管用。你看VB出来多少q了(jin)Q用VB开发的都是一些上层的目U别的应用YӞ一旦涉?qing)品领域,q是VC和Delphi用。所以现在大家还是不得不用Delphi7ѝ?

BTWQXAML应用致力于快速开发项目别的应用Q特别是可以跑在IE览器里面的Q因此是RIA的首选。但是毕竟也有很多不适合用RIA的场所Q特别是例如我要备䆾某些文gQ你用XAMLQ那性能׃用提?jin)。所以Delphi如果好好发展VCLQ封装Windows32 APIQ我觉得也是一条\Q未必比现在跟随dotnet差?

5、Flash RIA
其实我觉得Flash不适合做RIA的,但是Flash普及(qing)率太高,XAML又离普及(qing)太遥q,而Flash现在可以用?jin),所以是当前RIA的首选。不q我对Macromedia公司比较失望Q如果Macromedia能够公布Flash实现l节Q作Z个公开的标准向ISO提交Q同时免费开源FlexQ我敢说QFlash RIA?x)迅速普?qing)的。等5-7qXAML的时代,׃Flash的市(jng)场占有率QXAML未必能拼得qFlash。可惜的是Macromedia公司目光q于短浅Q只知道赚眼前的钱?

6、Python
q?-7q内QRIA应用和RCP应用不会(x)l一QXAML才具备将RIA和RCPl一的实力。从q?-7q来看,Flash是RIA的首选,而RCP的首选,我要推荐Python。原因前面已l提q,单ȝ一下:(x)
1QwxWidgets是一个比MFC优雅的库QTortoiseCVS用wxWidges而不用MFCQ就是因为wxWidgets好用Q而不是ؓ(f)?jin)可以移植?
2QPython的面向对象脚本语a~程适合快速界面开?
3QPython在服务器端和客户端都非常有前途,可以形成一个统一的解x(chng)案,q一Ҏ(gu)显比Java有优?
4QPython桌面应用E序可以完全~译为本C码,qPythonq行环境Q这一Ҏ(gu)dotnet winforms都有优势
5QPython可以不受限制的Q意调用Windows32 APIQ所以凡是VC6可以做的事情QPython可以做

试想一下,现在我们开发桌面应用程序有什么要求?
一、不要附带一个JRE或者CLR的篏?
二、可以快速开?
三、性能要有保证
四、方便的q程Ҏ(gu)调用支持
此外如果能够跨^台就最好了(jin)

Java前三炚w不符合;dotnet winforms不符合一QVC6不符合二和四QVB6不符合三和四QDelphi7W合前四点;Flash RIA不符合三QPython全部都符合!q且误住Python是一个完全开源免费的Ҏ(gu)Q?

客户端技术在q?-7q中Q在RIA领域我会(x)学习(fn)一下FlashQ在RCP领域我会(x)重点学习(fn)PythonQ此外会(x)观望一下XAML?/FONT>


Terry的Blog 2005-11-20 16:54 发表评论
]]>
Web单点d功能设计http://www.aygfsteel.com/terry-zj/archive/2005/11/16/20010.htmlTerry的BlogTerry的BlogWed, 16 Nov 2005 02:29:00 GMThttp://www.aygfsteel.com/terry-zj/archive/2005/11/16/20010.htmlhttp://www.aygfsteel.com/terry-zj/comments/20010.htmlhttp://www.aygfsteel.com/terry-zj/archive/2005/11/16/20010.html#Feedback0http://www.aygfsteel.com/terry-zj/comments/commentRss/20010.htmlhttp://www.aygfsteel.com/terry-zj/services/trackbacks/20010.htmlWeb单点d功能设计

环境:Weblogic6.1  Oracle9i
1 需求:(x) 现在有两套Web Application app1和app2Q分别放在两台服务器?现在希望从app1d后能通过Http链接直接q移到app2画面.不需要用户再输入口o(h)?BR>2 分析Q?q个问题本质上就是让两台机器׃nd的数据?BR>3 解决Ҏ(gu)Q?考虑通过Http链接中的参数传递session Id。实际的d的数据放在一个双斚w可以存取的公共区?BR>现在选择weblogic的JNDI。(数据库也可以Q?/P>

4 实现:1Q?app1d时把d数据攑ֈ一个HashMapl定到initialContext?BR>         2Q?q移链接http://app2ServerAddress/app2/TopEntry.do?sessid=q里写sessionId?BR>         3Q?app2斚w过request.getAttribute("sessid")得到sessionId再到initialContext中lookup出登录数据?/P>

附注:1Q?nbsp; weblogic中JNDI的用可参考本Blog相关文章?A HREF="/terry-zj/archive/2005/11/16/20012.html">http://www.aygfsteel.com/terry-zj/archive/2005/11/16/20012.html
         2Q?d数据攑ֈ一个HashMap中而不是AccountBean之类的自定义l构?BR>         3Q?q个Ҏ(gu)的负药力还需具体试?/P>


 



Terry的Blog 2005-11-16 10:29 发表评论
]]>
վ֩ģ壺 | | ʯ| ʦ| | ŷ| | ɽ| ɽ| ˳| ³| ˮ| | ޻| | | | | ʯ| | Ƕ| | żҿ| | | ǭ| | | | ֿ| | պ| ӱʡ| Ϫ| ʯ| | | | ϰˮ| ÷| ϸ|