Struts2学习笔记——002实现一个Action类的最常用方法

原创 2016年10月19日 19:23:46

1,实现一个Action的最常用方法就是:从ActionSupport继承

ActionSupport类有一个execute()方法,返回值类型为字符串,struts.xml会根据返回的字符串,找到相应的result标签中的内容(比如某一个jsp),然后返回到客户端。

ActionDemo1.java

import com.opensymphony.xwork2.ActionSupport;

public class ActionDemo1 extends ActionSupport {
	@Override
	public String execute() throws Exception {
		System.out.println("我来过这。。");
		return "zhangsan";
	}
}
struts.xml

 <constant name="struts.devMode" value="true" /><!-- 开发者模式,实现配置后,自动热替换 -->
	 <package name="default" namespace="/" extends="struts-default"><!-- package用来区分重名的情况,用功能模块来命名、namespace必须用/开头,也用功能模块来命名。 -->
        <action name="he" class="com.struts.action.ActionDemo1">
            <result name="success">
                /hello.jsp
            </result>
            <result name="zhangsan">
            	/zs.jsp
            </result>
        </action>
    </package>

那么,在地址栏中输入:http://localhost:8088/项目名/he就可以返回zs.jsp页面了。

这里说一下struts1好struts2的部分重要的区别之处:

(1),struts1跟struts框架结合的特别紧密,从定义action类就可看出来;而struts2只需继承ActionSupport类,然后重写execute()方法,就可以了。

(2),struts1每个action类只生成一个对象,多个请求同时发生时,可能处理得会比较慢;而struts2每来一个请求就会生成一个对象,这样处理请求的效率会比较高,并发执行比较快。

2、路径问题

注意如果使用相对路径容易出错,所以建议使用绝对路径,绝对路径

<%
String path = request.getContextPath();//项目名
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";//绝对路径,精确到项目名。
%>

3、DMI动态方法调用和Action通配符问题

(1)动态方法调用DMI(Dynamic Method Invoked)

struts.xml

<struts>
    <constant name="struts.devMode" value="true" />
    <package name="user" extends="struts-default" namespace="/user">
        <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">
            <result>/user_add_success.jsp</result>
        </action>
        
        <action name="user" class="com.bjsxt.struts2.user.action.UserAction">  //动态方法调用,只需写一个action.
            <result>/user_add_success.jsp</result>
        </action>
    </package>
</struts>
index.jsp

<body>
Action执行的时候并不一定要执行execute方法<br />
可以在配置文件中配置Action的时候用method=来指定执行哪个方法
也可以在url地址中动态指定(动态方法调用DMI)(推荐)<br />
	<a href="<%=context %>/user/userAdd">添加用户</a>
	<br />
	<a href="<%=context %>/user/user!add">添加用户</a> <!--调用名为user的action,并且找到相应的类,调用类的add方法-->
        <!--如果还有链接,那么可以直接写a链接,而不用修改struts中的配置,只需在相应的类中添加相应的方法-->
        <a href="<%=content %>/user/user!delete">删除用户</a>
       <br />
前者会产生太多的action,所以不推荐使用

 </body>

(2)通配符配置:

struts.xml

<struts>
    <constant name="struts.devMode" value="true" />
    <package name="actions" extends="struts-default" namespace="/actions">
        <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">//{1}代表第一个*
            <result>/Student{1}_success.jsp</result>
        </action>
        
        <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">//{1}代表第一个*,{2}代表第二个*
            <result>/{1}_{2}_success.jsp</result>
            <!-- {0}_success.jsp -->
        </action>
    </package>
</struts>

index.jsp

<body>
使用通配符,将配置量降到最低<br />
<a href="<%=context %>/actions/Studentadd">添加学生</a><!--请求actions包中的name为Student*的action,其中的add方法-->
<a href="<%=context %>/actions/Studentdelete">删除学生</a><!---->
<br />
不过,一定要遵守"约定优于配置"的原则
<br />
<a href="<%=context %>/actions/Teacher_add">添加老师</a><!---->
<a href="<%=context %>/actions/Teacher_delete">删除老师</a><!---->
<a href="<%=context %>/actions/Course_add">添加课程</a><!---->
<a href="<%=context %>/actions/Course_delete">删除课程</a><!---->
	
</body>





版权声明:本文为博主原创文章,未经博主允许不得转载。

Struts2一个Action内包含多个请求处理方法(三种方式)

Struts2一个Action内包含多个请求处理方法的处理(三种方式) Struts1提供了DispatchAction,从而允许一个Action内包含多个请求处理方法。Struts2也提供...
  • u010802573
  • u010802573
  • 2013年06月19日 11:54
  • 1921

【Struts2集锦】Struts2的Action中多个方法调用

以前刚做java项目的时候,就用的是SSH框架,做了两个项目都用的是SSH框架,但是里面Action多个方法调用的时候却不一样,其实不止这一个不一样,不同项目用的都叫SSH框架,但是实现方式不一样,后...
  • u010539352
  • u010539352
  • 2016年01月29日 08:29
  • 2877

Struts2之动态方法调用(优点:调用同一个action中的多个方法不需要在配置文件中写多个指向相同action类的的action节点只需要一个action节点就行)

在表单action值里指定所调用的action中的哪个方法而不是借助配置文件action节点的method属性 1 UserAction类 package org.action; import j...
  • u012871207
  • u012871207
  • 2015年02月02日 13:08
  • 1347

Struts2总结---实现Action三种方式(2)

Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现...
  • helongzhong
  • helongzhong
  • 2017年03月03日 16:36
  • 959

struts2的action类一定要实现execte()吗?

今天在写struts2拦截器器时,忽然想到,action类一定要实现execute() 方法呢? 面我简单说下我的理解:    这个方法最初来源于Action类中的exceute(),我们常常是继...
  • hxhdj
  • hxhdj
  • 2016年09月10日 14:18
  • 123

struts2 从一个action 跳转到另一个action的两种方法

从action1直接跳转到action2,有两种方法:  1. 需要保存前一个action的属性信息时使用,保存住action1的request对象:       action2  2...
  • Where_the_way
  • Where_the_way
  • 2014年03月13日 10:31
  • 2306

总结struts2 Action的四种实现方式

总结struts2 Action的实现方式
  • HibonLi
  • HibonLi
  • 2016年11月04日 19:05
  • 3884

Struts2常用类及方法

Struts的学习过程中,感觉很多东西都有一种似曾相识的感觉,但是同时也有一种傻傻分不清的感觉,今天就把那些我认为Struts中比较难分的类说明讲述一下。 Action Action是一个接口...
  • caoyujiao520
  • caoyujiao520
  • 2017年03月13日 18:04
  • 422

Struts2从一个action转到另一个action的两种方法

在Struts2中,Action处理完用户请求后,将会返回一个字符串对象,这个字符串对象就是一个逻辑视图名。Struts 2通过配置逻辑视图名和物理视图之间的映射关系,一旦系统收到Action返回的某...
  • qq_33377330
  • qq_33377330
  • 2017年05月17日 11:29
  • 180

【web开发学习笔记】Structs2 OGNL学习笔记

第一部分:代码 //前端 Insert title here 访问属性 /ognl.action?username=u&password=p">ognl //we...
  • licong_carp
  • licong_carp
  • 2014年07月06日 11:44
  • 1969
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts2学习笔记——002实现一个Action类的最常用方法
举报原因:
原因补充:

(最多只允许输入30个字)