struts1.x相关知识小结

1、   ActionForm如果要求在传递到Action之前进行校验,必须实现validate方法。这属于服务器端表单验证,数据库的验证不能放在这里。客户端验证用JavaScript。如果要在组装前初始化属性,则要重写reset方法。

2、   DynaActionForm动态ActionForm。动态ActionForm是为了避免标准ActionForm膨胀而设计的,使用动态ActionForm可以获得标准ActionForm的所有功能。

3、   使用动态ActionForm时,在<form-beans>的<form-bean>中指定type为type="org.apache.struts.action.DynaActionFrom"

4、   DynaActionForm通过其类内的一个HashMap进行数据收集和转换,实际上存取数据都是通过这个map来实现的。在Action中用get方法获取属性,然后强制转换。在jsp文件中,用正则表达式:${dynaForm.map.username}的形式进行获取,其中dynaForm是在struts-config.xml中定义的name。

5、   用ActionForm上传文件,需要把form标签中的enctype改为multipart/form-data。文件的封装用Struts给的FormFile。在Action中写为

       if(file!=null){

FileOutputStream fos = new FileOutputStream("c:\\"+file.getFileName());

           fos.write(file.getFileData());

           fos.flush();

           fos.close();

    }

6、   上传可在struts-config.xml中的<controller>中进行配置。

7、   对没有输入域的属性,jsp脚本得到的是null,el表达式得到的是””。如果有输入域,不输入任何东西,jsp脚本和el表达式得到的都是””。

8、   ActionForm对于int,double,Boolean,和java.sql.Date等类型可以进行自动转换。表单的所有数据都是通过text类型传送,也就是String类型。ActionForm会自动转换了相关类型。但java.util.Date等不会自动转换,需要用户自己写转换方法。

9、   自己写转换类的时候需要实现Converter接口。写了这个转换器类以后要注册。注册方法可以继承ActionServlet类,然后重写其init方法。但是这样做比较麻烦。因此,一般可以重新写一个servlet类,继承HttpServlet类,重写其init方法,在init方法中使用ConvertUtils的静态方法register进行注册。完成以后要在web.xml文件中对该servlet进行声明,由于要求该servlet在tomcat启动的时候就初始化,因此要配置<load-on-startup>选项,值可随意指定一个大于0的数。

10、             另外还可以写一个类,实现Struts的PlugIn接口进行注册。在init方法中用同样的方法进行注册。最后在Struts-config.xml文件中用<plug-in>标签进行配置。在该标签中指定className为该自定义类的完整路径即可。



ActionForward

1、   ActionForward在默认情况下输入转发,如果在struts-config.xml中的<forward>中指定redirect为true,则会重定向。转发只需要一个request,重定向则需要两个request。重定向的含义是重当前地址定向到目标地址,地址栏的地址会改变,而转发则不会。

2、   转发时找<forward>是先在局部找,找不到再到全局查找。一些公共页面,比如出错页面,写在<global-forwards>中。

3、   使用Struts框架,一般情况下都让Struts来做页面转向。但若是遇到特殊情况下,一定需要自己转向。可以使用response的sendRedirect方法来进行。其参数需要用request.getContextPath()再加上一个页面即可。同时需要返回null,让Struts不再进行转向。

4、   要实现动态的ActionForward,需要自己定义一个ActionForward实例,然后调用setPath方法,最后返回该实例即可。举例:ActionForward af = new ActionForward(); af.setPath(“/page”+i+”.jsp”); return af;

5、   className这个属性,是Struts实现的一个扩展性。当ActionForward不能满足自己的需求,可以自己写一个类,继承ActionForward,然后用className指定该类的全路径,Struts就会使用你自定义的类来进行所有页面转向。





ActionMapping

1、   在struts-config.xml中每个action标签对应一个ActionMapping实例。

2、   Action标签的forward属性,也是做页面转向用的。通过这个属性,和forward标签,可以把项目中的所有页面转向都配置到struts-config.xml中。

3、   unknown属性的配置,主要是为了处理页面不存在的情况。比如在地址栏随便输入一个不存在的地址,如果不配置unknown属性,会出现404错误,即页面找不到。但如果配置了一个unknown属性,当地址不存在时,服务器会自动寻找配置了unknown属性的地址,然后转向到该地址。一般情况,该属性用于容错处理。注意:该属性只对do起作用。在所有action标签中,总共只能配一个unknown属性。

4、   forward和type属性是互斥的,只有一个生效。Forward优先级高。

你可能感兴趣的:(jsp,xml,servlet,正则表达式,struts)