`

struts1知识点

阅读更多


对一个星期的 Struts1 进行笔记总结:

 

1 what--> 什么是 struts

     struts 实质上就是一个 mvc 框架,用于 java web 的应用开发

 

2 why--> 为什么要用 struts

 

    1 ,是一种开源软件

    2 ,是 mvc 模式的一种很好的体现

    3 ,提供了强大的自定义标签库( taglib

    4 ,支持国际化

    5 ,拥有页面导航

    6 ,提供 Exception 处理机制

    7 ,数据库连接池管理

 

3how-->struts 的工作流程

    1 读取配置 -- 读取 struts-config.xml 的配置信息,并把信息存放到各种配置对象

    2 发送请求 --Actionservlet 接收客户的请求,到 ActionMapping 检索和客户请求相匹配的路径

    3 填充 form-- 将客户端提交的表单信息保存到 ActionForm ,根据配置信息决定是否需要表单验证

    4 派发请求 -- 会根据 ActionMapping 的路径进行发送请求到某个 Action

    5 处理业务 -- 调用 execute() 方法处理业务逻辑

    6 返回响应 -- 再把客户的请求转发给 ActionForward 对象,指向 jsp 文件

    7 处理响应 --jsp 组件生成动态网页,返回给客户端

 

4struts 7 大组件( 6 大核心类)

    1ActionServlet :主控制器

    2Action           :完成业务逻辑

    3ActionForm   :将客户提交的表单数据存储起来

    4ActionMapping :帮助 ActiongServlet 将请求的 url 映射到相对应的操作类

    5ActionForward :用于页面的转向

    6ActionError :用来存储和回收错误信息

    7struts 标签库: 可以减轻开发显示层次的工作

 

5 Struts1有哪些常用的标签库? 

1、HTML标签库:这个标签库的大部分标签和HTML中的标签一一对应的。html标签库的目的是将jsp页面和Action通过ActionForm连接起来。
2、Bean标签库:Bean标签库中的定制标签主要用来向客户端输出文本信息。一般我们会用<bean:write name="classes" property="className" />
3、Logic标签库:进行逻辑判断和循环操作.一般我们会用<logic:iterate id="classes" name="list" type="com.lxitedu.classes.pojo.Classes">id与Bean中bean:wirte 对应的name 必须是相同的。
4、Nested标签库:这个标签库中的标签有来显示form或对象中的“nested”属性。
5、Tiles标签库:这个标签库的标签允许我们为视图层建立布局。



struts 标记库由四类标记组成:

     1(bean)   Bean 标记:用来在JSP 页中管理bean

 <bean:message>

<bean:write>  filter="false"  显示含html 标签的  输出int 类型的时候加上format 属性  format="#"

  <bean:define>

     2(logic) 逻辑标记:用来在JSP 页中控制流程

   logic:iterate   迭代标签

<logic:notEmpty name="map">

<logic:iterate name="map" id="element">

  <bean:write name="element" property="value"/><br>

  </logic:iterate>

</logic:notEmpty>

   logic:present  logic:notPresent  作用域是否存在

<logic:present name="strTable">

<bean:write name="strTable" filter="false"/>

</logic:present>

   logic:empty   logic:notEmpty   集合元素为空

   logic:equals   logic:notEquals

<logic:equal name="onlybean" property="name" value="xxx">

等于 xxx

</logic:equal >

 

<logic:notEqual name="onlybean" property="name" value="xxx">

<bean:write name="onlybean"  property="name"/>

</logic:notEqual >

 3(html) HTML 标记:用来生成HTML 标记,在表单中显示数据,使用会话IDURL 进行编程

  html:form  html:text   html:radio  html:checkbox  html:select  html:option  html:submit.....

<html:errors />   显示所有错

<html:errors property=" 属性名"/>  显示对应的属性错误

    4(template) 模板标记:使用动态模板构造普通格式的页面



6国际化  步骤

1建立中英文的资源文件,并配置好键值对

2在jsp页面动态导入I18n文件,

3在i18n文件进行判断

4在jsp页面用<bean:message  key="键值">




7全局转发与局部转发 

   <global-forwards>

<forward name="xxx" path="/global.jsp"></forward>

  <forward name="success" path="/uuu.jsp"></forward>

</global-forwards>

  全局转发  所有的action共用   局部转发 自己的action用 当两者重名时,优先选择局部转发



8全局异常与局部异常(附件 struts1.x中的异常处理.txt)

  <global-exceptions>

<exception key="资源文件中的key" type="包名.类名(如java.lang.ArithmeticException") path="/error.jsp"></exception>

</global-exceptions>


在error.jsp页面 <html:errors/>获取异常信息


全局异常 所有的action共用  局部异常 自己的action用 当两者重名时,优先选择局部异常



9  资源文件的使用(附件 资源文件设置.txt)

  默认情况下,Struts默认的资源文件为ApplicationResources.properties文件。


   在src目录下建立一个properties文件 一般为ApplicationResource.properties 里面写着键值对信息

   如 

      aaa=111

      bbb=222

      ccc=333

  在 struts-config.xml中配置使用资源文件 与<action-mappings>同级别,一般在<action-mappings>后,

     <message-resources parameter="文件名(不需要后缀名)"/> 如上的配置为<message-resources parameter="ApplicationResource"/> 


 如果该资源文件不在src目录下,而在其他包名下,则应加上包名,假设ApplicationResource.properties在com包下,则配置修改为

 <message-resources parameter="com/ApplicationResource"/>



在jsp页面上通过bean标记 可输出资源文件的内容

  <bean:message key="aaa"/>

  在页面上将显示111




10ActionError与ActionMessage 

   actionError 1.1版本  1.2版本推出actionMessage actionMessage是actionError的父类

   actionError从语义上一般是指错误信息  actionMessage指的是一般信息


ActionError类与ActionErrors类

ActionError类从不独立进行错误处理,它们总是被存储在ActionErrors对象中。ActionErrors对象保存ActionError类的集合以及它们特定的属性值,我们可以使用自己定义的属性值,或是使用ActionErrors.GLOBAL_ERROR.


 如下使用

   ActionErrors errors = new ActionErrors();

   ActionError error = new ActionError("资源文件中的key值",“要传递进去的参数值(一个或多个(字符串数组))");

  errors.add(ActionErrors.GLOBAL_ERROR,error);//或者使用

  errors.add("属性名",error )

  saveErrors(req,errors);


在页面上通过


<html:errors />   显示所有错误


<html:errors property="属性名"/>  显示对应的属性错误


ActionError类有两个构造方法 分别有一个参数和两个参数的

一个参数的 参数就是资源文件中的键值

两个参数的  第一个参数是资源文件中的键值,第2个参数是我们可以传进资源文件中的参数值



  ActionMeaaage类与ActionMeaaages类



    <html:messages id="aaa" property="属性名" message="true"> 

    <bean:write name="aaa"/> 

</html:messages> 




11dispatchaction
 action类继承DispatchAction
   (1)编写如下类似方法
   public ActionForward add(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
         System.out.println("进入add方法");
        return mapping.findForward(SUCCESS);
    }

    public ActionForward update(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
       System.out.println("进入update方法");
        return mapping.findForward(SUCCESS);
    }
 (2)在action配置处加入parameter="method"  
 (3)调用该action时传参数methoda=add或者其他方法名即可
   
  小技巧 不需要强转
      String name = (String) PropertyUtils.getSimpleProperty(form, "userName"); 
     String password = (String) PropertyUtils.getSimpleProperty(form, "password"); 


12动态form (附件 动态form.txt)
 
     动态ActionForm是struts从1.1版本开始引入一项新的技术,即在创建ActionForm时
                      可以不用通过编程的方式而只要通过struts-config.xml文件中进行配置,以后在struts运行时,会自动根

                      据struts-config.xml中配置的DynaActionform来生成一个Action实例
    为什么要使用DynaActionform

                       很显然随着应用程序的变大,数百个ActionForm 这样不仅编程起来麻烦,以后维护起来也麻烦,比如:

                       某个属性变化了,则需要修改源代码,然后重新编译,但是如果使用DynaActionform则只需要修改

                       struts-config.xml配置文件就行了。这样提高了应用程序的开发效率与应用程序的可维护性



13验证框架
一种是通过ActionForm的validate函数进行验证,另一种就是利用validate框架进行验证
六种类的关系: 

1:普通form(从下向上继承)  
ActionForm  //不用验证框架作验证    如要验证  重写validate方法          
validatorForm //使用验证框架时必须继承它,但只能做同一种验证(即只提交一个按键时的验证) 
validatorActionForm //使用验证框架验证时,可以更为精确的去处理业务逻辑,针对的是不同的按键的path(即可以作不同的验证,如,既可以验证是否为空,又可以同时验证是否小于几位) 

2:动态form(从下向上继承) 
DynaActionForm     //不用验证框架作验证    如要验证 写一个form类继承它 重写validate方法 struts-config.xml配置时改为你写的类         
  | 
  | 
DynaValidatorForm 
  | 
  | 
DynaValidatorActionForm 


我们自己的form 必须继承validatorForm 或validatorActionForm 或DynavalidatorForm 或DynavalidatorActionForm 

对于 validatorForm 和DynavalidatorForm 是针对form的验证 
对于 validatorActionForm 和DynavalidatorActionForm 是针对path的验证 


创建Validation.xml 
下面介绍一下validation.xml配置文件的标签: 
<form-validation></form-validation>是总框架 
<formset></formset>是对Form里的数据进行配置 
<form name="ActionForm对应的名称"></form>对一个ActionForm里的数据进行验证配置 
<field property="ActionForm里的属性名" depends="验证规则,可以是Validation-rules里定义好的也可以是自定义的验证规则">这里配置一个属性的验证内容 
<arg0 name="对应的验证规则名称" key="可以直接填入数值,也可填入变量表达式:${var:变量名}" resource="true/false"(代表是否从资源文件中读取信息,否则Key的值以参数的形式返回)> 
<var></var>定义一个变量的标签体,可以在里面具体设置变量的名称以及数值 
<var-name>对应Key里定义的变量名称</var-name> 
<var-value>值</var-value> 
<msg name="对应的验证规则名称" key="资源文件中定义的变量名称">这里定义了信息变量后,会默认定义的信息变量。 
在验证规则中大部分可以使用已经预定义好的规则,它们在validator-rules.xml里,当然我们自己也可以定义规则。 

其实,这个文件名可以是任意的,可以起成别的名字,比如:validators.xml,不过,也要相应修改struts-config.xml文件中的加入validator框架PlugIn中的value属性。这个value属性用来指定validator-rules文件和具体的验证文件。 


14客户端验证
加上两句话
<html:form action="add.do?method=add" method="post" onsubmit="return validateLoginDynaValidatorForm(this);">
<html:javascript formName="loginDynaValidatorForm"/>


15Titles框架
what  ---Struts Tiles框架提供了一种模板机制,模板定义了网页的布局,同一模板可以被多个Web页面共用。
why   ---
创建可重用的模板
动态构建和装载页面
定义可重用的Tiles组
支持国际化 
how  ----
Tiles标签库
Tiles组件的配置文件
TilesPlugIn插件 

16解析struts源码


1 7  Action ActionForm 是单例的吗? Action 是线程安全的吗?

  

   Action 是单例的,不是线程安全的

   每当有一次用户的请求, ActionFrom 就会被创建一次



18  struts缺点: 

       (1)struts的配置和结构过于复杂。
       (2)因为actionServlet依赖于web容器,所以测试不太方便。
       (3)Struts1的Action类是单例模式,必须设计成线程安全的。


19  struts1的客户端验证于服务端验证的区别? 

答案:Struts中客户端验证跟服务器端验证有区别:客户端验证直接写一个action文件便可实现,而服务器端验证必须通过客户端程序去调用服务器端相 应的 WebServices,实现业务逻辑. 它们的本质区别是,就是客户端数据校验是在客户端上进行的,而服务器端校验是在服务器上进行的,在速度上客户端要快很多,但也有缺陷,就是当有黑客攻击的时候,他完全可以绕过客户端直接和服务器交互。 



20关于Struts框架中的注意点

1.do请求后缀可以被改变
2.action类必须继承Action
3.execute方法是struts会自动调用的方法,不能随意修改
4.execute方法中的form是struts自动创建并建立的联系
5.form类必须继承ActionForm
6.页面中的html标记中的property必须和form java类中的属性相对应
7.form java类中的属性名必须配置setter和getter方法,而这些方法都是自动被调用的
8.页面中的<html:form action="/login">action的值的映射必须在struts-config.xml文件中存在
9.标签中的声明是必须的,但是前缀的名称是可以修改的
10.页面中的标签引用uri="http://struts.apache.org/tags-html",uri 的值是不能任意改变的




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics