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接收参数的四种方法

一、用Action属性接收参数(参考Struts2_0700_ActionAttrParamInput) 在自己的Action里面设置属性并设置set、get方法,在new Action时会自动从参...

【Struts2学习笔记(6)】Action动态方法调用

(1)在Struts1中我们使用动态方法调用的方法是:

Struts2学习笔记——Action

具体视图的返回可以由用户自己定义的Action来决定 具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容 具体Action的实现可以是一个普通的java类,里面有public Stri...

Struts2学习笔记(三)——在action中使用隐含对象

我们知道,在Struts1.x中我们可以通过HttpServletRequest参数直接使用获得有关的隐含对象进行数据的传递。 但是在Struts2中,核心控制器没有给action传递任何的参数,很...
  • mytream
  • mytream
  • 2011年11月25日 23:04
  • 1865

Struts2学习笔记(四)——Action详解

Action是用于处理请求操作的,它是由StrutsPrepareAndExceuteFilter分发过来的。 1、Action的创建方式 1) POJO类(PlainOldJavaObj...

【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的所有方法进行输入校验

(1)在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验。 对于输入校验struts2提供了两种实现方法: 1. 采用手工编写代码实现。 2. 基...

Struts2 学习笔记 —— 10 —— Action接收参数时的中文乱码问题

在Struts接收参数时,如果输入中文,那么可能就会出现乱码问题     首先写一个index.jsp Insert title here 使用DomainM...
  • rnclcl
  • rnclcl
  • 2014年01月20日 16:01
  • 1236

struts2学习笔记(三) Action(上)

Action是什么 应用程序可以完成的每一个操作都可以称之为动作。例如,显示一个登录表单是一个动作,将用户信息保存起来也是一个动作。 动作类其实就是普通的java类,他们可以有属性和方法,但是需要...

struts2学习笔记(3)---Action中访问ServletAPI获取真实类型的Servlet元素

一、源代码: struts.xml文件:
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts2学习笔记——002实现一个Action类的最常用方法
举报原因:
原因补充:

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