首页 > 代码库 > struts零配置的简单实现(一)
struts零配置的简单实现(一)
所需要的包:
- struts2-config-browser-plugin-2.3.15.2.jar
- struts2-convention-plugin-2.3.15.2.jar
要注意的是,添加这两个jar包之后也要把相关的struts的jar包换成相应的版本,xwork-core也要是相应的版本,不然就是各种报错
struts.xml的配置如下:
<!-- 设置映射页面的路径 -->
<constant name="struts.convention.result.path" value="http://www.mamicode.com/WEB-INF/jsp" />
<!-- 设置扫描Action类的关键字 -->
<constant name="struts.convention.package.locators" value="http://www.mamicode.com/action" />
<!-- 设置映射页面的命名分隔符 -->
<constant name="struts.convention.action.name.separator" value="http://www.mamicode.com/-" />
1、struts.convention.result.path的作用:
指定当页面访问action时,响应的页面所在的路径
2、struts.convention.package.locators的作用:
指定在那些包下扫描**Action,只要包名中含有指定的字段即可
3、struts.convention.action.name.separator的作用:
指定用于切割Action类去除Action后缀后的那一部分的字符,从而形成映射该类的一个页面名称,如:
UserTestAction --> UserTest --> user-test.jsp
它会根据大写字母来进行分割的,并且会把大写字母变成小写
空间命名的确定:
由struts.convention.package.locators所指定的字符后的部分组成,如若:
<constant name="struts.convention.package.locators" value="http://www.mamicode.com/action" />
对于com.lzj.www.action,其空间命名为"/",
对于com.lzj.www.action.test,其空间命名为"/test"
资源名的确定(也就是所要访问的action)
由Action类名去掉Action的后缀组成,在这里资源名实质就是经过struts.convention.action.name.separator处理过后的结果,如若:
UserAction,其资源名为:"user"
TestStrutsAction,其资源名为:"test-struts"
访问方式:(假设项目名为:StrutsTest)
若:包名为:com.lzj.www.action,有一个Action:UserAction
则访问方式为:http://localhost:8080/StrutsTest/user
该Action所映射的页面:user.jsp
访问url分析:
/user的由来:首先由com.lzj.www.action可得空间命名为"/",再通过UserAction可得资源名为"user"
若:包名为:com.lzj.www.action.test,有一个Action:TestStrutsAction
则访问方式为:http://localhost:8080/StrutsTest/test/test-struts
该Action所映射的页面:test-struts.jsp(该页面要放到struts.convention.result.path所指定的路径下的test文件夹下,也就相当于把空间命名转换成了一个文件夹)
可能会出现的异常:
1、 java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.startsWith...
显而易见:问题出在commons.lang.jar上:
可能性:1、版本冲突,可能存在两个不同版本的jar包
2、版本过低(我遇到的就是这样..)
2、 java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor...
导入asm相关的包即可
struts零配置的简单实现(一)