JAVA学习

 

2007年7月26日

未来网站策划五大趋势

网站策 划是成功网站平台建设成败的关键内容之一。在中国真正普及全职的网站策划人员严格讲是2002年,在之前更多是由技术性人才(软件项目经理、网站美工等) 担任此项职位,随着中国互联网环境转晴,网站的高竞争使网站策划的地位突显。我们可以看到,许多真正处于领军性地位的网站平台90%具有一个特点——网站 策划思路清晰合理,界面友好,网站营销作用强;因此专业的网站策划是未来网站成功的重要条件之一。  在未来,网站策划呈现以下5大趋势:
  1.具备市场/销售意识,且掌握扎实技术的专业网站策划人才成抢手货
网站定位决定了网站策划思想的宽度和深度,网站客户决定了网站策划思维形式,网站页面和程序的实现决定了优秀网站策划思想的表现力,网站市场/销售再次 验证网站策划水平的高低;如果需要深入并运用上句的思想,就必须具备市场、销售、和扎实技术于一身,这种复合性网站策划人才则是现今大网站品牌竞争中不可 或缺的人力资源,随着国家2001年开设电子商务专业,这种人才真正成熟须要再等5年以上;但由于网站越来越多,优秀的网站竞争越来越难,这种人才在5年 内将从从事网站销售、市场、技术这三方面的人才中产生,其中当前网站竞争实力不高的情况下,技术人才转型是网站策划是当前现状,不过未来以市场/销售为主 的人才转型,才能真正推动网站策划走向专业化。
  2.人机工程学思想将大行其道
  人机工程学又称人机工效学 (Ergonomics),是一门让技术人性化的科学,一门关于技术和人的协调关系的科学。即如何让技术的发展围绕人的需求来展开,把人作为产品和环境设 计的出发点,使其性能、色彩等更好地适应和满足人类的生理和心理的需要,从而使人们在工作中更安全、便捷和舒适,工作效率更高。其研究方法和评价手段涉及 心理学、生理学、医学、人体测量学、美学和工程技术等多个领域。
  人机工程学已渗透至我们生活的每一个部分,例如:喝水的杯子,洗口的牙膏,使 用的电脑…等各方面,人机工程学更是利于产品销售的优化剂,那么我们从专业网站策划看,更需要人机工程学帮助我们使网站平台更容易推销给目标客户。在未来 人机工程学将使网站在以下方面得到质的提升:
人性化:通过引导性文字语言、图形语言、个性互动等方式,使网站平台更利于客户浏览,以吸引并留住客户。
  方便性:网站操作简便、易用,内容分布合理,符合客户的行为习惯。
  逻辑性:整体网站策划流程符合客户心理,且在充分分析客户行业特征的基础上,建立网站内部功能之间的逻辑转换,让客户享受整个访问过程。
  科学性:网站栏目策划、定位具备科学性,其既充分代表了网站的意图,又能充分调动访客继续点击,引导客户购买产品。
  控制性:网站在建立客户行为权限控制方面,必须符合公司业务规则,根据不同的客户类型产生不同的权限。
  交互性:建立异步沟通系统(帮助中心、留言板、操作指南…)方便客户与网站之间沟通;建立同步沟通系统(即时聊天、电话反馈…)达到即时双向沟通目标。
  界面友好性:心理学表明,适合的界面对于客户点击欲望的提升和印象指数的提升效果明显,网站界面是客户与网站交流的重要载体,在这点上网站策划师需要与网站设计师协作实现。但思想方法确保以下内容您做到了:
  a、同样的界面对象是否具有一致性、连续性的行为?
  b、各种提示信息是否简单、清晰?
  c、色彩是否统一、协调?是否避免了同时使用太多的颜色?
  d、文字内容是否简洁、重点突出?字体、字号、字型是否合适?
  e、界面对象的动静处理是否得当?
  f、布局是否合理、简洁、协调、美观,画面是否均衡等等?
  3.文化理念全面渗透网站策划实战
  网站竞争从技术竞争、平台竞争,以及现在的市场竞争,经过几年的发展,未来将上升至“文化竞争”的高度,例如:新浪网络媒体、网易虚拟社区、阿里商人文化…..
  从历史的角度来看,经济可以推动文化的发展,文化却能够决定经济、政治的走势;
从网站经营的角度来看,好的网站经营能够促使网站的客户不断的聚集、交流,逐步建立以网站或网站行业或网站性质为核心的文化;但网站或网络文化的建立却 能够带动网站从量变至质变的转换,并且能够形成“马太效应”,对网站资本运作、市场运作、技术运作、人力资源运作等综合方面产生催化作用,使网站经营真正 走向成功。
  从现有已形成文化的网站案例来看,新浪已成为中国甚至华人世界最具权威性质的网络媒体,它形成了与电视媒体、杂志媒体、报刊媒体、 广播媒体并列的第五大媒体,其文化力量可见一斑;以网易为代表的社区交流型网站更是如此,网络游戏文化、网络交友文化更是深入人心,并对中国互联网普及进 程产生决定性的推动作用;以阿里、当当、易趣、淘宝为代表的商人文化,对中国走向世界,世界了解中国,商人上网做生意的普及的贡献有目共睹;以前程无忧、 CJOL、卓博、中华英才为代表的网上人力资源文化更是加速了全国人力资源高效互动。
  因此,高层面的网站竞争是文化的竞争,而形成文化网站品牌,专业网站策划必不可以,如何有效整合公司资源、客户资源,行业资源,形成文化,是网站策划人员需要思考、实践的难点。
  4.系统网站策划理论在五年内产生
网站策划是一门有趣的学问,它涉及心理学、美学、人机工程学、工程技术、网络知识……等多项学科,在国外,已逐渐有这方面的专业理论;在国内则没有,但 随着中国高质量的网站竞争愈发激烈,从而加剧了网站策划的专业化进程,在未来5年内,专业网站策划的理论书籍会出现,但我们更期待在具备丰富网站策划经验 的这群队伍,将自己的实战经验提升至理论知识,使网站策划理论更贴近市场,推动中国网站经营专业化。
  5.网站策划的专业化导致网站设计风格整合:简约与个性成主流;
在国内许多谈及网站策划与网站设计的区别,许多人讲不出,主要是因为两者之间重叠的区域很多,网站策划需要考虑到思想如何通过设计、程序去体现,网站设 计需要在充分理解网站策划思路的基础之上才能灵活设计。随着网站策划的专业化进程加速,将使整体网站策划,网站设计,网站开发变得复杂,我们需要考虑到许 多技术以外的市场、客户因素,因此,未来大型网站设计表现风格应该会有所整合,并走向:极至简约、个性十足两个方面。
  极至简约风格:指以最简约的方式,分配、表现页面内容,以引导客户直抵目标内容,避免了因内容过多而产生的焦点分散问题,它对于网站策划和设计内容的分布合理性要求非常高,在国内做得最好的当属阿里、新浪、CJOL、卓博人才网……。
个性十足风格:指以多样化的表现方式,设计网站。它主要针对一些以娱乐性质为主的大型网站或企业网站,它具备高强度的眼球吸引力、丰富的图片或文字表现 形式,使客户能够愉悦地享受网站内容及服务,以这种风格为代表的大型网站暂时没有发现,但企业网站当属可口可乐,SONY娱乐站… 

转自:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1683119

posted @ 2007-07-26 08:21 leefoo 阅读(231) | 评论 (10)编辑 收藏

2007年7月25日

starting struts2 翻译 第4章 架构的目标

对基于特定代码的应用来说,其架构目标很难确定下来。在开始开发之前制定文档化的目标,这种情况只是空想,因为一旦开始开发,代码通常就会朝一个与架构目标不同的方向前进,这样实际上最后的应用特征是基于代码而不是架构。这种情况很难发现并且是开发过程中逐步形成的产物而不是计划的产物,其结果就会造成不同的程序包及特性之间的不一致。

 

本章我们将会讨论5种基于Struts2代码的特征。从2002年以来,这些架构元素随着代码的发展仍然存在--从开始的WebWork,经过WebWork分解为WebWork2XWork,一直到最后转变为Struts2.

 

41 概念的分解

作为一个web应用开发人员,有多种级别的功能需要进行阐述:

1)在request/response周期期间,需要对作为其核心目标的每个action的逻辑进行说明;

2)访问或拥有可以用来执行action逻辑或访问资源的业务对象;

3)编译、映射和转换,以便把HTML中基于字符的值转化为原始类型,以及把视图对象转换为业务对象或数据表来进行表示;

4)为应用中分组的action或所有的action提供功能的横切关注点。

Struts2架构中,每一个概念都是独立的。功能和逻辑不需要放置在专门的action里。我们来看看上面所提到的概念以及它们是如何处理的:

1)每个Action逻辑--这是最简单的概念。每个action负责它需要提供的逻辑或功能;

2)编译、映射和转换--3者是各自有所不同的概念,但是有一个相同点就是它们都是作为核心action逻辑的补充。编译和类型转换由框架本身进行处理。来自于HTML的字符值在action开始处理之前被转换为基本类型或被注入到action--所有需要的都在此处。映射由一个特定的拦截器进行处理。通过对一个action进行配置,说明其所拥有的域模型,并准确指明其在HTML中所对应的域,框架将会把UI映射到该域模型上。它甚至会生成对象图。

3)横切关注点--拦截器是提供横切功能的主要角色。开发者可以实现拦截器,然后把它们应用到所有action、某个特定包中的所有action或者选择某些指定的action中去。另一个横切关注点是用户接口层。Struts2可以使用其所提供的称为“主题(themes)”的标签来为此提供帮助。不同的主题可以被开发来提供不同的层选项,并被应用到单个标签或整个应用(通过把它设为默认值)。

 

42 松耦合

WebWork的早期目标之一就是提供一个松耦合的框架。其2.0版更加强调了这点:把代码分成了两个项目,一个是XWork--提供普通的命令模式(generic command-pattern)框架,另一个是WebWork--XWork提供明确的web接口。这个WebWork架构基础上的变化创建了二者的共生关系。原来赖以成名的“WebWork”现在实际上是WebWorkXWork的结合体。

作为一个独立的项目,XWork现在可以被用于其它项目的一部分了--实际上也确实是这样。Swingwork就是一个这样的项目--它是一个基于Swing的、底层使用XWorkMVC框架。另外一个例子就是JMS前端--执行或共享与web UI相关的XWork action。这些例子提供了高水平松耦合的典型案例。Struts2是又一个采用XWork的项目。

松耦合思想已经更近一步,集成到整个框架--从处理action的第一步直到最后一步。实际上,在Struts2里几乎没有什么不可配置的--个人认为这个特点既是Struts2发展的极大原动力之一,但同时也是其重大缺陷之一。

 

松耦合配置的一般案例包括:

1)把URL映射到action

2)把一个action的不同结果映射到提交的页面;

3)把处理期间产生的异常映射到提交的异常页面;

不常使用及Struts2特定的案例包括:

1)如果你不想使用Sping框架,就得配置业务对象工厂;

2)改变URL映射到一个action类的方式;

3)为action结果增加新的结果类型;

4)为新的框架功能增加插件;

5)通过拦截器配置框架级功能;

 

松耦合系统的好处是众所周知的--增强了可测试性、易于扩展框架特征等。但有一个缺陷,由于可置配的灵活性(尤其是与拦截器相关的),导致一个特定action的处理路径不易被开发者所理解。这一点在进行调试的时候比较明显。由于不理解发生了什么事,一个不了解系统的开发人员将不能快速高效的进行调试。问题本身可能比较简单,比如由一个没有进行正确配置的拦截器引起的,或者甚至只是因为拦截器的顺序不对引起的。只要理解处理路径上的每一个细节,很快就会找到问题的解决办法。

 

43 易测试性(Testability

在过去几年中,单元测试已经成为软件开发过程中事实上的标准。它不仅保证了类逻辑的一致性,而且通过在类开发过程中甚至开发之前实现单元测试,将会减少设计的复杂性,并且会使设计更为健壮。

Struts2的前身,WebWork就是建立在这种环境之上的。由于框架元素的松散耦合,测试很容易进行。在web应用开发过程中,action、拦截器、结果、对象工厂及其它被开发的组件能够独立地进行测试。由于action和拦截器最为常用,我们就对这两种组件进行详细的探讨。

 

Actions

通常在框架中是通过执行“execute()”方法来调用action的,或者在配置时调用任何一个返回值为字符值(String)的方法来进行调用的。从易测性的角度来看,这再简单不过了。

我们来看一个例子。下面是一个数字累加的action类:

public class MyAction {

private int number;

public int getnumber() { return number; }

public void setNumber( int n ) { number = n; }

public String execute() {

number += 10;

return “success”;

}

}

由于该actionPOJO,单元测试只需把action实例化、调用方法,并在断点出得到预期的结果就可以了。所有搜数据和资源都通过setter方法提供给action。因此action需要的任何数据都能够直接在action里进行设置。

在本例中我们需要两个断点--一个为“execute”方法的输出进行设置,另一个则是为验证action的状态是否是我们预期的。单元测试如下所示:

public class myActionTest extends TestCase {

public void testExecute() {

MyAction action = new MyAction();

Action.setNumber(5);

assertEquals("success", action.execute());

assertEquals(15,action.getNumber());

}

}

 

对于资源稍微有点麻烦,类似jMock这样的库可以被用来提供资源的模拟实现,测试在action和资源之间的交互是否正确。

尽管本例是用JUnit写成的,但是TestNG或其它任何框架都可以使用。

 

拦截器(Interceptors)

当你编译拦截器的时候,测试会稍微有点复杂。不过也有一些额外的帮助可以利用。使用拦截器进行工作有两种情景。

第一种情景是使用在调用时与ActionInvocation对象进行交互的拦截器。在执行后,你能够通过在断点出得到拦截器本身的状态来验证逻辑的正确性。在这种情景下,你能够利用与测试action同样的方法来测试拦截器。实例化拦截器、创建一个ActionInvocation对象的模拟实现(该对象带有在测试拦截器时将会用到的值)、调用intercept方法、在断点处得到预期的结果。这些可能发生在拦截器本身、被调用方法的返回结果或是由系统抛出的异常。

第二种情景是使用与其环境或拦截器堆栈中的其它拦截器发生交互的拦截器。在这种情况下,测试需要通过ActionProxy类与action进行交互,还将会需要访问拦截器本身不能访问的其它环境对象。

XWork库通过提供XWorkTestCase类来为JUnit测试提供帮助、通过提供TestNGStrutsTestCase TestNGXWorkTestCase类来为TestNG测试提供帮助。这些为ConfigurationManager,Configuration, Container ActionProxyFactory类的实例提供了测试实现。涉及到的类还有XWorkTestCaseHelper MockConfiguration.等。

现在我们已经具备了安装环境的基础,测试本身变得容易了--遵循在第一种情景里所描述的步骤即可。唯一的不同点在于,不是调用拦截器的intercept()方法,而是需要调用ActionProxy类的execute()方法。如下述代码所示:

ActionProxy proxy =

actionProxyFactory.createActionProxy(NAMESPACE,NAME,null);

assertEquals("success", proxy.execute());

 

在这种情况下,测试将会设置断点来获取预期的action结果值、action值或值堆栈的值。被执行的action能够在执行前或执行后通过下面的调用进行访问:

MyAction action=(MyAction)proxy.getInvocation().getAction();

而值堆栈则可以通过下面的调用进行访问:

proxy.getInvocation().getStack();

 

44 模块化(Modularization)

随着应用系统越来越庞大,把web应用分离为许多模块就变得越来越重要。模块化允许在一个项目中开发的功能或新的框架特征能够独立打包,并可以在其它项目中进行重用。Struts2已经把模块化作为其架构的基础部分,允许开发者独立工作和编译彼此的项目。

下面是一些对应用进行模块化的方法:

(1)配置信息能够被分为多个文件--这并不影响应用的打包,由于配置信息根据功能界限进行逻辑分离而易于查找,从而简化的开发人员的工作。

(2)独立的应用模块可以以插件的形式进行创建--为了提供摸个特定特征所需的一切都可以打包在一起并作为插件独立发布。这包括action、拦截器、拦截器堆栈、视图模板(JSP除外)等。浏览器插件的配置就是一个例子,该插件提供了一个完整的模块,当你把该模块添加到你的应用中时,其提供了一个web接口来查看配置信息。

(3)可以创建新的框架功能插件-非特定应用的新功能可以以插件形式捆绑并在不同的应用中使用。

从技术角度来说,所有这些对应用进行模块化的方式都是一样的--都具有同样的配置元素(除了名称不同之外,“struts-plugin.xml”是系统自动加载插件时的配置文件)、具有相同的目录结构,并且它们也包含同样的框架和应用元素。

插件的两种类型之间的唯一不同就是你在概念上如何看待它们,以及哪些元素和配置被放入分发包中。

 

4.4.1 其它配置元素

由于插件为核心框架功能提供了可选实现,所以有一些额外的配置元素。尽管在“struts.xml”和“struts-default.xml”配置文件中可以使用这些元素,但是通常情况下它们还是在插件配置文件中进行配置。

对于插件来说,可选实现的配置分为两步:

1、使用<bean .../>标签中来提供可选接口的实现,使用一个唯一的键来识别它。

2、使用<constant />标签在已配置的接口实现中选择一个。

我们来更详细地看一下这两个步骤。

<bean .../>标签允许插件提供扩展点的实现信息。下面的例子就是一个展示在"struts-default.xml"文件中为一个对象工厂进行配置的情况:

<bean name="struts"

type="com.opensymphony.xwork2.ObjectFactory"

class="org.apache.struts2.impl.StrutsObjectFactory" />

属性提供了在Struts2中创建和使用一个可选对象实现的所有信息。可以使用的属性如下所示:

class--提供类的全名;

type--指明类需要实现的接口;

name--对每个类进行唯一识别的简称;

static--指明是否把静态类方法注入到类的实例;

scope--指明所用实例的范围,其值可能为:"default""request""session" "singleton""thread"

optional--如果值为“true”,既是在创建类实例时出现错误,将仍然继续加载。

 

接下来,<constant />标签允许开发人员选择使用哪个配置。只有两个属性--一个属性“name”提供了你的新实现所改变的扩展点的名称,另一个属性“value”就是在<bean />标签中配置的“name”名称。

<constant name="struts.objectFactory" value="plexus" />

<constant />标签是把一个新值赋给一个已知属性的一种方式。该值也可以在"web.xml"配置文件中使用“init-param”进行修改,或者在““struts.properties”配置文件中作为一个名值对(name-value pair)进行修改。

如果你没在开发一个插件,而只是使用常规"struts-xml"配置文件中的这些技巧,这里还有一个捷径。在<constant ... />标签里,使用你通常放在<bean ... />标签里的类值---这样做可以避免对<bean ... />标签的需求。

下面这张表列出了可配置扩展点的接口和属性名称:(表省略)

4.4.2 惯例优先原则(Convention over configuration)

惯例优先配置的原则是Rails带给主流应用开发的一个概念。不是提供在很多应用中都很类似的配置文件,而是假定在多数情况下开发人员将会遵从一个特定的模式。这个模式非常普遍以至于可以被认为是一个惯例,这样就可以在框架中提供一个默认的配置而不是为每个新的应用提供一个配置。默认情况下,开发人员不需要提供配置信息。但是如果有与惯例配置信息不同的需要,就得提供相应的配置信息来代替默认配置信息。

Struts2已经采用了这种理念。松耦合给Struts2提供大的弹性,但是同时这也意味着该框架很难进行配置。而惯例优先配置原则则为这两种对立的力量提供了平衡,使开发人员的开发可以更加简单和高效。

Struts2中,惯例优先配置的例子包括:

(1)        隐式配置文件加载配置文件“Struts-default.xml”和“struts-plugin.xml”是自动加载而不是显式加载的。

(2)        插件中的代码当利用插件中的代码时,使用action名称和结果字符二者的结合来自动搜索结果模板,所以对于“/user/add.action”来说,将会为一个“success”的结果返回“/user/add-success.jsp”模板,而为一个“error”的结果返回“/user/add-error.jsp”模板。

(3)        默认结果及结果类型当对action进行配置时,当使用默认的“success”和JSP时,不必指明结果和类型。

(4)        绑定Spring业务服务当安装了Spring框架插件后,不必为每个action配置其所需的基于Spring提供的业务,因为这些业务会自动与action进行绑定。

在前面的章节中,我们已经看到了几个默认配置,以及如何通过配置使用新值来代替默认值。更多的配置选项,以及更多的惯例将会在接下来的章节中进行探讨。

posted @ 2007-07-25 17:23 leefoo 阅读(633) | 评论 (0)编辑 收藏

2007年6月22日

struts2配置文件说明(翻译自startingstruts2online)

一、struts.properties文件说明
       struts.properties配置文件提供了一种改变框架默认行为的机制。一般来讲我们没必要修改这个文件,除非你想拥有一个更加友好的开发调试环境。struts.properties文件中所包含的所有属性都可以在web.xml配置文件中使用"init-param"标签进行配置,或者在struts.xml文件中使用“constant”标签进行配置。
 可以被修改的属性允许改变Freemarker选项--改变“action-mapping”类、决定是否允许XML配置文件重载及确定默认用户接口主题等行为。

        一个名为“default.properties”的属性文件包含在“Struts2-Core”JAR文件中。你可以在你项目源文件路径的根目录下创建一个名为“struts.properties”的文件,来对某个属性进行修改。这样你就可以增加你想要修改的属性。新的属性值将会覆盖默认值。

       在开发环境下,你可能会考虑修改下面一些属性:
 (1) struts.i18n.reload = true  --允许国际化文件重载;
 (2) struts.devMode = true --允许开发模式以提供更方便的调试功能;
 (3) struts.configuration.xml.reload = true --允许XML配置文件重载功能,以便在有变化时可以重载而不需重载servlet容器中的整个web应用;
 (4) struts.url.http.port = 8080 --设置服务器允许端口,以便正确创建生成的URL。

二、struts.xml文件说明
       struts.xml文件包含了当你开发action时需要修改的配置信息。下面我们来看一下该文件的固定结构。
       根据你所开发应用的功能不同,有可能在你的应用中完全用不着“struts.xml”配置文件。我们这里所说的配置能够被包含注释的替代方法、“web.xml”中的初始化参数及可替换URL映射配置进行处理。需要“struts.xml”文件进行配置的属性有全局结果、异常处理及自定义拦截器堆栈。

       这是一个XML文件,所以第一个元素是XML版本和解码信息。接下来是该XML的文档类型定义(DTD),提供该文档所包含元素的结构信息,以便被XML解析器和编辑器使用。

posted @ 2007-06-22 10:09 leefoo 阅读(1550) | 评论 (0)编辑 收藏

仅列出标题  

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

友情链接

搜索

最新评论

阅读排行榜

评论排行榜