Struts 路径分析以及是否一定要执行excute()方法

一、Struts路径分析。

1.先创建 Struts_PathAction 继承至 ActionSupport ,设置execute()方法的返回值是"path"。

public class Struts_PathAction extends ActionSupport { //路径问题: @Override public String execute() throws Exception { // TODO Auto-generated method stub return "path"; } }

2.配置struts.xml文件,namespace的值设置为“”,action的name与result 一致,使之操作起来更加方便。

<struts> <constant name="struts.devMode" value="true" /> <package name="com.cqvie.path" extends="struts-default"  namespace=""> <action name="path" class="com.cqvie.path.Struts_PathAction" >        <result name="path">/path.jsp</result>     </action> </package> </struts>

3.编辑index.jsp页面,action 的name是“path”。

<body>      <a href="path/path.action">Action路径说明问题</a>   </body>

4.由上可知,需要创建path.jsp页面。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>">

<title>My JSP ‘path.jsp‘ starting page</title> </head>

<body> struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。 <br /> <a href="index.jsp">index.jsp</a> <br /> 虽然可以用redirect方式解决,但redirect方式并非必要。 <br /> 解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径) <br /> 或者使用myeclipse经常用的,指定basePath </body> </html>

注意:当这样运行时,点击超链接会出现找不到的情况,那是因为path路径有错,按理说需要加上 "../"表示根目录,但是如此一来变会更加麻烦。所以需要得到该action的根目录。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>   <head>     <base href="<%=basePath%>">     <title>My JSP ‘path.jsp‘ starting page</title>   </head>   <body> struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。<br/> <a href="<%=basePath%>index.jsp">index.jsp</a> <br /> 虽然可以用redirect方式解决,但redirect方式并非必要。 <br /> 解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径) <br /> 或者使用myeclipse经常用的,指定basePath   </body> </html>

再次运行时,发现可行了

再次点击超链接时,发现又回到了刚才的界面。路径验证成功。

二、struts 中的Action 继承至“ActionSupport” 时,程序会重写excute()方法,且必须要有这个方法,但是是否只能执行这一个方法呢?

1.新建项目ActionMethod

2.创建class ActionMethod,并继承至ActionSupport。(返回值可以直接是常量。)

package com.struts.method;

import com.opensymphony.xwork2.ActionSupport;

//这种方法的返回值可以定义为常量  SUCCESS;因为 Action可以将其转换成常量:String SUCCESS = "success";

public class ActionMethod extends ActionSupport {    public String add(){    return SUCCESS;//可以定义为常量。 } }

3.设置index.jsp 页面。由此验证,Action执行的时候并不一定要执行execute方法,可以在配置文件中配置Action的时候用method=来指定执行哪个方法(但是会产生太多的action);也可以在url地址中动态指定(动态方法调用DMI)(推荐)

<a href="<%=context %>/admin/admin!add">添加用户</a>

4.创建 struts_method.jsp,只输出一句话:提示跳转成功

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>     <base href="<%=basePath%>">   </head>   <body>     add Admin Success!<br>   </body> </html>

5.运行

从地址栏的变化可以看出动态配置 action 的method,也可实现页面跳转,并且成功,由此证明action 并不只是只能执行excute()方法。

三、经验总结、教训。

1.path关乎action的去向,用相对路径容易出错,用绝对路径稍微好些。

2.对于action的excute()方法又有了进一步的认识:以前都只认为它必须要重写此方法才能有效,现在看来不仅不是如此,还可以重新定义自己需要的方法。

3.action的访问路径不复杂,但是今天看了马老师的讲解视频,说不晕是骗人的,对此还得继续温习,熟能生巧。

4.通过这些天的学习,我对struts又有了新的认识,可能不如某些同学收获的多,但是只要自己比昨天好,我就在进步。

时间: 2024-10-13 16:14:38

Struts 路径分析以及是否一定要执行excute()方法的相关文章

Struts2 让跳转指定执行某个方法

很多时候,我们想让jsp页面中的某个超链接,点击后执行后台的某个方法,里面该如何做呢? 这里方法很多种 我举例两种: 1.在struts.xml配置,配置如下: <package name="student" extends="struts-default" namespace="/actions"> <action name="user" class="DataValidation.One_act

获得执行计划方法二-explain plan

1 安装 $ORACLE_HOME/rdbms/admin/utlxplan.sql (UNIX)  脚本生成一个表这个程序会创建一个名为plan_table的表 2 运行 explain PLAN [ SET STATEMENT_ID [=] < string literal > ] [ INTO < table_name > ] FOR < sql_statement > 其中: STATEMENT_ID:是一个唯一的字符串,把当前执行计划与存储在同一PLAN中的其

获得执行计划方法三-sql_trace

1 追踪这个sesion SQL> alter session set sql_trace=true ; Session altered. 2 执行想要跟踪的语句 SQL> select * from scott.emp ;      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM ---------- ---------- --------- ---------- --------- --------

获得执行计划方法四-使用10046事件

我们也可以通过设置10046事件来进行SQL跟踪,并且可以设置不同的跟踪级别,比使用SQL_TRACE获得更多的信息. 10046事件不但可以跟踪用户会话(trace文件位于USER_DUMP_DEST ),也可以跟踪background进程(trace文件位于BACKGROUND_DUMP_DEST ).trace文件的大小决定于4个因素:跟踪级别,跟踪时长,会话的活动级别和MAX_DUMP_FILE_SIZE参数. 启用跟踪事件10046 1.在全局设置 修改初始化参数 EVENT = "1

什么时候会执行viewDidLoad方法

这个博文是为了解释,为何有时候,你给属性赋值,在viewDidLoad方法中却取不到值的原因. 第一种情况,presentViewController会执行被present的控制器的viewDidLoad方法: 第二种情况,即使不执行推出或者present操作,也会执行viewDidLoad方法:

获得执行计划方法-一 ORACLE AUTOTRACE

ORACLE sql trace AUTOTRACE 命令 1 SET AUTOTRACE OFF                   此为默认值,即关闭Autotrace2 SET AUTOTRACE ON                    产生结果集和解释计划并列出统计3 SET AUTOTRACE ON EXPLAIN            显示结果集和解释计划不显示统计4 SETAUTOTRACE TRACEONLY              显示解释计划和统计,尽管执行该语句但您将

当spring 容器初始化完成后执行某个方法

在做web项目开发中,尤其是企业级应用开发的时候,往往会在工程启动的时候做许多的前置检查. 比如检查是否使用了我们组禁止使用的Mysql的group_concat函数,如果使用了项目就不能启动,并指出哪个文件的xml文件使用了这个函数. 而在Spring的web项目中,我们可以介入Spring的启动过程.我们希望在Spring容器将所有的Bean都初始化完成之后,做一些操作,这个时候我们就可以实现一个接口: package com.yk.test.executor.processor publi

[Java] JVM 在执行 main 方法前的行为

JVM 执行一个 Java 程序时,先从某个指定的 Java 类的 main 方法开始执行代码,同时,传一个字符串数组作为 main 方法的参数.例如在 Unix 系统上,执行下面的命令 java Test reboot Bob Dot Endzo JVM 会调用 Test 的 main 方法,同时把四个字符串 "reboot", "Bob", "Dot" "Endzo" 作为参数传给 main 方法. 那么,在执行 main

高招 Windows 7下不让病毒执行的方法

常听到一些"比较专业"的IT人员说,"使用者装了防毒软件也就算了,但是一点防毒的概念都没有,以为这样就不会中毒吗?" 要想不中毒,更重要的是,要更进一步了解病毒的运作原理,以及防毒软件的保全之道.在这里,希望对于一般企业的计算机使用者,能提供一些够用的"防毒概念".也许不能"保证"什么,但至少你对于计算机发生的事情能够有个梗概性的认识吧! 精巧脆弱的开机程序 用计算机都得先开机,从打开电源一直到操作系统加载完成,这就是俗称的&