在struts开发中,Action作为框架的核心类,实现对用户的请求的处理,Action被称为业务逻辑控制器。一个Action类代表一次请求或调用。Action就是用来处理一次用户请求的对象

Action的编写方式

Action是一个POJO的类 ,在struts2中,Action可以不继承特殊的类或不实现任何特殊的接口。POJO  :Plain  Ordinary    Java  Object  (简单的java对象)  具有一部分getter  /setter方法的那种类  就被称为POJO类

Action 类 ,要有公共的无参构造方法,采用默认的就可以 和一个execute()方法。

定义格式如下:

    

public   class  ActionDemo1{

         public  String  execute(){

                    System.out.println("ActionDemo1执行了。。。。");
return null;
} }

execute()方法的要求如下:

  • 方法的权限修饰符为public
  • 返回一个字符串,就是指示的下一个页面的Result
  • 方法没有参数

开发者自己编写Action类或者实现Action接口或者继承ActionSupport类

【Action类实现一个Action接口】

struts2提供一个Action 接口,使开发更加规范

public class   ActionDemo2   implements Action{

        @override
public String execute () throws Exception{ System.out.println("ActionDemo2 执行了......"); return null; }

Action 接口为位于com.opensymphony.xwork  包中。一个execute()  方法,  该接口的规范规定了Action 处理类应该包含一个execute方法,该方法返回一个字符串。

Action接口定义了5个字符串常量,它们的作用是统一execute方法的返回值

  • SUCCESS       :success 代表成功
  • NONE             : none  代表页面不跳转
  • ERROR          :error   代表跳转到错误页面
  • INPUT            :input  数据校验的时候跳转的路径
  • LOGIN           :login   用来跳转到登录页面

Action的接口简单,帮助较小,  开发中都是从ActionSupport类继承

[Action   类继承ActionSupport类]  (推荐)

public  class ActionDemo3 extends  ActionSupport{

            @Override
public String execute() throws Exception{ System.out.println("ActionDemo3 执行了。。。。。");
return NONE; }
}

Action 的访问:

.利用<action>标签中的 method属性 ,配置method属性值

点击页面  click.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>点击事件</title>
</head>
<body>
<a href="${pageContext.request.contextPath }/SaveUserAction.action">保存</a>
<a href="${pageContext.request.contextPath }/UpdateUserAction.action">修改</a>
<a href="${pageContext.request.contextPath }/DeleteUserAction.action">删除</a>
<a href="${pageContext.request.contextPath }/FindUserAction.action">查询</a>
</body>
</html>

Action 文件  配置  StrutsDemo1.java

package com.study.Hello;

import com.opensymphony.xwork2.ActionSupport;

public class StrutsDemo1 extends ActionSupport{
private static final long serialVersionUID = 1L; public String save(){
return NONE;
} public String update(){
return NONE;
} public String delete(){
return NONE;
}
public String find(){
return NONE;
}
}

Struts.xml文件  :

action标签的method属性值与  Action 配置文件(即StrutsDemo1) 中的  方法对应

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.devMode " value="true"></constant>
<constant name="struts.action.extension" value="action,,"></constant>
<package name="hello" namespace="/" extends="struts-default">
<action name="SaveUserAction" class="com.study.Hello.StrutsDemo1" method="save"></action>
<action name="UpdateUserAction" class="com.study.Hello.StrutsDemo1" method="update"></action>
<action name="DeleteUserAction" class="com.study.Hello.StrutsDemo1" method="delete"></action>
<action name="FindUserAction" class="com.study.Hello.StrutsDemo1" method="find"></action>
</package>
</struts>

Web.xml   文件保持不变

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Struts2StudyDay01</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- <context-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</context-param> -->
<filter>
<filter-name>Action</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Action</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

但是从Action配置 中可以看出一个Action被配置很多次 ,只是修改了method的值

如果要只配置一次,就要用到  通配符的配置方式

2.通配符的配置

jsp 、Action类 页面保持不变;

Struts.xml 页面

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 2.变量设置 在Struts.xml文件里面配置 -->
<!--i18n :国际化 解决post提交乱码。输出中文乱码 省去过滤器字节编码-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.devMode " value="true"></constant>
<constant name="struts.action.extension" value="action,,"></constant>
<!-- package :将Action配置封装,就是可以在Package中配置很多action name 属性:给包起名字,不能 和其他包名重复
namespace属性:给action的访问路径中定义一个空间
extends :继承一个指定 包 --> <package name="hello" namespace="/" extends="struts-default"> <!-- <action name="SaveUserAction" class="com.study.Hello.StrutsDemo1" method="save"></action>
<action name="UpdateUserAction" class="com.study.Hello.StrutsDemo1" method="update"></action>
<action name="DeleteUserAction" class="com.study.Hello.StrutsDemo1" method="delete"></action>
<action name="FindUserAction" class="com.study.Hello.StrutsDemo1" method="find"></action> --> <action name="*UserAction" class="com.study.Hello.StrutsDemo1" method="{1}"></action>
</package>
</struts>

使用{1}取出于第一次星号统配的 内容 ;

3.动态方法访问

动态访问在Struts2默认是关闭的,使用要先开启一个常量

<constant  name="struts.enable.DynamicMethodInvocation" value="true"></constant>

action标签配置

 <!-- 动态方法配置   访问路径很重要  -->
<action name="StrutsDemo1" class="com.study.Hello.StrutsDemo1"></action>

要保障action的访问路径:

下面就是 代码演示:

Action类 代码:

package com.study.Hello;

import com.opensymphony.xwork2.ActionSupport;

public class StrutsDemo1 extends ActionSupport{

    public String save(){
System.out.println("save");
return NONE;
} public String update(){
System.out.println("update");
return NONE;
} public String delete(){
System.out.println("delete");
return NONE;
}
public String find(){
System.out.println("find");
return NONE;
}
}

Action  配置 即   Struts.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 2.变量设置 在Struts.xml文件里面配置 -->
<!--i18n :国际化 解决post提交乱码。输出中文乱码 省去过滤器字节编码-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.devMode " value="true"></constant>
<constant name="struts.action.extension" value="action,,"></constant> <!-- 动态访问在Struts2默认是关闭的,使用要先开启一个常量 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!-- package :将Action配置封装,就是可以在Package中配置很多action name 属性:给包起名字,不能 和其他包名重复
namespace属性:给action的访问路径中定义一个空间
extends :继承一个指定 包 --> <package name="hello" namespace="/" extends="struts-default">
<action name="StrutsDemo1" class="com.study.Hello.StrutsDemo1">
<result name="success" >/hello.jsp</result>
</action> <!--
method 属性配置
<action name="SaveUserAction" class="com.study.Hello.StrutsDemo1" method="save"></action>
<action name="UpdateUserAction" class="com.study.Hello.StrutsDemo1" method="update"></action>
<action name="DeleteUserAction" class="com.study.Hello.StrutsDemo1" method="delete"></action>
<action name="FindUserAction" class="com.study.Hello.StrutsDemo1" method="find"></action> --> <!-- 通配符配置
<action name="*UserAction" class="com.study.Hello.StrutsDemo1" method="{1}"></action>
--> <!-- 3动态方法配置 访问路径很重要 -->
<action name="StrutsDemo1" class="com.study.Hello.StrutsDemo1"></action>
</package>
</struts>

接下来就是  jsp页面的  访问action 的URL

<%@ 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>点击事件</title>
</head>
<body> <!-- 这里要输入正确的链接 才可以访问到action -->
<a href="${pageContext.request.contextPath }/StrutsDemo1!save.action">保存</a>
<a href="${pageContext.request.contextPath }/StrutsDemo1!update.action">修改</a>
<a href="${pageContext.request.contextPath }/StrutsDemo1!delete.action">删除</a>
<a href="${pageContext.request.contextPath }/StrutsDemo1!find.action">查询</a>
</body>
</html>

打开jsp页面点击保存 出现页面   注意URl

http://127.0.0.1:8080/News/newsAction!findAll.action

上面链接中News是工程名,newsAction是类名,findAll是newsAction类中的方法。

即:   action标签中的name属性值: 需要时Action的类名

否则会出现 以下错误:

Struts(五)Action的访问的更多相关文章

  1. struts 在Action中访问web元素(request,session等)

    出发jsp: <?xml version="1.0" encoding="GB18030" ?> <%@ page language=&quo ...

  2. (五)Struts之Action类基础(二)

    上一章节末((三)Struts之Action类基础(一))介绍了如何获取用户输入数据的获取.接着就是在Struts中怎么把数据响应给用户端,这就必须要求我们把数据放到作用域中,然后才能显示到用户浏览器 ...

  3. 五 Action访问方法,method配置,通配符(常用),动态

    1 通过method配置(有点low) 建立前端JSP:demo4.jsp <%@ page language="java" contentType="text/h ...

  4. 转载 Struts2的配置 struts.xml Action详解

    在学习struts的时候,我们一定要掌握struts2的工作原理.只有当我们明确了在struts2框架的内部架构的实现过程,在配置整个struts 的框架时,可以很好的进行逻辑上的配置.接下来我就先简 ...

  5. Struts2 Action的访问路径

    1.     Action的访问路径 扩展名 缺省以.action结尾,请参考:default.properties文件,可以通过配置改变这一点: <constant name="st ...

  6. 关于Spring的Controller及Struts的Action的多线程的注意

    struts是线程安全,并不是指多线程,而是指单态,当多个用户访问一个请求的时候,服务器内存中只有一个与之对应的action类对象,execute方法加上了同步关键字,如果你在action里加上一个全 ...

  7. Struts2 之 Action 类访问 WEB 资源

    接着上次博客的内容我继续分享我所学到的知识,和自己在学习过程中所遇到问题以及解决方案.当然,如果读者发现任何问题均可以在下方评论告知我,先谢! 在 Action 中访问 WEB 资源 web 资源 所 ...

  8. Struts2框架(4)---Action类访问servlet

    Action类访问servlet Action类有三种方式servlet: (1)间接的方式访问Servlet API  ---使用ActionContext对象 (2)  实现接口,访问Action ...

  9. 实现Spring管理struts的Action

    struts2和spring的整合,关键点在于struts2中的action要纳入spring容器的管理中成为一个bean.  可以在struts2中配置:  <struts>      ...

随机推荐

  1. Hadoop学习笔记三

    一.设置HDFS不进行权限检查 默认的HDFS上的文件类似于Linux中的文件,是有权限的.例如test用户创建的文件,root用户如果没有写权限,则不能进行删除. 有2种办法进行修改,修改文件的权限 ...

  2. HDU 3032 Nim or not Nim? [Multi-SG]

    传送门 题意: nim游戏,多了一种操作:将一堆分成两堆 Multi-SG游戏规定,在符合拓扑原则的前提下,一个单一游戏的后继可以为多个单一游戏. 仍然可以使用$SG$函数,分成多个游戏的后继$SG$ ...

  3. BZOJ 3450: Tyvj1952 Easy [DP 概率]

    传送门 题意:$ox?$组成的序列,$?$等概率为$o\ or\ x$,得分为连续的$o$的长度的平方和,求期望得分 一开始没想出来,原因在于不知道如何记录长度 其实我们同时求得分和长度的期望就好了 ...

  4. BZOJ 2809: [Apio2012]dispatching [斜堆]

    题意:主席树做法见上一题 我曾发过誓再也不写左偏树(期末考试前一天下午5个小时没写出棘手的操作) 于是我来写斜堆啦 从叶子往根合并,维护斜堆就行了 题目连拓扑序都给你了... 说一下斜堆的操作: 合并 ...

  5. BZOJ 1004: [HNOI2008]Cards [Polya 生成函数DP]

    传送门 题意:三种颜色,规定使用每种颜色次数$r,g,b$,给出一个置换群,求多少种不等价着色 $m \le 60,\ r,g,b \le 20$ 咦,规定次数? <组合数学>上不是有生成 ...

  6. C++函数返回值发生的对象复制

    最近用QT做一个监控系统的项目,需要显示目标的运动轨迹,每次目标移动后,就在目标的轨迹中(用vector记录)添加一条新轨迹. 但是在运行中画面里一直不出现轨迹,经过调试发现是记录轨迹的函数出错了. ...

  7. 定制化WinPE

    1 .首先挂载wim Dism /Mount-WIM /WimFile:D:\install.wim /Index: /MountDir:D:\wimmount 2. 如何要修改WinPE的启动项,可 ...

  8. FastStone Capture的使用

    FastStone Capture的使用 FastStone Capture是一款精简而优秀的图像处理软件,在工作中会经常用到.我在本地安装了FastStone Capture 8.4版本 (提取码: ...

  9. git添加本地仓库与远程仓库连接

    在本地建立一个文件夹,需要与远程git仓库进行连接,具体方法: <1>首先进入所在文件目录执行:  git init 初始化git,紧接着 git  add . git commit -m ...

  10. Apollo阿波罗配置中心docker

    前言 在分布式系统中,要改个配置涉及到很多个系统,一个一个改效率低下,吃力不讨好.用配置中心可以解决这个问题.当然配置中心有不少,以下对比的表格是照搬Apollo Wiki的. 功能点 Apollo ...