Struts(五)Action的访问
在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的访问的更多相关文章
- struts  在Action中访问web元素(request,session等)
		
出发jsp: <?xml version="1.0" encoding="GB18030" ?> <%@ page language=&quo ...
 - (五)Struts之Action类基础(二)
		
上一章节末((三)Struts之Action类基础(一))介绍了如何获取用户输入数据的获取.接着就是在Struts中怎么把数据响应给用户端,这就必须要求我们把数据放到作用域中,然后才能显示到用户浏览器 ...
 - 五 Action访问方法,method配置,通配符(常用),动态
		
1 通过method配置(有点low) 建立前端JSP:demo4.jsp <%@ page language="java" contentType="text/h ...
 - 转载 Struts2的配置 struts.xml Action详解
		
在学习struts的时候,我们一定要掌握struts2的工作原理.只有当我们明确了在struts2框架的内部架构的实现过程,在配置整个struts 的框架时,可以很好的进行逻辑上的配置.接下来我就先简 ...
 - Struts2 Action的访问路径
		
1. Action的访问路径 扩展名 缺省以.action结尾,请参考:default.properties文件,可以通过配置改变这一点: <constant name="st ...
 - 关于Spring的Controller及Struts的Action的多线程的注意
		
struts是线程安全,并不是指多线程,而是指单态,当多个用户访问一个请求的时候,服务器内存中只有一个与之对应的action类对象,execute方法加上了同步关键字,如果你在action里加上一个全 ...
 - Struts2 之 Action 类访问 WEB 资源
		
接着上次博客的内容我继续分享我所学到的知识,和自己在学习过程中所遇到问题以及解决方案.当然,如果读者发现任何问题均可以在下方评论告知我,先谢! 在 Action 中访问 WEB 资源 web 资源 所 ...
 - Struts2框架(4)---Action类访问servlet
		
Action类访问servlet Action类有三种方式servlet: (1)间接的方式访问Servlet API ---使用ActionContext对象 (2) 实现接口,访问Action ...
 - 实现Spring管理struts的Action
		
struts2和spring的整合,关键点在于struts2中的action要纳入spring容器的管理中成为一个bean. 可以在struts2中配置: <struts> ...
 
随机推荐
- ABP官方文档翻译 5.4 SwaggerUI集成
			
SwaggerUI集成 介绍 ASP.NET Core 安装Nuget包 配置 测试 ASP.NET 5.x 安装Nuget包 配置 测试 介绍 在它的网站上:“...使用Swagger可用的API, ...
 - ContextLoaderListener加载过程
			
在web.xml中,配置ContextLoaderListener <!-- 配置Listener,用来创建Spring容器 --> <listener> <listen ...
 - 《Thinking in Java》学习笔记(二)
			
1.Java方法的重载 如果几个方法都有相同的名字,区分它们就需要重载来完成. 构成重载的种类: 1)形参的个数不同 2) 形参的类型不同 3) 形参的顺序不同 注意,返回值.抛出的异常和修饰符的不 ...
 - 夏令营讲课内容整理Day 0.
			
今年没有发纸质讲义是最气的.还好我留了点课件. 第一次用这个估计也不怎么会用,但尝试一下新事物总是好的. 前四天gty哥哥讲的内容和去年差不多,后三天zhn大佬讲的内容有点难,努力去理解吧. 毕竟知识 ...
 - CodeChef Sereja and Game [DP 概率 博弈论]
			
https://www.codechef.com/problems/SEAGM 题意: n个数(可能存在相同的数),双方轮流取数.如果在一方选取之后,所有已选取数字的GCD变为1,则此方输.问:1 若 ...
 - stat,fstat,lstat三者区别
			
fstat ,lstat,stat; 头文件:#include<sys/stat.h> #include<sys/types.h> #include<unistd.h&g ...
 - 【Tools】linux更改分辨率,解决虚拟机安装后太小的问题
			
Linux更改屏幕分辨率 1,分辨率模式已存在 1)如何查询是否存在: 终端输入命令:xrandr,即会输出当前已存在的分辨率模式. 2)如何配置: 使用命令xrandr --output 显示器名称 ...
 - pyDash:一个基于 web 的 Linux 性能监测工具
			
pyDash 是一个轻量且基于 web 的 Linux 性能监测工具,它是用 Python 和 Django 加上 Chart.js 来写的.经测试,在下面这些主流 Linux 发行版上可运行:Cen ...
 - Android Stutio 3.0 - Gradle sync failed
			
0.Android Studio 权威教程 (url:http://blog.csdn.net/column/details/zsl-androidstudio.html) 1. 项目老是报错: Gr ...
 - 使用域账号统一管理cisco网络设备
			
1.思科设备和微软系统整合的背景: 公司内部有一定数量的客户端,为了实现统一化,在管理内部部署了域架构,这样可以通过组策略对客户端进行批量化管理,提高了管理的效率. 同样公司内部有一定数量的网络设备( ...