struts1与struts2的重要区别及struts2笔记

原创 2012年03月24日 14:44:45
.重大区别:
strut2是每次访问必定new一个新的action,永远不会出现线程同步的问题,strut1是每次访问很可能是同一个.


<!-- struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以金狼不要使用相对路径
虽然可以用redirect,但redirect方式并非必要
解决办法非常简单,统一使用绝对路径.(在jsp中用request.getContentRoot方式来拿到webapp的路径
或者使用myeclipse经常用的,指定basePath) -->
<!-- Action执行的时候并不一定要执行execute方法:
 可以在配置文件中配置Action的时候用method=?来指定执行那个方法,也可以在url地址中动态指定(动态调用DMI)推荐
 前者会产生太多的action,所以不推荐使用-->
<!-- 使用通配符,将配置量降到最低不过,一定要将"约定优于配置" 的原则-->
<!-- DTO:data transfers object ,数据传输对象,有点类似于我们的entity -->
<!-- ModelDriver-->
<!-- 使用addFieldError方法和s:fieldError标签简单处理数据校验 -->




.struts2配置文件详解:
<package name="test" extends="struts-default">
<!--全局异常 -->
<global-exception-mapping result="error" exception="异常" />
</package>


<!--设置主题,在struts.xml中控制theme,默认为xthml,可以设置为:simple/css_html/ajax-->
<constant name="struts.ui.theme" value="simple">
<!--允许访问静态方法-->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<!-- 处理中文乱码问题,i18n:internationalization -->
<constant name="struts.i18n.encoding" value="GBK"/>
<!--struts.devMode:true,开发模式,改点东西,马上就有反馈  -->
<constant name="struts.devMode" value="true"/>
<!-- namespace决定了访问路径,默认为"",表示可以接受所有的路径 -->
<package name="bbs" namespace="/" extends="test">
<!--默认action-->
<default-action-ref name="index"></default-action-ref>
<!-- 当class没有配置的时候,会默认执行为ActionSupport这个calss,result没有配置的时候,默认就是SUCCESS-->
<action name="usersAction" class="com.bbs.web.action.UsersAction">
<result type="dispatcher">/index.jsp</result>
<!--声明式异常-->
<exception-mapping result="error" exception="java.sql.SQLException">
</action>
<!--两个**之间的_不是默认的,换成其他的符号也可以-->
<action name="*_*" class="com.bbs.web.action.{1}Action">
<!-- 通配符 -->
<result>/{1}_{2}_success.jsp</result>
</action>
</package>
<!--type常见的四种:
dispatcher:服务器跳转,forward到一个jsp页面/html,就是不能跳转到action中
redirect:重定向,forward到一个jsp页面/html,就是不能跳转到action中
chain:链条,可以forward到一个action中.
redirectAction:客户端跳转,到另外一个action
freemarker:
httpheader:http的头信息
stream:下载
velocity:与freemarker类型的一个模板
xslt:是修饰xml语言
plainttext:会改变页面的源码
tiles:将页面分成很多块


传递参数:
a>客户端跳转才需要传递
b>${}表达式(不是EL)
-->




    <package name="admin" namespace="/admin" extends="struts-default" >
<!--*与*中间使用了中干线,会有bug,与下面default-action-ref有冲突-->
       <action name="*-*" class="com.bjsxt.bbs2009.action.{1}Action" method="{2}">
        <result>/admin/{1}-{2}.jsp</result>
        <result name="input">/admin/{1}-{2}.jsp</result>
       </action>
       <!-- 
       <action name="category" class="com.bjsxt.bbs2009.action.CategoryAction">
        <result>/admin/category_list.jsp</result>
        <result name="add_input">/admin/category_add_input.jsp</result>
        <result name="update_input">/admin/category_update_input.jsp</result>
       
       </action>
        -->
    </package>
 <package name="front" namespace="/" extends="struts-default" >
   
    <default-action-ref name="Category_list" />
       <action name="Category_list" class="com.bjsxt.bbs2009.action.CategoryAction" method="list">
        <result>/index.jsp</result>
       </action>
    </package>


思考:
ActionContext.getContext()是单例吗?


[]访问的就是一个action中的stack中从上往下(一直到栈底)数的第几个元素
<li>[0]:<s:property value="[0]"/></li>
此时会顺着顺序,当第一个action不满足username,就会继续往下面找,
<li>[0]:<s:property value="[0].userName"/></li>




思考:什么情况下栈中会有两个action在ValueStack中呢?
例子:
     <package name="ognl" namespace="/test" extends="struts-default">
           
           <action name="ognlAction" class="com.web.action.OgnlAction">
               <result>/ognl.jsp</result>
           </action>
           
           <action name="test" class="com.web.action.TestAction">
               <result type="chain">ognlAction</result>
           </action>
     </package>






struts2标签:
1.使用bean,并用bean来定义新的属性值:
<s:bean name="com.bjsxt.struts2.tags.Dog"  var="myDog"><!--标签-->
<s:param name="name" value="oudy"/>
</s:bean>
拿出值:
<s:property value="#myDog.name"/>
查看debug情况,需要将dubug标签放在bean标签中,因为在bean标签外面来
查看dubug标签是已经将拿值出来的情况了.


2.<s:include value="%{#inclPage}">
使用%{}表示强制将{}中的内中强制转换成ognl表达式.
<s:set var="inclPage"  value="%{'/_include1.tml'}"/>


3.<s:fielderror fieldname="" theme="simple"/>


4.<s:if test="条件"></s:if>
<s:elseif test="条件"></s:elseif>
<s:else></s:else>


5.<s:iterator value="{'aaa','bbb','ccc'}" var="x">
<s:property value="#x.toUpperCase()"/>
</s:iterator>
<s:iterator value="{'aaa','bbb','ccc'}" status="status">
<s:property value="#status.count"/>遍历的元素的总数
<s:property value="#status.index"/>遍历过的元素的索引
<s:property value="#status.even"/>当前是偶数?
<s:property value="#status.odd"/>当前是奇数?
<s:property value="#status.first"/>是第一个元素?
<s:property value="#status.last"/>是最后一个元素?
</s:iterator>
<s:iterator value="#{1:'a',2:'b',3:'c'}">
<s:property values="key" />
<s:property values="value" />
</s:iterator>
<s:iterator value="#{1:'a',2:'b',3:'c'}" var="x">
<s:property values="#x.key" />
<s:property values="#x.value" />
</s:iterator>


--------------$ # % 的区别
$:$传参数,用于i18n和struts配置文件,与{}搭配
#:#取得ActionContext的值
%:%将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用.












Don't go looking for Mrs.Right.
Go looking for Mrs.Right now.


北京尚学堂约定:简单就是美
1.数据可的约定(全部小写)
a)表明:[tb_*]
b)字段名:[*_*]
c)外建名:[*_*_*]


2.Action
a)如[*Action] 
b)对于Action中的方法[**],userEdit,userDelete,userAdd,userValidate,userList


3.实体类[*]
a)如:Topic


4.JSP[*_*.jsp]
a)user_add.jsp,user_validate.jsp


5.配置文件
a)如package[pk_*]:pk_user,pk_category
b)如namespace[*]:user,category
c)如action name[*]


  <body>
    编码约定:V0.1 <br>
    <ol>
    <li>板块命名首字母大写,采用驼峰标识</li>
    <li>表名与Model同名,加前缀t_</li>
    <li>action的类名为模块名 + 后缀Action</li>
    <li>每个模块原则上只配一个Action</li>
    <li>action在配置文件中的名字为模块名首字母小写</li>
    <li>增删改查的方法分别为add/update/delete/query</li>
    <li>采用*-*配置</li>
    <li>包名为模块名小写</li>
    <li>Action放在统一的包中</li>
    </ol>
  </body>


---------------------------------------------------
ext3.0:
通过server来查看ext文档.ext不能在本地看,因为ext中有许多的ajax内容,而这些ajax必须通过服务器来取.
这是ext的特点.

struts1和struts2的特点和区别

一.MVC的特点: — 多个视图可以对应一个模型。按MVC设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护。 — 模型返回的数据与显示逻辑分离。模型数...
  • u011225629
  • u011225629
  • 2015年08月22日 07:50
  • 6118

【Struts】:Struts1和Struts2的区别与联系

之前的两篇博文分别介绍了Struts1和Struts2这两个框架的概念和简单的使用流程,但是没有对这个两个框架之间的不同进行详细的说明,接下来就来看看两者到底有哪些不同的地方吧。         区...
  • u010929604
  • u010929604
  • 2016年04月30日 19:46
  • 1343

[java面试] Java面试之struts1与struts2的区别

1.都是MVC的WEB框架,   2 struts1的老牌框架,应用很广泛,有很好的群众基础,使用它开发风险很小,成本更低!struts2虽然基于这个框架,但是应用群众并多,相对不成熟,未知的风...
  • maxiaokun55
  • maxiaokun55
  • 2014年03月30日 15:39
  • 985

说说struts1与struts2的区别。

1.都是MVC的WEB框架,      2 struts1的老牌框架,应用很广泛,有很好的群众基础,使用它开发风险很小,成本更低!struts2虽然基于这个框架,但是应用群众并多,相对不成熟,未知...
  • u012927417
  • u012927417
  • 2014年08月06日 16:49
  • 918

Struts1与Struts2原理以及区别

Mvc设计模式:  Mvc是一种软件设计模式,代表了一种多层的应用程序实现方式,mvc模式将应用程序实现分为三个不同的基本部分。 模型:表示数据和业务处理  视图:是用户看到并与之交互的界面  控制...
  • moxiaoya1314
  • moxiaoya1314
  • 2016年07月13日 14:47
  • 334

Struts在Web.xml中的配置及Struts1和Struts2的区别

struts1 在web.xml中的配置: (1)配置Struts的ActionServlet      元素来声明ActionServlet     元素:用来定义Servlet的名称  ...
  • QMW19910301
  • QMW19910301
  • 2016年10月25日 13:56
  • 755

Struts1和Struts2的区别和对比(完整版)

struts2不是struts1的升级,而是继承的webwork的血统,它吸收了struts1和webwork的优势。 先看struts的Action官方注释(struts1.3.8源代码) /** ...
  • xufei512
  • xufei512
  • 2015年12月14日 12:36
  • 1387

总结了Struts1与Struts2的12点区别

总结了Struts1与Struts2的12点区别 1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类;Struts 1的一个具体问题是使用抽象类编程...
  • zh521zh
  • zh521zh
  • 2015年07月08日 11:26
  • 121

SSH之旅(三)Struts1和Struts2的前世今生

Struts是全世界最早的MVC框架,其作者是JSP规范的制定者,并参与了Tomcat的开发,这个名字来源于在建筑和滑翔机中用来支持的金属架 ,猜测着 Struts 的开发者大概是希望用该框架来支持 ...
  • u010096526
  • u010096526
  • 2015年12月15日 12:04
  • 803

struts2重要知识点总结(2)

Action的配置 的配置 通过上面的示例可以看出,Action需要在struts.xml中配置才可以使用,而且Action应该配置成为元素的子元素,那么元素的功能是什么呢? 元素可以把逻辑上相...
  • u013730093
  • u013730093
  • 2015年12月13日 13:54
  • 839
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts1与struts2的重要区别及struts2笔记
举报原因:
原因补充:

(最多只允许输入30个字)