随笔-8  评论-4  文章-0  trackbacks-0
  2008年4月5日
         Filter是Strusts2中非常重要的机制,而Filter的配置就放在Web.xml文件中,如下:

<?xml version="1.0" encoding="GBK"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 <!-- 定义Struts2的FilterDispathcer的Filter -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>

 <!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 -->
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

posted @ 2008-04-05 16:52 怡众科技 阅读(4195) | 评论 (1)编辑 收藏
  2007年12月7日
随着阿里巴巴在香港的上市,今年冬天,马云注定将成为最引人瞩目的中国企业家。在《阿里巴巴:天下没有难做的生意》一书的序言写道:“如果说杨致远是互联网领域里第一个世界级的华人企业家,那么马云就可能是下一个。杨致远是商业的天才,他发现了互联网搜索的价值,而马云则是天才的商人,他把一团让人手足无措的乱麻织成了一匹锦绣。”今天,很多人坚持这样的判断。
  要总结马云的成功秘诀,应该可以罗列出20条以上,其中包括他的奇异长相和一口流利的英语。不过,在众多答案中,第一条更为专注。
  1999年的春天,马云从北京铩羽回到杭州,在城郊的湖畔花园的家里创办阿里巴巴网站。公司成立的那一天,家里的墙壁突然渗水了,他对大家说,我出去找点材料。过一会儿,他抱了一大卷旧报纸回来,然后大家一起把它们贴在墙上,就这样开始了公司的第一天。
  阿里巴巴当时总共18个人,马云对全体员工发表开业演讲:“我们要办的是一家电子商务公司,我们的目标有三个。”马云的演讲很能煽动人,“第一,我们要建立一家生存80年的公司。”
  大家一边鼓掌,一边想:“反正能不能活到80年,我们可能谁也看不到。”
  “第二,我们要建设一家为中国中小企业服务的电子商务公司。”大家鼓掌,在这一点上谁也没有疑问。
  “第三,我们要建成世界上最大的电子商务公司,要进入全球网站排名前十位。”大家你看我,我看你,每个人的心里都在犯嘀咕,“这个目标太具体化了,就凭我们这几杆枪?”
  后来马云告诉我,他搞电子商务,从那一天起就铁了心。
  2001年,全球互联网遭遇大寒流,那年冬天,他飞赴日本向投资阿里巴巴的软银总裁孙正义汇报公司情况,那些日子,孙正义投资的上百家互联网公司乱成了一团,大家都不知道未来的出路在哪里。那天,前来汇报的各国CEO一个接一个地进去出来,轮到马云了,当他简短地讲完阿里巴巴的境况后,孙正义幽幽地说:“今天前来汇报的CEO,所说的话都与我当年投资他们时说的不一样了,只有你还在说当年说过的话。”当时,曾经当过一天世界首富的孙正义的资产已缩水95%,很多投资项目早已面目全非,只有阿里巴巴还是那间他当初投资的电子商务公司,也是软银最成功的投资项目之一。
  时间又转到了2002年底,互联网世界开始回暖。中国著名的网络公司如新浪、搜狐等相继实现盈利,而一些颇有市场前景的互联网项目也初露端倪,当时阿里巴巴的网商用户已经超过400万家,马云面临新的诱惑。
  “阿里巴巴拥有那么多有价值的注册客户,具备了开拓任何领域的最佳条件。”几乎所有的人都这么认为。当时,摆在马云面前的道路有三条。
  第一条道路,是发展短信业务,以搜狐、网易为代表的中国门户网站均在这个聚宝盆里淘到了大金块,短信市场已非常成熟,阿里巴巴完全有抢夺蛋糕的能力。
  第二条道路,是投身网络游戏领域,当时全中国还没有一家大型网络游戏公司,陈天桥的盛大才刚刚起步,如果阿里巴巴转投此领域,应当会有大作为。
  第三条道路,是继续在尚未成熟的电子商务的“老路”上走下来。
  马云的抉择是,不改初衷,一条道走到黑。今天,阿里巴巴没有成为另一家网易,马云也失去了成为“中国首富”的机遇。但是,在电子商务领域,阿里巴巴一路狂奔,无人可追。
  所有的成功都是抵抗诱惑的结果。马云的专注包括三个词,一是电子商务,二是中国市场,三是中小经营者。目前,阿里巴巴旗下的所有业务,包括淘宝网、支付宝莫不如此,甚至在我看来,他两年前出手收购的雅虎如果要获得复苏,其战略起点也还是要从自己的专注优势中去寻找。阿里巴巴上市后,马云手握重金,又有了一次讨伐四野的机遇,不过,“钱多了,犯错误的机会也就多了”,不知道马云还记得当年在旧报纸糊成的墙下说过的那席话吗?1947年6月6日,亨利 · 福特去世的时候,《纽约时报》撰文说:“当他来到人世时,这个世界还是马车的时代,当他离开人世时,这个世界已经成了汽车世界。”汽车其实不是福特发明的,不过他让它成为了一个改变美国的工具。今天的马云其实也有这样的机会,电子商务不是他发明的,不过阿里巴巴可能成为改变中国商品和“中国制造”命运的重要推力之一。
posted @ 2007-12-07 16:44 怡众科技 阅读(443) | 评论 (1)编辑 收藏
  2007年12月5日

Struts 2内嵌了Dojo工具包,实现对Ajax的支持。下面是一个用户名和密码都是Admin的Login应用。

 1、在struts.xml中加入一个Action mapping

xml 代码

 

  1. <action name="showAjaxLoginForm">  
  2.        <result>/pages/ajaxlogin.jspresult>  
  3. action>  
  4.   
  5. <action name="ajaxLogin" class="net.roseindia.Login">  
  6.        <result name="input">/pages/ajaxlogin.jspresult>  
  7.        <result name="error">/pages/ajaxlogin.jspresult>  
  8.        <result>/pages/ajaxloginsuccess.jspresult>  
  9. > 

 

 2、用Ajax编写一个Login页面ajaxlogin.jsp

 这个页面使用了 标签, 这个标签能通过Ajax tags载入页面内容。jsp页面还使用了标签,这个标签可以利用Ajax来更形页面元素和提交一个form。当出现错误是,标签执行并显示错误信息。

xml 代码 
  1. <%@ taglib prefix="s" uri="/struts-tags"%>  
  2. <html>  
  3.   <head>  
  4.     <s:head theme="ajax" debug="true"/>  
  5.   head>  
  6.   <body>  
  7.     <s:div id="loginDiv" theme="ajax">  
  8.     <div style="width: 300px;border-style: solid">  
  9.       <s:form action="ajaxLogin"  validate="true">  
  10.         <tr>  
  11.           <td colspan="2">  
  12.             Login   
  13.           td>  
  14.         tr>  
  15.         <tr>  
  16.           <td colspan="2">  
  17.             <s:actionerror />  
  18.             <s:fielderror />  
  19.           td>  
  20.         tr>     
  21.           <s:textfield name="username" label="Login name"/>  
  22.           <s:password name="password" label="Password"/>  
  23.           <s:submit theme="ajax" targets="loginDiv" notifyTopics="/ajaxLogin"/>       
  24.       s:form>  
  25.     div>  
  26.     s:div>  
  27.   body>  
  28. html>   

 

 3、编写一个验证用户名和密码的Action类Login.java

如果验证成功返回SUCCESS,失败就返回ERROR

java 代码 
  1. package net.roseindia;   
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4. import java.util.Date;   
  5.   
  6. /**  
  7.  * Validate a user login.  
  8.  */  
  9. public class Login extends ActionSupport {   
  10.   
  11.     public String execute() throws Exception {   
  12.         System.out.println("Validating login ... ...");   
  13.         System.out.println("User = " + getUsername());   
  14.         if (!getUsername().equals("Admin") || !getPassword().equals("Admin")) {   
  15.             System.out.println("Validating error ! User = " + getUsername());   
  16.             addActionError("Invalid user name or password! Please try again!");   
  17.             return ERROR;   
  18.         } else {   
  19.             System.out.println("Validating success !");   
  20.             return SUCCESS;   
  21.         }   
  22.     }   
  23.   
  24.     // ---- Username property ----   
  25.   
  26.     /**  
  27.      * Field to store User username. 
  28.      */  
  29.     private String username = null;   
  30.   
  31.     public String getUsername() {   
  32.         return username;   
  33.     }   
  34.   
  35.     public void setUsername(String value) {   
  36.         username = value;   
  37.     }   
  38.   
  39.     // ---- Username property ----   
  40.   
  41.     /**  
  42.      * Field to store User password. 
  43.      */  
  44.     private String password = null;   
  45.   
  46.     public String getPassword() {   
  47.         return password;   
  48.     }   
  49.   
  50.     public void setPassword(String value) {   
  51.         password = value;   
  52.     }   
  53.   
  54. }   

 4、编写一个登录成功页面ajaxloginsuccess.jsp

xml 代码
  1. <html>  
  2.   <head>  
  3.     <title>Login Successtitle>  
  4.   head>  
  5.   <body>  
  6.     <p align="center"><font color="#000080" size="5">Login Successful !font>p>  
  7.     <h1> Welcome to <%=request.getParameter("username")%>  h1>  
  8.   body>  
  9. html>   

5、访问下面连接 http://localhost:8080/s2ajax/showAjaxLoginForm.action

posted @ 2007-12-05 00:01 怡众科技 阅读(982) | 评论 (0)编辑 收藏
  2007年12月4日

 

http://www.theserverside.com
权威的的J2EE站点,有最新的消息发布和很多技术文章以及很好的论坛,进行J2EE相关技术
的全方位的讨论,也有电子书可以下载。

http://www.javaworld.com
很著名的国外的java技术站点。有一段时间由于一些原因停止了更新,不过不久前有开始了
更新的工作。

http://www-900.ibm.com/developerWorks/cn/java/index.shtml
IBM公司的developerWorks Java技术专区,有很多关于J2EE的技术文章,并且文章的质量很
高。

http://www.jdon.com
国内不错的J2EE技术站点,有很多技术文章和源代码。以前推出过汉化的JIVE版本,现在有
了自己的J2EE框架产品。

http://www.huihoo.com
专注于中间件技术的站点和论坛,国内开源软件做的相当不错的组织,推出了自己的J2EE服
发信人: petbear (雨中的人), 信区: J2EE
标  题: J2EE学习经验和流程
发信人: oosky (天天), 信区: J2EE
标  题: J2EE站点资源
发信站: BBS 水木清华站 (Wed Mar 31 17:23:27 2004), 转信


Java Ftp
ftp://java:java@219.224.190.248:4021 (欢迎大家使用)
很多JAVA资源,感谢前辈的工作:)

务器产品JFox以及相关的
OpenSource 产品。

http://gceclub.sun.com.cn
SUN的中文技术社区,有SUN 的技术人员的支持维护,很多不错的文章,在线讲堂栏目办的
很有特色。推出了新
版的技术论坛,但是人气一直不是很旺。

http://www.cnjsp.org
以前做过JSP的论坛,现在定位于Java技术服务,提供一些J2EE的技术文章,还不错。

http://www.chinajavaworld.net
应该是国内最著名和热门的java技术站点了,有很j2ee的信息和技术文章和很好的论坛。

http://www.csdn.net
程序员都知道的网站:)也把它列进来。有最新的java业界动态和技术文章可以查找。
http://cwiki.apache.org/S2WIKI/projects-using-webwork-or-struts2.html
自己喜欢的地方,收藏
http://sourceforge.net
很不错的开源社区

posted @ 2007-12-04 23:15 怡众科技 阅读(241) | 评论 (0)编辑 收藏

作者:lgx522 发表时间:2007年04月19日 18:04 回复此消息回复

原贴网址: http://www.jdon.com/jivejdon/thread/31553.html

 

经过数年的“框架大战”,Java界的各种框架找到了自己应有的位置。

Spring+Hibernate+Struts已成为Java开发的主流体系。在这个体系中,Spring+Hibernate的地位应该说短期内是难以撼动了。除了新兴的Jboss Seam作为挑战者之外,几乎难有劲敌。有趣的是当初Spring、Hibernate作为挑战者,将官方的EJB成功挑落马下;这次反倒是官方的EBJ3成了挑战者,不知结局如何。

Java B/S编程中历来战火最激烈的其实还在Web层,框架的数量最多,争议最大。
一切由Struts而起,而Struts最终也坐稳了第一个时代的王座。在技术层面,Struts 1.x已经被无数人抱怨过、批评过,但终于还是稳坐王位,这充分说明了习惯的力量。“稳定压倒一切”,这句话在IT技术领域仍旧适用。
其实IT应用技术,什么新鲜玩意并不难学。难的是标准化和规范化。每个程序员都有自己的思路和习惯,写出来的代码自然是五花八门。Java何以成为编程界的老大,很重要的一点在于Java的规范化。这种规范化很高的语言适用于多人合作的大型项目,便于沟通和理解,也就便于集成和维护。Java世界为什么会框架横飞,说到底还是规范化的需要。纯JSP和Struts写Web谁快,摆明了是JSP。那撑饱了用Struts?原因在于100个人写出来的JSP,有100种写法;而100个人写出来的Struts,基本相似。Struts之成功,正缘于其在Java Web层的规范化方面所做出的贡献。

然而长江后浪推前浪,Struts 1.x的技术缺陷毕竟是隐患。
Sun力推JSF,打算一雪Web层框架缺失之耻。可惜JSF既要沿用Swing的技术路线,又要学ASP.NET,还要照顾产商的IDE,结果搞了个四不象,弄得里外不是人。当然Sun的技术实力毕竟是超强的,只要别重蹈EJB的覆辙,拿出点专断的精神(像这两年的NetBeans),做出像Swing那样水准的东西,JSF当大有作为。JSF现在比较有优势的是对Ajax的集成,这一点走在了其他框架的前面。

Struts就更没有志气了,把WebWork换了个标签,凑出个Struts2,Bug多多。说实在话,根本不如原版的WebWork。如果不是靠了原先的fans捧场,根本就没得混。不过Struts原本就不是以技术取胜的,靠的是抢占先机带来的习惯优势。如果原先的fans们在这两年内都能转到Struts2,那么Struts二世仍将雄霸天下。

综上所述,未来两年,JSF与Struts将展开Java Web框架的最终战争。
以笔者愚见,结局有二:一是不论Struts还是JSF获胜,Java Web层都将结束混战的局面,这对Java Web开发的标准化是非常有利的,并有助于巩固Java在B/S界的地位;二是Struts1.x、Struts2、JSF三分天下,必然从整体上削弱Java在B/S界的竞争力,并将进一步被RoR、ASP.NET、PHP所蚕食。

posted @ 2007-12-04 23:05 怡众科技 阅读(196) | 评论 (0)编辑 收藏

Design Pattern Practice

1.序
本文从一个简单的多列排序的例子入手,由浅入深地讲解Design Pattern(设计模式)的目的、分析和实践。
文中的例子用到Compositor Pattern和Decorator Pattern。
同时,文中的例子也提供了一类问题(条件组合问题)的解决方案。

2.问题的引入
Design Pattern(设计模式)的目标是,把共通问题中的不变部分和变化部分分离出来。不变的部分,就构成了Design Pattern(设计模式)。这一点和Framework(框架)有些象。
下面举个排序的例子,说明如何抽取问题中的不变部分。
假设一个Java类Record有field1,field2,field3等字段。


public class Record{
public int field1;
public long field2;
public double filed3;
};


我们还有一个Record对象的数组Record[] records。我们需要对这个数组按照不同的条件排序。
首先,按照field1的大小从小到大进行升序排序。
排序函数如下:


void sort(Record[] records){
for(int i =…){
for(int j=…){
if(records[ i ].field1 > records[ j ].field1)
// swap records[ i ] and records[ j ]
}
}
}


其次,按照field2的大小从小到大进行升序排序。

void sort(Record[] records){
for(int i =…){
for(int j=…){
if(records[ i ].field2 > records[ j ].field2)
// swap records[ i ] and records[ j ]
}
}
}


再次,按照field3的大小从小到大进行升序排序。
...
这种要求太多了,我们写了太多的重复代码。我们可以看到,问题的变化部分,只有判断条件部分(黑体的if条件判断语句)。
我们可以引入一个Comparator接口,把这个变化的部分抽取出来。

public interface Comparator(){
public boolean greaterThan(Record a, Record b);
};


sort函数就可以这样写(把判断条件作为参数):


void sort(Record[] records, Comparator compare){
for(int i =….){
for(int j=….){
if(compare.greaterThen(records[ i ], records[ j ]))
// swap records[ i ] and records[ j ]
}
}
}


这样,对应第一个要求――对records数组按照field1的大小排序。
我们可以做一个实现Comparator接口的CompareByField1类。


public class CompareByField1 implements Comparator{
public boolean greaterThan(Record a, Record b){
if(a.filed1 > b.filed1){
return ture;
}
return false;
}
}


sort函数的调用为:

sort(records, new CompareByField1());


这样,对应第一个要求――对records数组按照field2的大小排序。
我们可以做一个实现Comparator接口的CompareByField2类。

public class CompareByField2 implements Comparator{
public boolean greaterThan(Record a, Record b){
if(a.filed2 > b.filed2){
return ture;
}
return false;
}
}
[code]

sort函数的调用为:
[code]
sort(records, new CompareByField2());


按照C++ STL的叫法,这里的sort称为算法(Algorithm),records称为容器(集合),Comparator称为函数对象(Function Object)。

JDK的java.util.Collections类的sort方法和java.util.Comparator接口就是按照这样的思路设计的。下面我们来看看如何应用sort和Comparator解决多列排序问题。

buaawhl

发表文章: 18
注册时间: 2004年07月06日 10:53
Re: 这么多设计模式,我的看法和理解 发表: 2004年07月09日 18:37 回复
3.多列排序问题

3.1排序条件的数量

我们知道,SQL语句能够实现强大的排序功能,能够按照不同字段的排列进行排序,也能够按照升序,降序排序。比如下面的语句。
order by field1 asc, field2 asc, field3 desc。

这个排序条件按照field1的升序,field2的升序,field3的降序排序。
注意,排在前面的字段具有较高的优先级。
比如,两条纪录A和B,满足如下条件:
(1)A.field1 > B.field1,(2)A.field2 < B.field2。
这时如果按照order by field1, field2语句排序,那么 A > B。
如果上述条件中的(1)A.field1 > B.field1变化为A.field1 == B.field1。这时,条件(2)就会起作用。这时,A < B。

我们来看看在Java中如何实现这种灵活而强大的排序。
我们还是以上一节的Record类为例。Record类有3个字段,我们来看一看,有多少种可能的排序条件。
(1)按field1排序。(2)按field2排序。(3)按field3排序。(4)按field1,field2排序。(5)按field1升序,按field2降序排序…...

各种排序条件的排列组合,大概共有30种。而且,随着字段个数的增长,排序条件的个数呈幂级数的增长。
按照上一节的sort和Comparator方法,如果我们需要达到按照任意条件进行排序的目的,那么我们需要为每一个排序条件提供一个Comparator,我们需要30个Comparator类。:-)

当然,我们不会这么做,我们能够进一步提取这个问题中的相同重复部分,优化我们的解决方案。

3.2 问题分析
我们来分析这个问题中变化的部分和不变的部分。
上面所有的排序条件中,不变的部分有3部分:
(1)A.field1和B.field1的比较,
(2)A.field2和B.field2的比较,
(3)A.field3和B.field3的比较;

变化的部分有两部分,
(1)这三种比较条件的任意组合排列,
(2)升序和降序。

根据这段分析,我们引入两个类,ReverseComparator类和CompositeComparator类。
CompositeComparator类用来解决字段的组合排列问题。
ReverseComparator类用来解决字段的升序、降序问题。

3.3 ReverseComparator类的代码

import java.util.Comparator;

public class ReverseComparator implements Comparator{
/** the original comparator*/
private Comparator originalComparator = null;

/** constructor takes a comparator as parameter */
public ReverseComparator(Comparator comparator){
originalComparator = comparator;
}

/** reverse the result of the original comparator */
public int compare(Object o1, Object o2){
return - originalComparator.compare(o1, o2);
}
}


3.4 CompositeComparator类的代码

import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;

public class CompositeComparator implements Comparator{
/** in the condition list, comparators' priority decrease from head to tail */
private List comparators = new LinkedList();

/** get the comparators, you can manipulate it as need.*/
public List getComparators(){
return comparators;
}

/** add a batch of comparators to the condition list */
public void addComparators(Comparator[] comparatorArray){
if(comparatorArray == null){
return;
}

for(int i = 0; i < comparatorArray.length; i++){
comparators.add(comparatorArray[i]);
}
}

/** compare by the priority */
public int compare(Object o1, Object o2){
for(Iterator iterator = comparators.iterator(); iterator.hasNext();){
Comparator comparator = (Comparator)iterator.next();

int result = comparator.compare(o1, o2);

if(result != 0){
return result;
}
}

return 0;
}
}


3.5 Comparator的组合应用
这一节讲述上面两个类的用法。
对应前面的排序问题,我们只需要3个Comparator类:
(1)Field1Comaprator;
(2)Field2Comaprator;
(3)Field3Comaprator。

下面举例说明,如何组合这些Comparator实现不同的排序条件。
(1)order by field1, field2


CompoiComparator myComparator = new CompoiComparator();
myComparator. addComparators(
new Comparator[]{
new Field1Comaprator (), new Field2Comaprator ()};
);

// records is a list of Record
Collections.sort(records, myComparator);

(1)order by field1 desc, field2

CompoiComparator myComparator = new CompoiComparator();
myComparator. addComparators(
new Comparator[]{
new ReverseComparator(new Field1Comaprator ()),
new Field2Comaprator ()};
);

// records is a list of Record
Collections.sort(records, myComparator);



这里提供的ReverseComparator类和CompositeComparator类都采用了Decorator Pattern。
CompositeComparator类同时也是Composite Pattern。

4.过滤条件的排列组合
过滤条件问题也属于条件组合问题的范畴。比如JDK提供的java.io.File类提供了一个文件过滤方法listFile(FileFilter),用户可以定制不同的FileFilter,实现不同的过滤条件,比如文件时间在某个范围内;文件后缀名,文件名符合某种模式;是目录,还是文件,等等。
同样,我们可以应用上述的解决方法,实现灵活的过滤条件组合――用一个CompositeFilter类任意组合过滤条件,用一个ReverseFilter类作为排除条件。

4.1 CompositeFilter类的代码

import java.io.FileFilter;
import java.io.File;

import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;

public class CompositeFilter implements FileFilter {

/** in the filter list, every condition should be met. */
private List filters = new LinkedList();

/** get the filters, you can manipulate it as need.*/
public List getFilters(){
return filters;
}

/** add a batch of filters to the condition list */
public void addComparators(FileFilter[] filterArray){
if(filterArray == null){
return;
}

for(int i = 0; i < filterArray.length; i++){
filters.add(filterArray[i]);
}
}

/** must meet all the filter condition */
public boolean accept(File pathname) {
for(Iterator iterator = filters.iterator(); iterator.hasNext();){
FileFilter filter = (FileFilter)iterator.next();

boolean result = filter.accept(pathname);

// if any condition can not be met, return false.
if(result == false){
return false;
}
}

// all conditions are met, return true.
return true;
}
}


4.2 ReverseFilter类的代码


import java.util.Comparator;

public class ReverseComparator implements Comparator{
/** the original comparator*/
private Comparator originalComparator = null;

/** constructor takes a comparator as parameter */
public ReverseComparator(Comparator comparator){
originalComparator = comparator;
}

/** reverse the result of the original comparator */
public int compare(Object o1, Object o2){
return - originalComparator.compare(o1, o2);
}
}

posted @ 2007-12-04 22:48 怡众科技 阅读(1306) | 评论 (1)编辑 收藏
  2007年12月3日

 
(1)部署lib库中文件Struts+ibatis,共6个。
(2)配置struts2中的web.xml,目的是让Struts2来解释web应用。内容如下:
   <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <filter> <!--定义filter名称,制定filter使用的类 -->
         <filter-name>struts2</filter-name>
         <filter-class>
                   org.apache.struts2.dispatcher.FilterDispatcher
         </filter-class>
 </filter>
 <filter-mapping>
         <filter-name>struts2</filter-name>
         <url-pattern>/*</url-pattern><!--定义filtemapping指定搜索路径为根路径开始-->
 </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


(3)配置Struts2的Struts.xml文件,目的是建立struts2中逻辑调用机制。-----------------------改
内容如下:===============================需要修改
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
   <package name="yzth" namespace="/" extends="struts-default">
  <action name="hello" class="org.lxh.struts2.demo.HelloAction">
   <result name="success">
    /hello.jsp
   </result>
   <result name="error">
    /error.jsp
   </result>
  </action>
 </package>
</struts>
(4)配置Ibatis中的各个关键环节
  POJO类的建立      *** 用于存储ORMapping映射后的数据记录,只包含get 和set 方法
  com.mydomain.jata中的
  Account.xml       *** 最重要的ORMapping文件,存储了对数据访问的各种映射的SQL操作。
  SqlMapConfig.xml  *** 存储连接数据的方法,配置数据连接池。
(5)设计调用界面
    
     index.jsp==>hello.action==>account.class(应该从hello.action中调用ormapping)==>struts.xml==>hello.jsp

(5.1)index.jsp使用S:标记传值给hello.action

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<form action="hello.action" method="post">
    根据ID进行查询:<input type="text" name="msg">
    <input type="submit" value="提交">
</form>

(5.2)hello.action使用Msg接收id后,调用account进行查询。
===========================================================================
这个过程没搞清楚,准备找1个struts2+ibatis的开源项目研究一下再继续。。。。


posted @ 2007-12-03 21:09 怡众科技 阅读(1981) | 评论 (1)编辑 收藏
用心记录我们技术的成长过程。
posted @ 2007-12-03 19:29 怡众科技 阅读(225) | 评论 (0)编辑 收藏
仅列出标题