首页 > 代码库 > Struts Convention Plugin 流程 (2.1.6+)
Struts Convention Plugin 流程 (2.1.6+)
首先添加lib:
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-config-browser-plugin</artifactId> <version>2.3.20</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>2.3.20</version> </dependency>
访问 http://localhost:8080/conv/config-browser/a.action 可以查看目前映射的所有路径
插件会按以下顺序执行:
1.寻找以下包:struts
, struts2
, action
,actions
任何深度找到的以上包都自动作为根目录
2.然后在包内寻找以下类:实现了
com.opensymphony.xwork2.Action
或者继承了com.opensymphony.xwork2.ActionSupport,或类名以Action结尾
3.映射为url:
com.example.actions.MainAction -> /maincom.example.actions.products.Display -> /products/displaycom.example.struts.company.details.ShowCompanyDetailsAction -> /company/details/show-company-details(全部为小写)
比如,
会映射成,
可以跳过某些包:struts.convention.exclude.packages
=org.apache.struts.*,org.apache.struts2.*,org.springframework.web.struts.*,org.springframework.web.struts2.*,org.hibernate.* (被跳过的包是无法再加入的,即使手动添加)
自动搜索的包名:struts.convention.package.locators
=action,actions,struts,struts2
自动搜索的包名开头:struts.convention.package.locators.basePackage=
自动搜索的类名结尾:struts.convention.action.suffix=Action
手动指定具体包:struts.convention.action.packages=
4.默认,所有的Result都到这里去找:WEB-INF/content
如, ,则可以通过 http://localhost:8080/conv/my-jsp.action 访问到
可通过常量控制:struts.convention.result.path
=/WEB-INF/content/
根据返回类型和返回字符串,要起不同的名字:
5.如果找不到这个页面文件,就认为这是个action,其他action可以在方法上添加@Action(“xx”),指明具体路径,这也就是Result Type为chain
如 中,
public class MyJsp extends ActionSupport { public String execute() { return "here"; }}
public class HimJsp extends ActionSupport { @Action("my-jsp-here") //通过指定为具体路径,实现chain,前提是没有那个页面文件 public String execute() { return "yes"; }}
最后会变成,
可以设置自动重载:
<
constant
name="struts.devMode" value=http://www.mamicode.com/"true"/>
<
constant
name="struts.convention.classes.reload" value=http://www.mamicode.com/"true" />
struts.convention.action.alwaysMapExecute =false 禁止自动调用execute()
struts.convention.action.disableScanning=true 禁用扫描
struts.convention.action.mapAllMatches =true 没有@Action也自动映射
struts.convention.action.name.lowercase=false 不要变成小写
struts.convention.action.name.separator=_ 名称分隔符
struts.convention.action.eagerLoading=true 不使用Spring的时候可以提高性能
Struts Convention Plugin 流程 (2.1.6+)