zoukankan      html  css  js  c++  java
  • struts 2读书笔记Convention插件与“约定”支持

               Convention插件的主要特点是“约定优于配置”。

               Action的搜索和映射约定

               为了能够使用Convention插件,必须在Struts 2 应用中安装Convention插件,即将Struts2-convention-plugin.jar文件复制到Struts 2应用的WEB-INF/lib路径下。

               对于convention插件而言,他会对以下两种java类的Action处理:

               1、  所有实现了com.opensymphony.xwork2.Action的java类

               2、   所有类名以Action结尾的java类

               Struts 2的convention插件还允许设置如下三个常量

              

    常量

    说明

    Struts.convention.exclude.packages

    指定不扫描那些包的java类,位于这些包结构下的java类将不会被自动映射成Action

    Struts.convention.package.locators

    Convention插件使用该常量指定的包作为搜索Action的根包。如:对于action.user.LoginAction类,按约定本应映射到/user/login;

    如果将该常量设置为user,则该Action将会映射到/login

    Struts.convention.action.packages

    Convention插件以该常量指定包作为根包来搜索Action类。

             

               当找到合适的Action类后,Convention插件将会按照约定部署这些Action。部署Action时,actions、action、struts、struts2包会映射成根命名空间,而这些包下的子包则会被映射成对应的命名空间。

               如:

                    Com.app.action.books.GetBooks                                 映射到/books

                    Com.app.action.RegistAction                                         映射到/

                    Com.app.action.struts.manage.user.UserAction      映射到/manage/user

               按约定映射name属性

               Action的name属性(即该action所要处理的URL),根据该Action的类名映射,映射Action的name时,需要遵循如下两个步骤:

               1、  如果该Action类名包含Action后缀,就将该Action类名的Action后缀去掉。否则就不会做任何处理

               2、  将Action类名的写法(每个单词首字母大写、其他字幕小写)转成中划线写法(有字母小写,单词与单词之间用中划线隔开)。

               如:

                      Com.app.action.LoginAction                                  映射到:/login.action

                      Com.app.action.user.loginAction                           映射到:user/login.action

                      Com.app.action.user.loginRegistAction               映射到:user/login-regist.action

               对于Action类的代码依然不需要做任何的改变。

               按约定映射result

               Action处理用户请求后会返回一个字符串作为逻辑视图,该逻辑视图必须映射到实际的物理视图。Convention默认也作为逻辑视图和物理视图之间的映射提供了约定

    默认情况下,convention总会到Web应用的WEB-INF\content路径下定位物理资源。故定位资源约定为、:actionName+resultCode+suffix。当某个逻辑视图找不到对应的视图资源是,convention会自动试图使用actionName+suffix作为物理视图资源

               如:假定所有的结果类型全部为:Dispatcher

    Action的URL

    返回的逻辑视图名

    对应的物理视图

    /login

    success

    \WEB-INF\content\login-success.jsp

    /user/login

    success

    \WEB-INF\content\user\login-success.jsp

    /user/regist

    error

    \WEB-INF\content\user\regist-error.jsp

               Action键的约定

                如果想一个Action处理结束后不是进入视图页面,而是进入另一个Action形成Action链。则只需要遵守下面三个约定:

                1、第一个Action返回的逻辑视图字符串没有对应的视图资源。

                2、第二个Action与第一个Action处于同一个包下。

                3、第三个Action映射的URL为:firstactionname+resultcode

                下面是一个实例:

                 第一个Action处理用户请求后、转到第二个Action继续处理。再由第二个Action转到视图页面,并打印相应的信息

                第一个Action:FirstActionjava

    public class FirstAction extends ActionSupport{
    	private String tip1;
    
    	public String getTip1() {
    		return tip1;
    	}
    	
    	public void setTip1(String tip1) {
    		this.tip1 = tip1;
    	}
    
    	public String execute(){
    		setTip1("第一个action提示");
    		return "second";
    	}
    }


              该Action处理用户请求后返回“second”字符串,为了让该Action处理结束后进入第二个Action。对于这个返回的字符串,第二个Action的映射的URL应为:first-second。

    所以第二个Action的类名为:FirstSecondAction。

             下面是第二个Action:FirstSecondAction.jsp 

    public class FirstSecondAction extends ActionSupport {
    
    	private String tip2;
    	
    	public String getTip2() {
    		return tip2;
    	}
    
    	public void setTip2(String tip2) {
    		this.tip2 = tip2;
    	}
    
    	public String execute() throws Exception {
    		setTip2("第二个action 提示....");
    		return SUCCESS;
    	}
    	
    }

               当firstAction处理用户请求之后,系统将会自动调用FirstSecondAction处理用户请求。然后转到视图资源。

              第一个jsp页面:thefirst.jsp点击按钮后,转到第一个action处理用户请求      该Action=”first“      

    <form action="first">            
        	<input type="submit" value="点击链接第二个action">
    </form>


            第二个jsp页面:第二个视图资源。当第二个Action处理用户请求完后,转到该视图资源。并打印相应的信息 。

           由于第二个Actiond的result的映射是:first-second-success。所以该视图资源的名字为:first-second-success.jsp

    	${tip1 }<Br />
       	${tip2 }<br />

           将会得到下面的显示页面:

        

          读李刚《轻量级java EE企业应用实战(第三版)—struts 2+Spring 3+Hibernate整合开发》


     

          

  • 相关阅读:
    从零基础到软件开发,应该走怎样的路?入门者不妨看看这 5 步!
    C/C++编程笔记:C语言入门知识点(二),请收藏C语言最全笔记!
    学编程不知如何入门?10 年经验的底层开发程序员,教你如何入门!
    C/C++编程笔记:C语言入门知识点(一),请收藏C语言最全笔记!
    编程入门须知:都说零基础不好学编程,那么什么是编程基础?
    C/C++编程笔记:编写完成了一个C/C++程序,如何做一个界面出来?
    编程入门必看:带你零基础了解编程和编程语言,入门应该学什么?
    python编程从零基础到项目实践第五章学习--字典
    python编程从零基础到项目实践第四章学习--列表与原组(2)元组相关
    python编程从零基础到项目实践第四章学习--列表与原组(1)列表相关
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3752297.html
Copyright © 2011-2022 走看看