struts2 的基本知识点

Action的定义方法:     模型,多实例单线程

         1、不实现任何接口,不继承任何类(Object)    体现了Struts2框架的轻侵入性

                   publicclass MyAction{

                            publicString execute()throws Exception{}方法签名不能有任何修改

                   }

                  

         2、实现Acto你接口

                   5大常量

                            ERROR执行出错,跳转到错误处理页

                            INPUT跳转输入页

                            NONE执行没有任何问题,但是不跳转任何页面

                            SUCCESS执行正常,跳转到成功页

                            LOGIN跳转到登录页面

                   1个抽象方法

                            execute()

                           

         3、继承ActionSupport,推荐使用

                   支持Action接口,所以5大常量可以直接使用

                   支持服务器端数据校验

                            .addFieldError  addActionError

                   支持国际化和本地化处理

                  

         为了实现类内高内聚,类间弱耦合,所以可以将一个实体的相关CRUD定义在一个Action类

                   自定义方法名,但是签名必须和execute类似,例如  public String add()throwsException{}

                  

                   配置:

                            <action name="user_*"class="com.yan.UserAction" method="{1}">

                                     *可以指代任意长度的任意字符,可以匹配user_add user_deluser_detail...

                                     {1}表示和*匹配的具体内容,例如匹配user_add{1}表示add

                                    

                            特殊定义<actionname="*_*" class="com.yan.{1}Action" method="{2}">

                                     例如User_add.action第一个*表示User,第二个*表示add,则这个配置实际上就成了

                                     <actionname="User_add" class="com.yan.UserAction"method="add">

                                     这里注意User受字母大写

                                    

                            特殊定义<actionname="*">如果没有定义class属性,则默认class是ActionSupport,*可以匹配任何内容

                                     <actionname="*">

                                               <result>/{1}.jsp  表示使用abc.action不需要额外定义对应的Action类,直接跳转到同名的jsp

                                              

                                                                

Action如何接收用户提交数据

         1、属性驱动

                   页面<inputname="username"/>

                   Action类  private String username;  属性名称和提交参数的名称一致

                            如果需要则自动进行类型转换,如果转换失败则自动跳转input进行报错

                           

         2、模型驱动,实现一个ModelDriven接口

                   publicclass UserAction extends ActionSupport implements ModelDriven<UserBean> {

                            privateUserBean user=new UserBean();没有对应的get/set方法     

                            publicUserBean getModel() {

                                     returnuser;

                            }

                   }

                   页面<inputname="username"/>  username对应user中的username属性

                            页面输入域名称对应模型中的属性名即可

                           

         3、对象驱动   严格来说这不是struts2提供的功能,是OGNL提供的功能

                   publicclass UserAction extends ActionSupport {

                            privateUserBean user=new UserBean();//可以new也可以不new,这里需要get/set方法

                           

                   提交数据时应该为"对象名称.属性名"的方式,例如user.username=zhangsan&user.password=123456    

提交数据的中文乱码问题:

         常量配置struts.i18n.encoding=UTF-8,在Struts2中默认采用的是UTF-8编码字符集

                  

         解决方案1:所有的页面统一使用UTF-8编码,如果提交中文则使用post提交【推荐使用】                                      

                  

         解决方案2:修改常量struts.i18n.encoding=GBK,并且多有页面统一GBK

        

服务器端编码数据校验:   ---使用配置文件校验

         1、场景1:

                   publicclass MyAction{

                            publicString execute()throws Exception{}

                            publicvoid validate(){this.addFieldError  }

                   }       

                  

                   运行:首先创建MyAction对象,并执行对应的set方法注入请求参数,然后框架调用validate方法进行数据校验,

         如果执行过程中使用addFieldError添加了报错信息,则自动转向到input对应的物理页面,不会执行execute方法.

         要求:如果需要使用服务器端数据校验,则必须在struts.xml中配置<result name=input>

        

         2、常见2:Action类中不仅仅只有execute方法

                   publicclass MyAction{

                            publicString add()throws Exception{}

                            publicvoid validateAdd(){}专门针对add方法的数据校验

                           

                            publicString del()throws Exception{}

                            publicvoid validateDel(){}专门针对del方法的数据校验

                   }

                  

                   如果既定义了execute方法,也有add之类的方法

                            定义方法1:public classMyAction{

                                                                 publicString add()throws Exception{}

                                                                 publicvoid validateAdd(){}专门针对add方法的数据校验,注意方法名称由"validate+对应调用的方法名"组成,注意方法名称首字母大写

                           

                                                                 publicString execute()throws Exception{}

                                                                 publicvoid validate(){}

                                                        }

                                                       

                                               但是validate方法在执行当前类的所有方法之前都会被执行

                                              

                            定义方法2: 修改validate方法名称

                                               publicclass MyAction{

                                                                 publicString add()throws Exception{}

                                                                 publicvoid validateAdd(){}专门针对add方法的数据校验

                           

                                                                 publicString execute()throws Exception{}

                                                                 publicvoid validateExecute(){}  只针对execute方法的数据校验

                                                        }                          

                                                       

                                     publicclass UserAction extends ActionSupport implements ModelDriven<User> {

                                               privateUser user = new User();

                                               privateString repassword;

                                    

                                              publicString add() throws Exception {

                                                        System.out.println(user);

                                                        returnLOGIN;

                                               }

                                               publicvoid validateAdd() {

                                                        if(user!=null){

                                                                 if(user.getPassword()!=null&& user.getPassword().trim().length()>0)

                                                                           if(!user.getPassword().equals(repassword))

                                                                                    this.addFieldError("repassword","两次输入口令不一致!");

                                                        }

                                               }                

        

         如何打开页面时给输入域设置默认值

                   <s:radiolist="#{true:'男',false:'女'}" name="sex" label="性别"value="true"/>

                  

                   建议:进入Action,然后在Action中设置默认值后跳转到输入页

                            publicclass UserAction extends ActionSupport implements ModelDriven<User> {

                                     privateUser user = new User();

                           

                                     publicString toadd() throws Exception {

                                               user.setUsername("包好龙");

                                               user.setSex(false);

                                               return"add";

                                     }

                                    

                            <s:radiolist="#{true:'男',false:'女'}" name="sex" label="性别"/>自动回填

                           

         如何避免直接使用URL访问页面

                   WEB-INF文件夹是不允许直接访问,但是允许跳转。所以一般建议将页面存放在/WEB-INF/content/下

                            <resultname="add">/WEB-INF/content/user/add.jsp</result>                     

        

运行时常量配置  struts2-core.jar中/org/apache/struts2/default.properties

         1、配置默认后缀

                   struts.action.extension=action,,

                  

                   配置方法1:  struts.xml

                            <?xmlversion="1.0" encoding="UTF-8"?>

                            <!DOCTYPEstruts PUBLIC

                                     "-//ApacheSoftware Foundation//DTD Struts Configuration 2.5//EN"

                                     "http://struts.apache.org/dtds/struts-2.5.dtd">

                            <struts>

                                     <constantname="struts.action.extension" value="do,abc"/>

                            </struts>

                           

         2、配置开发模式

                   struts.devMode= false   Struts2提供一个比较友好的报错显示页面

                            相当于配置struts.i18n.reload = true和struts.configuration.xml.reload = true

                           

                  配置方法2:可以在web.xml中前端控制器上配置参数,也可以类似上面的配置,使用constant标签

                            `        <filter>

                                               <filter-name>struts2</filter-name>

                                               <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>

                                               <init-param>

                                                        <param-name>struts.devMode</param-name>

                                                        <param-value>true</param-value>

                                               </init-param>

                                     </filter>

                                     <filter-mapping>

                                               <filter-name>struts2</filter-name>

                                               <url-pattern>/*</url-pattern>

                                     </filter-mapping>

                                    

                   3、默认主题的常量设置

                            struts.ui.theme=xhtml定义默认主题

                            struts.ui.templateDir=template定义主题的文件夹

                            struts.ui.theme.expansion.token=~~~

                            struts.ui.templateSuffix=ftl默认使用Freemarker定义不同的显示            

                           

                            <constantname="struts.ui.theme" value="simple"/> 

                                                                                                                               

Struts2默认提供了4种视图技术:  jsp freemarker velocity  xslt

Struts2为了简化页面编写提供了2类标签库:UI标签库和非UI标签库

         引入标签库:<%@taglib uri="/struts-tags" prefix="s"%>

         引入标签库所使用的css和js文件<s:head/>

         UI标签库:  <form>

                   针对UI标签的显示效果,Struts2定义了4种主题:同时支持自定义主题

                            xhtml默认主题,使用css+table进行显示格式控制

                            css_xhtml使用css+div进行显示格式控制

                            simple使用简单格式

                            ajax提供了异步支持

                  

                   <s:formaction="user_add.action">用于生成<formaction="user_add.action" method="post">

                            同时提供了报错信息的显示支持

                           

                   <s:textfieldname="username" label="用户名称"/>用于生成对应的单行输入域<inputname="username" type="text"/>

                   <s:passwordname="password" label="用户口令"/>用于生成对应的单行密码域<inputtype="password" name="password"/>

                   <s:radiolist="#{true:'男',false:'女'}" name="sex" label="性别"/>用于生成radiobutton实现排他性选择

                   <s:submitvalue="提交数据"/>用于生成提交按钮,value就是按钮上的提示文本

             <s:reset value="重置数据"/>用于生成重置按钮,value就是按钮上的提示文本

                       xhtml主题默认按钮的显示效果为一行一个按钮,按钮向右对齐

            

                       设置标签所使用的主题,控制按钮的显示效果

                                <tr><tdcolspan="2">

                                         <s:submitvalue="提交数据" theme="simple"/>

                                         <s:resetvalue="重置数据" theme="simple"/>

                                </td></tr>       

OGNL:对象图导航语言,是一种功能强大的EL,允许调用方法

         定义集合{元素1,元素2,...}

         定义Map:#{key1:value1,key2:value2,....}                                                 

猜你喜欢

转载自blog.csdn.net/java_laoming/article/details/81044427
今日推荐