Java EE----Action的书写方式和配置方式

来源:互联网 发布:mac导入iphone照片 编辑:程序博客网 时间:2024/05/21 06:31
三、Action访问环节 
Action 有三种书写方式
Action 有三种配置方式 


1、Action三种书写方式
第一种 用户定义Action类,可以不去实现任何接口,继承任何父类 
第二种 用户定义Action类,实现Struts2 提供Action接口 (更规范 Action写法 )
public static final String SUCCESS = "success";  数据处理成功,需要返回成功页面
public static final String NONE = "none";  数据处理成功,不想返回一个页面
public static final String ERROR = "error"; 当处理失败时,显示错误页面 
public static final String INPUT = "input"; 当参数非法,校验失败,返回input页面
public static final String LOGIN = "login"; Action需要登录才能访问,跳转login页面 


开发时,将以上五个值 称为逻辑视图 ,需要在struts.xml 中通过<result> 标签为每个逻辑视图,配置物理视图(真实页面文件路径)
<result name="success">/demo1/success.jsp</result>


public String execute() throws Exception;


第三种 用户定义Action类,可以继承ActionSupport 基类 
validate方法 提供用于对请求参数 合法性校验 


addActionError 方法 添加一个Action错误信息
addFieldError 方法 添加一个表单字段错误信息 


getText方法 获得国际化配置信息 


******* 实际开发中,用户定义Action类,通常继承ActionSupport 类 


2、指定Action 执行哪个方法 
1) 通过method属性 指定Action 调用方法 名称 (不写method 默认调用Action的execute方法)


<a href="${pageContext.request.contextPath }/addbook.action">添加图书</a> <br/>
<a href="${pageContext.request.contextPath }/updatebook.action">修改图书</a> <br/>


<action name="addbook" class="cn.itcast.struts2.demo3.BookAction" method="add"></action>
<action name="updatebook" class="cn.itcast.struts2.demo3.BookAction" method="update"></action>


结论:通过method属性,配置不同请求路径 访问同一个Action的不同方法 


2) 设置统配符 * , 设置通配符 <action name="*book" class="cn.itcast.struts2.demo3.BookAction" method="{1}"></action>


3)使用动态方法调用 ,必须设置常量 struts.enable.DynamicMethodInvocation = true 
在访问Action名称后 "!方法名" 进行动态方法调用  
${pageContext.request.contextPath }/curd.action ------ 执行CURDAction中execute方法 
${pageContext.request.contextPath }/curd!add.action ---- 执行CURDAction中 add方法 
${pageContext.request.contextPath }/curd!delete.action ---- 执行CURDAction 中delete方法 


3、 Action配置 默认Action和默认Class 
<default-action-ref name="default"></default-action-ref> 默认Action  ---- <action name=""> 没有找到匹配元素 

<default-class-ref class="cn.itcast.struts2.demo5.DefaultClass"></default-class-ref> 默认处理类  找到<action name="" > 没有配置class属性 

4、关于Action 的访问配置 三种方式  ---- 如何找到Action  
第一种 struts.xml  <action name="" class="" /> 访问name 找到class 
第二种 Conversion 约定书写 无需struts.xml 无需Annotation 注解 
第三种 Annotation 注解配置 Struts2 Action 

--------------------------------------------------------------------------------------------------------------------------------
四 Convension 零配置 
将struts2_blank下 11 jar 复制工程, 复制 struts2-convention-plugin-2.3.7.jar  总共12个


插件会自动搜索action、actions、struts、struts2包下所有Java类
1)所有实现了com.opensymphony.xwork2.Action的Java类
2)所有类名以Action结尾的Java类


<constant name="struts.convention.package.locators" value="action,actions,struts,struts2"/> 指定哪些包会被搜索,找Action 
<constant name="struts.convention.exclude.packages" value="org.apache.struts.*,org.apache.struts2.*,org.springframework.web.struts.*,org.springframework.web.struts2.*,org.hibernate.*"/> 哪些包不会被搜索


<constant name="struts.convention.result.path" value="/WEB-INF/content/"/> 结果页面路径 


下面Action 都符合 搜索要求
cn.itcast.struts2.HelloAction
cn.itcast.actions.books.BookSearchAction
cn.itcast.struts.user.UserAction
cn.itcast.estore.action.test.LoginAction


约定写法
cn.itcast.struts2.HelloAction 映射到 /hello.action
cn.itcast.actions.books.BookSearchAction  映射到 /books/book-search.action
cn.itcast.struts.user.UserAction 映射到 /user/user.action
cn.itcast.estore.action.test.LoginAction 映射到 /test/login.action


练习 : action.aaa.GetDataAction  翻译 /aaa/get-data.action 


web.xml 还是需要配置的, 只要配置Filter,请求才能进入struts2 框架 


结果页面,必须配置 struts.convention.result.path 所指定目录中 


访问cn.itcast.struts.user.UserAction返回success
Convention优先使用 WEB-INF/content/user/user-success.jsp
如果user-success.jsp不存在,会使用user-success.html
如果user-success.html不存在,会使用user.jsp




五、安装ConfigBrowser插件,通过该插件查看Action 的加载信息 
struts2-config-browser-plugin-2.3.7.jar 复制工程/WEB-INF/lib 

访问 http://localhost:8080/工程名/config-browser/index.action 
0 0
原创粉丝点击