仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 475|回复: 10
打印 上一主题 下一主题

[学习教程] JAVA编程:J2EE MVC形式JSF与Struts的异同

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:10:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。j2ee|js  Struts和JSF/Tapestry都属于体现层框架,这两种分属分歧性子的框架,后者是一种事务驱动型的组件模子,而Struts只是纯真的MVC形式框架,老外老是急吼吼说事务驱动型就比MVC形式框架好,何故见得,我们上面举行具体剖析对照一下究竟是怎样回事?
  起首事务是指从客户端页面(扫瞄器)由用户操纵触发的事务,Struts利用Action来承受扫瞄器表单提交的事务,这里利用了Command形式,每一个承继Action的子类都必需完成一个办法execute。
  在struts中,实践是一个表单Form对应一个Action类(或DispatchAction),换一句话说:在Struts中实践是一个表单只能对应一个事务,struts这类事务体例称为applicationevent,applicationevent和componentevent比拟是一种粗粒度的事务。
  struts主要的表单对象ActionForm是一种对象,它代表了一种使用,这个对象中最少包括几个字段,这些字段是Jsp页面表单中的input字段,由于一个表单对应一个事务,以是,当我们必要将事务粒度细化到表单中这些字段时,也就是说,一个字段对应一个事务时,纯真利用Struts就不太大概,固然经由过程分离JavaScript也是能够转弯完成的。
  而这类情形利用JSF就能够便利完成,
<h:inputTextid="userId"value="#{login.userId}">
  <f:valueChangeListenertype="logindemo.UserLoginChanged"/>
</h:inputText>
  #{login.userId}暗示从名为login的JavaBean的getUserId取得的了局,这个功效利用struts也能够完成,name="login"property="userId"
  关头是第二行,这里暗示假如userId的值改动而且断定提交后,将触发挪用类UserLoginChanged的processValueChanged(...)办法。
  JSF能够为组件供应两种事务:ValueChanged和Action.前者我们已在上节见地过用途,后者就相称于struts中表单提交Action机制,它的JSF写法以下:
<h:commandButtonid="login"commandName="login">
  <f:actionListenertype=”logindemo.LoginActionListener”/>
</h:commandButton>
  从代码能够看出,这两种事务是经由过程Listerner如许察看者形式贴在详细组件字段上的,而Struts此类事务是原始的一种表单提交Submit触发机制。假如说前者对照言语化(编程言语习气做法相似Swing编程);后者是属于WEB化,由于它是来自Html表单,假如你起步是从Perl/PHP入手下手,反而简单承受Struts这类作风。
  基础设置
  Struts和JSF都是一种框架,JSF必需必要两种包JSF中心包、JSTL包(标签库),别的,JSF还将利用到Apache项目标一些commons包,这些Apache包只需部署在你的服务器中既可。
  JSF包下载地点:http://java.sun.com/j2ee/javaserverfaces/download.html选择个中ReferenceImplementation。
  JSTL包下载在http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi

  以是,从JSF的驱动包构成看,其开源基因也占有很年夜的比重,JSF是一个SUN同伴们产业尺度和开源之间的一个混血儿。
  上述两个地点下载的jar兼并在一同就是JSF所必要的全体驱动包了。与Struts的驱动包一样,这些驱动包必需位于Web项目标WEB-INF/lib,和Struts一样的是也必需在web.xml中有以下设置:
<web-app>
  <servlet>
    <servlet-name>FacesServlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>  <servlet-mapping>
    <servlet-name>FacesServlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>
</web-app>
  这里和Struts的web.xml设置何其类似,几乎千篇一律。
  正如Struts的struts-config.xml一样,JSF也有相似的faces-config.xml设置文件:

<faces-config>
  <navigation-rule>
    <from-view-id>/index.jsp</from-view-id>
    <navigation-case>
      <from-outcome>login</from-outcome>
      <to-view-id>/welcome.jsp</to-view-id>
    </navigation-case>
  </navigation-rule>  <managed-bean>
    <managed-bean-name>user</managed-bean-name>
    <managed-bean-class>com.corejsf.UserBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
  </managed-bean>
</faces-config>
  在Struts-config.xml中有ActionFormAction和Jsp之间的流程干系,在faces-config.xml中,也有如许的流程,我们详细注释一下Navigation:
  在index.jsp中有一个事务:
<h:commandButtonlabel="Login"action="login"/>
  action的值必需婚配form-outcome值,上述Navigation设置暗示:假如在index.jsp中有一个login事务,那末事务触发后下一个页面将是welcome.jsp
  JSF有一个自力的事务产生和页面导航的流程布置,这个思绪比struts要十分明晰。
  managed-bean相似Struts的ActionForm,正如能够在struts-config.xml中界说ActionForm的scope一样,这里也界说了managed-bean的scope为session。
  可是假如你只觉得JSF的managed-bean就这点功效就错了,JSF融进了新的Ioc形式/依附性打针等手艺。
  Ioc形式
  关于Userbean如许一个managed-bean,其代码以下:
publicclassUserBean{
  privateStringname;
  privateStringpassword;
  //PROPERTY:name
  publicStringgetName(){returnname;}
  publicvoidsetName(StringnewValue){name=newValue;}
  //PROPERTY:password
  publicStringgetPassword(){returnpassword;}
  publicvoidsetPassword(StringnewValue){password=newValue;}
}

<managed-bean>
  <managed-bean-name>user</managed-bean-name>
  <managed-bean-class>com.corejsf.UserBean</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>

  <managed-property>
    <property-name>name</property-name>
    <value>me</value>
  </managed-property>

  <managed-property>
    <property-name>password</property-name>
    <value>secret</value>
  </managed-property>
</managed-bean>
  faces-config.xml这段设置实际上是将"me"赋值给name,将secret赋值给password,这是接纳Ioc形式中的Setter打针体例。
  BackingBeans
  关于一个webform,我们可使用一个bean包括其触及的一切组件,这个bean就称为BackingBean,BackingBean的长处是:一个单个类能够封装相干一系列功效的数据和逻辑。
  说白了,就是一个Javabean里包括其他Javabean,相互挪用,属于Facade形式或Adapter形式。

  关于一个BackingBeans来讲,个中包括了几个managed-bean,managed-bean必定是有scope的,那末这个中的几个managed-beans怎样设置它们的scope呢?
<managed-bean>
  ...
  <managed-property>
    <property-name>visit</property-name>
    <value>#{sessionScope.visit}</value>
  </managed-property>
  这里设置了一个BackingBeans中有一个setVisit办法,将这个visit赋值为session中的visit,如许今后在程序中我们尽管会见visit对象,从中猎取我们但愿的数据(如用户上岸注册信息),而visit是保留在session仍是application或request只必要设置既可。
  UI界面
  JSF和Struts一样,除JavaBeans类以外,另有页面体现元素,都是是利用标签完成的,Struts也供应了struts-faces.tld标签库向JSF过渡。
  利用Struts标签库编程庞大页面时,一个最年夜成绩是会大批利用logic标签,这个logic好像if语句,一旦写起来,弄的JSP页面象俄罗斯方块一样,可是利用JSF标签就简便幽美:
<jia:navigatorItemname="inbox"label="InBox"
  icon="/images/inbox.gif"
  action="inbox"
  disabled="#{!authenticationBean.inboxAuthorized}"/>

  假如authenticationBean中inboxAuthorized前往是假,那末这一行标签就不必显现,多洁净利索!
  先写到这里,我会持续对JSF深切对照下往,假如研讨过Jdon框架的人,大概会发明,Jdon框架的jdonframework.xml中service设置和managed-bean一样都利用了依附打针,看来对Javabean的依附打针已敏捷地成为一种新手艺意味,假如你还不懂得Ioc形式,赶忙补课。

有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。
爱飞 该用户已被删除
沙发
发表于 2015-1-25 12:39:35 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
山那边是海 该用户已被删除
板凳
发表于 2015-2-2 22:05:56 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
莫相离 该用户已被删除
地板
发表于 2015-2-3 15:53:39 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
活着的死人 该用户已被删除
5#
发表于 2015-2-5 18:20:26 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
再见西城 该用户已被删除
6#
发表于 2015-2-8 06:22:29 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
变相怪杰 该用户已被删除
7#
发表于 2015-2-8 08:23:32 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
透明 该用户已被删除
8#
发表于 2015-2-25 02:53:47 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
老尸 该用户已被删除
9#
发表于 2015-3-7 16:10:07 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
第二个灵魂 该用户已被删除
10#
发表于 2015-3-15 09:28:46 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
谁可相欹 该用户已被删除
11#
发表于 2015-3-21 23:22:06 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 15:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表