struts2 convention插件的使用(一)
?
?
?
struts2 convention插件的相关文章在网络上还很少,今天研究了一下
官方文档?http://cwiki.apache.org/WW/convention-plugin.html
?
?
?
附件内源码环境(下载请到页尾)
Dynamic Web Project
eclipse3.3
jdk1.6
tomcat6
?
必要jar列表
?
commons-fileupload-1.2.1.jar
commons-logging-1.0.4.jar
freemarker-2.3.13.jar
ognl-2.6.11.jar
struts2-convention-plugin-2.1.6.jar
struts2-core-2.1.6.jar
xwork-2.1.2.jar
??
?
struts2.xml配置如下
?
?
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><!--开发模式设置开始//--><!--++++++++++++++++++++++++++++++++++++++++++++++++开发状态 --><constant name="struts.devMode" value="true" /><!-- 国际化资源重新加载 --><constant name="struts.i18n.reload" value="true" /><!-- 配置文件重新加载 --><constant name="struts.configuration.xml.reload" value="true" /><!-- convention类从新加载 --><constant name="struts.convention.classes.reload" value="true" /><!--++++++++++++++++++++++++++++++++++++++++++++++++开发模式结束 --><!-- 主题 --><constant name="struts.ui.theme" value="simple" /><!-- 地区 --><constant name="struts.locale" value="zh_CN" /><!-- 国际化编码 --><constant name="struts.i18n.encoding" value="UTF-8" /><!-- 扩展--><constant name="struts.action.extension" value="action,do,jsp" /><!-- 启用动态方法调用 --><constant name="struts.enable.DynamicMethodInvocation" value="true" /><!-- 设置Struts 2是否允许在Action名中使用斜线 --><constant name="struts.enable.SlashesInActionNames" value="false" /><!-- 结果资源所在路径 --><constant name="struts.convention.result.path" value="/"/> <!-- action后缀 --><constant name="struts.convention.action.suffix" value="Action"/> <!-- 名称首字母小写 --> <constant name="struts.convention.action.name.lowercase" value="true"/> <!-- 分隔符 一个action名字的获取。比如为HelloWorldAction。按照配置,actionName为hello_world。 --> <constant name="struts.convention.action.name.separator" value="_"/> <!-- 禁用扫描 --> <constant name="struts.convention.action.disableScanning" value="false"/> <!-- 默认包 --> <constant name="struts.convention.default.parent.package" value="default"/> <!--确定搜索包的路径。只要是结尾为action的包都要搜索。basePackage按照默认不用配置,如果配置,只会找以此配置开头的包。locators及locators.basePackage都是一组以逗号分割的字符串。 --> <constant name="struts.convention.package.locators" value="actions"/> <!-- 禁用包搜索 --> <constant name="struts.convention.package.locators.disable" value="false"/> <!-- 基于什么包 --> <constant name="struts.convention.package.locators.basePackage" value="com.sunflower.actions"/> <!-- 排除的包 --> <constant name="struts.convention.exclude.packages" value="org.apache.struts.*,org.apache.struts2.*,org.springframework.web.struts.*,org.springframework.web.struts2.*,org.hibernate.*"/> <!-- 包含的包 --> <!-- 包括的jar,一般用于大型项目,其action一般打包成jar --> <constant name="struts.convention.action.includeJars" value="" /> <!-- 结果类型 --> <constant name="struts.convention.relative.result.types" value="dispatcher,freemarker"/> <!-- 如果此值设为true,如果一个action的命名空间为/login,名称为HelloWorldAction。result返回值是success,默认会找到/WEB-INF/pages/login/hello_world.jsp(如果有hello_world_success.jsp就找这个文件,连接符“_”是在<constant name="struts.convention.action.name.separator" value="_"/>中配置的)。如果有一个action的result返回值是“error”,就会找/WEB-INF/pages /login/hello_world_error.jsp。 如果此值设为false,如果一个action的命名空间为/login,名称为HelloWorldAction。result返回值是success,默认会找到/WEB- INF/pages/login/hello_world/index.jsp(如果有success.jsp就找这个文件)。如果有一个action的result返回值是“error”,就会找/WEB-INF/pages /login/hello_world/error.jsp。 --> <constant name="struts.convention.result.flatLayout" value="true"/> <constant name="struts.convention.action.mapAllMatches" value="false"/> <!-- 检查是否实现action --> <constant name="struts.convention.action.checkImplementsAction" value="true"/> <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/><constant name="struts.convention.redirect.to.slash" value="true"/><package name="default" extends="struts-default"><interceptors><interceptor-stack name="defaultStack"><interceptor-ref name="exception" /><interceptor-ref name="servletConfig" /><interceptor-ref name="actionMappingParams" /><interceptor-ref name="staticParams" /><interceptor-ref name="params" /></interceptor-stack></interceptors></package></struts>
?
?
NavigatorAction源码
?
package com.sunflower.actions;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Actions;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import com.opensymphony.xwork2.ActionContext;@Results( {@Result(name = "next", location = "/next.jsp", type = "dispatcher"),@Result(name = "error", location = "error.jsp", type = "dispatcher"),@Result(name = "redirectAction", location = "./child/child", type = "redirectAction"),@Result(name = "redirect", location = "http://sunflowers.iteye.com", type = "redirect") })public class NavigatorAction {private String actionName;public void setActionName(String actionName) {this.actionName = actionName;}public String index() {outputMsg("method:index");return "next";}public String execute() {outputMsg("method:execute,no index method");return "next";}public String error() {try {throw new Exception();} catch (Exception e) {outputMsg(e);return "error";}}public String redirect() {System.out.println("重定向:rediret");return "redirect";}public String redirectAction() {outputMsg("navigatorAction 跳转而来,原地址是navigator!redirectAction.action,请查看地址栏");return "redirectAction";}@Action(value = "/test/childTest")public String action() {outputMsg("@action ---method:action");return "next";}@Actions( { @Action(value = "/test/action1"),@Action(value = "/test/action2") })public String actions() {outputMsg("@actions ---method:actions,action=" + actionName);return "next";}private void outputMsg(Object msg) {System.out.println(msg);ActionContext.getContext().put("msg", msg);}}?
?
?ChildAction源码
?
package com.sunflower.actions.child;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;@Results( {@Result(name = "next", location = "next.jsp", type = "dispatcher")})public class ChildAction {public String execute() {System.out.println("childAction 默认方法执行");return "next";}}?
?index.jsp源码<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>struts2 convention测试</title><style>* {line-height: 2em;}a:visited,a:hover,a:active,a:link {color: #00f;}</style></head><body>后台Action <ul name="code"><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title><style>*{line-height:3em;}</style></head><body><h1>struts2 convention插件使用测试</h1>测试信息<br />${msg}<br /><a href="#" onclick="window.history.go(-1);return false;">返回</a></body></html>?
?
?child/next.jsp源码
?
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title><style>*{line-height:3em;}</style></head><body>child/next.jsp:{msg}</body></html>?
?
?
?
?
?
?
?
?
?
?
?
?
?
?