s2-Convention Plugin笔记

一、前文:

Convention 官方文档:http://struts.apache.org/2.3.3/docs/convention-plugin.html


二、安装:
使用Convention插件,你需要将其JAR文件放到你应用的WEB-INF/lib目录中,你也可以在你Maven项目的POM文件中添加下面包依赖

<dependency>
          <groupId>org.apache.struts</groupId>
          <artifactId>struts2-convention-plugin</artifactId>
          <version>2.3.3</version>
</dependency>

三、约定:

1.默认所有的结果页面都存储在WEB-INF/content下,你可以通过设置struts.convention.result.path这个属性的值来改变到其他路径

<constant name="struts.convention.result.path" value="/WEB-INF/page" />

实验:
1).创建一个com.wayne.web.action.LoginAction 
package com.wayne.web.action;

import com.opensymphony.xwork2.ActionSupport;

/**
 * Created by IntelliJ IDEA.
 * User: wayne
 * Date: 12-5-8
 * Time: 下午4:34
 */
public class LoginAction extends ActionSupport{
    @Override
    public String execute() throws Exception {
        System.out.println("login....");
        return SUCCESS;
    }
}

2)在WEB-INF/content创建一个login.jsp

3)访问http://localhost:8083/MyModule/login 出现login.jsp内容
注:官方文档上给出了一种no action exists(无Action类)存在的情况,即在没有真实Action的情况下Convention插件也会根据路径
找到相应的结果result。
实验:
1).在WEB-INF/content创建一个reg.jsp
2).在不创建RegAction的前提下,访问http://localhost:8083/MyModule/reg

2.搜索Action规则:
  a).默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。
     你可以通过设置struts.convention.package.locators属性来修改这个配置,你可以通过如下配置更改:
<constant name="struts.convention.package.locators" value="web,action" />  
注:刚开始,以为locators配置只能在上面给出的四种包里面选择,后测试发现

<constant name="struts.convention.package.locators" value="action,actioning" />

这样也能搜索到actioning包中的Action。

如果想让其忽略某些包搜索,插件提供了struts.convention.exclude.packages;

struts.convention.action.packages 这个配置struts2说是如果你想设置某些特殊的搜索根路径你可以用这个,可能就是要分的清晰一点。

b).在以上面的包为根路径搜索,搜索 继承com.opensymphony.xwork2.Action的类或者类名以Action结尾的类,将其视为Action类。
     例如:

          com.example.actions.MainAction
	  com.example.actions.products.Display (implements com.opensymphony.xwork2.Action)
	  com.example.struts.company.details.ShowCompanyDetailsAction
3.路径URL规则
  convention会将上述找到的Action类解析出相应的路径URL

          com.example.actions.MainAction -> /main
	  com.example.actions.products.Display -> /products/display
	  com.example.struts.company.details.ShowCompanyDetailsAction -> /company/details/show-company-details

解析规则是:
    a).命名空间:
        从定义的.package.locators标示开始到包结束的部分,就是命名空间。举个例子:

Com.ustb.web.user.userAction的命名空间是:”/user”。
		Com.ustb.web.user.detail.UserAction的命名空间是:”/user/detail”

b).具体资源部分命名:
        Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。
            然后将将每个分部的首字母转为小写,用’-’分割,你可以设置struts.convention.action.name.separator 如

<constant name="struts.convention.action.name.separator" value="-" />

4.关于Results and result codes
下面是actiong和结果模版的映射关系:


URL 	Result          File that could match 	Result Type
/hello 	success 	/WEB-INF/content/hello.jsp 	Dispatcher
/hello 	success 	/WEB-INF/content/hello-success.htm 	Dispatcher
/hello 	success 	/WEB-INF/content/hello.ftl 	FreeMarker
/hello-world 	input 	/WEB-INF/content/hello-world-input.vm 	Velocity
/test1/test2/hello 	error 	/WEB-INF/content/test/test2/hello-error.html 	Dispatcher

上面只是我根据文档的一小部分总结,

更详细可以看文档,或者看这个链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值