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>





版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011573551/article/details/52857822

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

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

实现Action(二)——Action接口和ActionSupport基类

本文摘自:李刚 著 《轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发》 续 实现Action(一)             为了让用户开发的Act...
  • Titilover
  • Titilover
  • 2011-09-20 16:15:09
  • 18059

Struts2动作类:Action

1、编写动作类的方式方式一:动作类就是一个POJO。可以不用继承或实现任何的类或接口。 方式二:动作类实现com.opensymphony.xwork2.Action接口。 SUCCESS:一...
  • qq_16103331
  • qq_16103331
  • 2016-09-06 22:57:36
  • 643

Struts2常用类及方法

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

Struts2中的action类

Struts2中的action类 action类在Struts2中承担了Model(模型)的角色,主要用于处理业务逻辑并存放HTTP请求处理过程中各个变量的值。 在Struts2里面,Acti...
  • bcbobo21cn
  • bcbobo21cn
  • 2016-02-03 11:49:34
  • 3213

总结struts2 Action的四种实现方式

总结struts2 Action的实现方式
  • HibonLi
  • HibonLi
  • 2016-11-04 19:05:58
  • 5727

Struts2 Action的三种实现方法

struts2 Action 的三种实现方法
  • zys_1997
  • zys_1997
  • 2017-09-07 11:33:55
  • 327

struts2-创建Action的三种方法,通配符

1.创建Action的三种方法             1.1继承ActionSupport,重写execute方法             1.2实现接口Action,实现execute方法    ...
  • sinat_34881157
  • sinat_34881157
  • 2017-07-31 11:10:17
  • 395

Struts2第九讲学习笔记Action的三种实现方式,两种驱动方式

Action的三种实现方式 1.定义一个pojo类:好处自定义一个普通的java类,不具有侵入型(使用某个框架需要继承或者实现框架里面的类和接口) public class HelloActi...
  • yanluandai1985
  • yanluandai1985
  • 2017-05-31 21:00:52
  • 382

struts2创建action几种方式有什么区别?

当我们在写action的时候,可以实现Action接口,也可以继承Actionsupport这个类.到底这两个有什么区别呢? Action接口有: public static final java...
  • qq_35370485
  • qq_35370485
  • 2017-06-27 11:35:36
  • 890
收藏助手
不良信息举报
您举报文章:Struts2学习笔记——002实现一个Action类的最常用方法
举报原因:
原因补充:

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