Struts旅程(六)Struts页面转发控制ActionForward和ActionMapping

2023-05-16

 

上篇讲述了struts控制器ActionDispatchAction以及LookupDispatchAction,本篇主要说说struts中的页面转发控制,struts提供了ActionForwardActionMapping两个类来控制页面转发。

ActionForward

在使用struts框架开发web应用程序时,Action在完成用户逻辑处理后,需要把处理结果展示给用户,这个时候就需要程序控制页面的转发,在struts中使用ActionForward对象控制程序转向。ActonForward对象是一种配置对象,代表了一般的web资源,可以是jsp页面,servlet以及其他的ActionActonForward对象映射的是struts配置文件struts-config.xml中的<forward>元素,在这个元素中封装了目标页面的URIActionForwardstruts中的核心类,以下主要参数。

1Name属性:指定ActionForward名称,在其他类中也可以通过这个名字调用ActionForward

2Path属性:指明了ActionForward对应的URI

3redirect属性:属性设置为true时被设置为重定向,默认false

strutsActionForward有全局转发ActionForward和局部转发ActionForward,全局ActionForward应用于全部的Action和局部的转发仅仅对于当前的Action有效。

例如对用户登录的判断,提交表单后,把用户登录信息保存到session中,然后设置<forward>redirecttrue,设置为重定向方式,然后再进行判断

<action path="/must_login"  type="com.bjpowernode.struts.MustLoginAction"

                         >

                       <forwardname="login" path="/login.jsp"redirect="true"/>

                 </action>

这样当用户已经登录的时候会给出提示已经登录。

如果有十个Action,每个都要验证是否登录,每个Action都要进行判断是否登录,如果没有登录或者超时登录则转到Login.jsp上。<forwardname=”login” path=”/login.jsp” redirect=”true”/>如果有100Action都要重复一百个上一行代码,因为这个forward只能被自己的这个Action使用,不能被其他的Action使用,所以我们称为局部的Action。为了避免不必要的重复我们可以使用全局Action,代码如下所示。

    <global-forwards>

           <forwardname="login" path="/login.jsp"redirect="false"/>

    </global-forwards>

虽然通过对session的判断和全局forward的设置,但是用户可以通过输入地址来访问jsp页面。我们可以把页面放到WEB-INF下,WEB-INF下的页面是无法在客户端访问到的,我们把页面放到这个目录下,避免用户通过输入地址访问到我们不想让用户访问的页面。

我们也可以自己手动转到想要转到的页面,不需要返回ActionForward对象。

//手动转向。

Response.sendRedirect(request.getContextPath()+”/login.jsp”);

//同时设置返回值为null

Return null;

 

ActionForward和动态ActionForward

我们想要实现当用户输入1转到页面page1.jsp,输入2转到page2.jsp页面。代码如下所示。

packagecom.bjpowernode.struts;

 

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

importorg.apache.struts.action.Action;

importorg.apache.struts.action.ActionForm;

importorg.apache.struts.action.ActionForward;

importorg.apache.struts.action.ActionMapping;

 

/**

 *动态的ActionForward

 * @author summer

 *

 */

public classDynaActionForwardTestAction extends Action {

 

    @Override

    public ActionForwardexecute(ActionMapping mapping, ActionForm form,

                  HttpServletRequestrequest, HttpServletResponse response)

                  throwsException {

           

           intpage = Integer.parseInt(request.getParameter("page"));

           //自己new一个ActonForward。动态ActionForward

           ActionForwardaf = new ActionForward();

           af.setPath("/page"+ page+".jsp");

           //设置为重定向方式。

           af.setRedirect(true);

           //如果输入时1则重定向到page1.jsp.

           if(page==1)

           {

                  af= mapping.findForward("page1");

           }

           //如果输入时2则重定向到page2.jsp.

           if(page==2)

           {

                  af= mapping.findForward("page2");

           }

           returnaf;

    }

 

}

 

在这里采用动态ActionForward实现设置为重定向方式,而静态的ActionForw是不能动态的修改配置文件的。


ActionMapping

struts-config.xml配置文件中,每个<action>元素都对应着一个ActionMapping,当用户请求被ServletAction接受以后,ActionServlet会根据用户请求URL以及<action>元素设定的path属性确定对应的ActionMapping对象,ActionMapping对象会告诉ActionServlet使用哪个Action对象处理用户请求。

ActionMapping描述了struts中用户请求路径和Action的映射关系,在struts中每个ActionMapping都是通过path属性和一个特定的用户请求URL关联。它负责转发用户请求给具体的Action,同时还转发了其他的一些相关信息,这种请求和处理动作之间的映射关系保存在struts-config.xml这个配置文件中,在web服务器初始化的时候,会加载这个配置文件,struts给每个Action都创建一个ActionMapping对象,用来提供给Action使用,当ActionServlet转发请求的时候,ActionMapping对象会被作为参数传递给Actionexecute()方法。


struts的学习就总结到此,学习永远是在学习中,不是一蹴而就的,在后续的学习和项目中加深学习,加深认识。加油!



 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Struts旅程(六)Struts页面转发控制ActionForward和ActionMapping 的相关文章

  • 为什么要使用Struts框架

    在JavaWEB项目中 原生的Servlet作为控制器在项目开发中难免会有一些弊端 1 每一个请求编写一个servlet 针对一个小功能模块就可能需要四个以上的自定义的Servlet 2 Servlet处理请求时需要调用多次的getPara
  • Field 'id' doesn't have a default value问题解决方法

    Field id doesn t have a default value问题解决方法 突然想温习温习对数据库的读写 于是就用mysql建了一张单独的表 见代码1 用Hibernate写了个应用 可以正常查询 修改数据了 开始时 数据是在m
  • 基于Java的停车场管理系统的设计与实现

    技术 Java JSP等 摘要 随着科技的迅速发展 各种管理系统已应用到社会的各个领域 各个大小企业 单位 都充分意识到传统的手工管理模式已经逐渐不能适应时代的发展 为了更好的发展 纷纷开发适合自己的管理系统 通过停车场管理系统这个平台 可
  • 深入了解struts中的struts-config.xml

    弄清楚struts config xml中各项元素的作用 对于我们构建web项目有莫大的好处
  • 报 java.lang.NoClassDefFoundError: org/springframework/beans/factory/BeanFactory错误!

    报 java lang NoClassDefFoundError org springframework beans factory BeanFactory错误 和java lang ClassNotFoundException org s
  • SSH框架搭建的全过程(eclipse)

    SSH框架是最常用的框架之一 在搭建SSH框架的时候总有人遇到这样 那样的问题 下面我介绍一下SSH框架搭建的全过程 第一步 准备工作 下载好eclipse Struts2 Spring Hibernate 1 eclipse eclips
  • actionInvocation.invoke()是什么意思

    关于Struts2的自定义的验证截器 package ch06 struts2 Interceptor import java util Map import com opensymphony xwork2 Action import co
  • 如何将 AngularJS 与 Struts 1.x 结合使用

    我对 AngularJS 和客户端内容很陌生 我正在向使用 Struts 1 3 作为框架的旧应用程序添加一个新页面 我想使用 AngularJS 作为前端 我知道如何通过将 JSON 写入前端并返回来从操作类返回 JSONnull为前进的
  • Struts逻辑标签等于不工作

    非常快的问题 有人可以向我解释为什么这段代码不起作用吗 myValue br
  • 如何禁用 Struts 标签的自动完成(HTML:text)

    对于普通的 HTML 输入标签 禁用自动完成很简单 如下所示
  • 雄猫。该解析器不支持规范 null 版本 null

    我尝试在 oracle linux tomcat 7 和 jdk1 7 上运行 Web 应用程序 但在 tomcat 重新启动后加载第一页时出现异常 该异常仅在第一次应用程序页面加载时发生 应用程序是在jdk1 6上开发的 在服务器上安装了
  • Struts 和 Spring 一起吗?

    我对 Struts 和 Spring 都很陌生 我需要知道如何访问 Struts ActionForm 中的 Spring 服务 即使是指向正确方向的指针也会受到赞赏 从 struts 1 ActionForm 类中 您将需要 WebApp
  • 有什么方法可以预测会话超时吗?

    有没有办法 捕获 会话超时事件 以便在 HttpSession 失效之前检索数据 我们正在实现 Filter 接口 并且在 doFilter 方法中 当会话超时时 我们在登录时存储在会话对象中的用户为 null 提前致谢 您应该能够注册Ht
  • Struts 1 - 我的 Web 应用程序未找到 struts-taglib.jar

    我在用Struts 1 我开发了一个基于struts 的Web 应用程序 我在 JSP 页面中使用 struts 标签struts taglib jar通过在 JSP 文件中插入以下行 现在 当我在本地系统上运行该应用程序时 该应用程序工作
  • 在 Struts2 中的一个操作类本身中创建多个方法?

    我可以在同一个操作类中创建两个方法吗 如果是这样 我们如何在struts xml file 例如 我创建了一个简单的验证操作类来验证email address也password使用两个单独的正则表达式 我在 Action 类中创建了两个方法
  • Java页面重定向

    我想要做的是 当他们第一次点击此方法时 转到免责声明页面 然后随时转到不同的页面 我当前的方法只显示免责声明页面 如果需要进一步解释 请告诉我 谢谢 public int show Action action throws Exceptio
  • 我可以在 Struts 中提供 SEO 友好的 url 吗?

    我想在我的应用程序中拥有 SEO 友好的 url 它将使用 Struts 1 2 在 java j2ee 中构建 我有一些分类如下 county countryname county state statename county state
  • 没有为命名空间 / 和操作名称映射的操作教程

    我无法执行我的 struts2 应用程序 我正在使用 eclipse indigo IDE tomcat 7 和 jdk 1 7 我包含的 jar 文件是 commons logging 1 0 4 jar freemarker 2 3 8
  • Spring Security 与 Struts 的集成

    我正在尝试在一个简单的应用程序中将 spring security 与 struts1 2 使用 LDAP 集成 我有 applicationContext security xml
  • 就MVC模式而言,Struts 2中使用的Action是什么?

    在Struts2中 控制器将请求分派给Action Action将其传递给后端逻辑 这可以看作是一个非常大的过程 model 处理请求 JSP代表视图 Struts2中如何定义Action 肯定是not一个看法 是控制器还是模型 Strut

随机推荐

  • DOS,WINDOWS递归删除指定文件夹或文件

    DOS xff0c WINDOWS递归删除指定文件夹或文件 64 REM 64 REM Name 递归删除指定的目录 xff0c 请把此文件放在你希望执行的那个目录 64 REM Desciption 64 REM Author amosr
  • macOS 使用 - 使用系统屏幕共享(VNC)

    文章目录 关于 屏幕共享 应用 权限开启 开始连接 使用 Apple ID 连接 使用 IP 连接 连接成功 断开连接 参考 关于 屏幕共享 应用 macOS 自带屏幕共享功能 路径为 System Library CoreServices
  • 免费ddns f3322.net使用脚本更新公网ip小记

    话说今天服务器域名访问不了 xff0c 路由器也访问不了 xff0c 另听说停电了 xff0c 估计是ddns没有更新 下午到现场一看 xff0c c7v2的ddns显示未登陆 xff0c 因为这货刷了us固件 xff0c 能用的ddnd只
  • Unresolved reference: databinding 模块化,组件化报错

    不要只在 总的 libaray 中添加 dataBinding span class token punctuation span enabled span class token operator 61 span span class t
  • Android lottie java.lang.IllegalStateException: Missing values for keyframe

    使用Lottie动画的时候 xff0c 运行发现了此报错 xff0c 版本为2 4 0 xff0c 在经过几番的测试后 xff0c 更改了资源文件和xml里面的配置也不大行 tips 一定要在xml里面配置资源文件 xff0c 当你把资源文
  • 追求技术之路 - 那些陪伴我的书籍

    如今已经在广州一家嵌入式公司实习 xff0c 分享大学里度过的一些书籍 xff0c 有些还没读完 xff0c 个人比较喜欢经典书籍 xff0c 研读起来就有种奇妙的感觉 xff0c 比起人与人之间的复杂的关系 xff0c 书籍带给我的感觉很
  • 详解蓝牙标准中的GFSK调制

    简介 GFSK是一种简单但应用广泛的调制方式 xff0c 在蓝牙和802 11等无线通信标准中都有应用 802 11跳频FHSS时所用的调制方式是GFSK 2和GFSK 4 xff0c 采用BT 61 0 5的高斯滤波器 在GFSK 2和G
  • ajax入门 不要畏惧 很简单 进了门一切都好学多了

    以前总是听别人说ajax是多么的好 xff0c 然后自己就去借了本书看 xff0c 哇塞感觉好难哦 xff0c 什么介绍javascript html css xff0c 还有很多一些东西 看的那个难啊 xff0c 然后就是硬着头皮把它给看
  • IntelliJ IDEA With Git

    记录下Git如何与IntelliJ IDEA协作 文章目录 环境准备IntelliJ IDEA With Git 开发过程1 初次获取远端代码2 查看远端仓库分支3 将指定的远端分支同步到本地 xff08 建议同远端名一致 xff09 4
  • 环形缓冲区(ringbuffer)

    环形缓冲区 xff08 ringbuffer xff09 环形缓冲区是嵌入式系统中十分重要的一种数据结构 xff0c 比如在串口处理中 xff0c 串口中断接收数据直接往环形缓冲区丢数据 xff0c 而应用可以从环形缓冲区取数据进行处理 x
  • Gson解析异常:Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

    首先检查你的retrofit配置是否正确 xff0c 解析异常 addConverterFactory GsonConverterFactory create 在这里修改成这个gson的 Retrofit retrofit 61 new R
  • leetcode|多线程专题

    1114 按序打印 我们提供了一个类 xff1a public class Foo public void one print 34 one 34 public void two print 34 two 34 public void th
  • OpenCV实战(1)——OpenCV与图像处理基础

    OpenCV实战 xff08 1 xff09 OpenCV与图像处理基础 0 前言1 OpenCV 基础1 1 安装 OpenCV1 2 OpenCV 主要模块1 3 使用 Qt 进行 OpenCV 开发 2 OpenCV 图像处理基础2
  • 1.机器视觉标准框架学习

    在工业机器视觉上 xff0c 常见的图像处理库有opencv halcon visionpro sherlcok等 其中visionpro和sherlcok是拖拽式编程 xff0c 方便用户开发视觉项目 但对于opencv 和halcon则
  • Gitlab权限说明

    Gitlab权限管理 Gitlab用户在组中有五种权限 xff1a Guest Reporter Developer Master Owner Guest xff1a 可以创建issue 发表评论 xff0c 不能读写版本库 Reporte
  • 二进制的浪漫

    0 基本性质 0 1 交换律 相同运算符下可任意交换 xff0c 不同的运算符不可交换 0 2 结合律 相同运算符是可结合的 0 3 分配律 a amp b
  • (九)分支限界法

    分支限界法 xff08 branch and bound method xff09 按广度优先策略搜索问题的解空间树 xff0c 在搜索过程中 xff0c 对待处理的节点根据限界函数估算目标函数的可能取值 xff0c 从中选取使目标函数取得
  • (七)贪心法

    贪心法比较简单 xff0c 从这个算法的名字看来差不多都了解了 xff0c 贪心 xff0c 贪心的人是只顾一时的利益 xff0c 不顾长远的利益 贪心法把一个问复杂问题分解为一系列较为简单的局部最优选择 xff0c 每一步选择都是对当前的
  • Struts旅程(一)Struts简介和原理

    struts 简介 Struts 是 Apache 软件基金会 xff08 ASF xff09 赞助的一个开源项目 它最初是 jakarta 项目中的一 个子项目 xff0c 并在 2004 年 3 月成为 ASF 的顶级项目 它通过采用
  • Struts旅程(六)Struts页面转发控制ActionForward和ActionMapping

    上篇讲述了 struts 控制器 Action 和 DispatchAction 以及 LookupDispatchAction xff0c 本篇主要说说 struts 中的页面转发控制 xff0c struts 提供了 ActionFor