`
maomaozgc
  • 浏览: 336138 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

注意ActionForward 默认设置

阅读更多
ActionForward是做什么的?

他是用来封装转发路径的。

在struts-config.xml中<forward name="error" path="/login.jsp"></forward>默认的是安转发处理,转发的特点:是使用同一个request,而重定向的url地址会改变,而转发的url地址是不变的。而且重定向使用的不是同一个request,等于又发送了一个请求,所以他的url地址会改变。在这想变为重定向,需要使用另一个属性:redirect="true",设置成true,就变成重定向了。<forward name="error" path="/login.jsp"></forward>在这是错误了转到登陆页面,所以应该使用重定向来实例。让地址也变到登陆的地址。

定义全局forward:

使用标签<global-forwards>来定义全局forward:

<global-forwards>
  <forward name="login" path="/login.jsp" redirect="true"/>
</global-forwards>

这个标签要放在 <action-mappings>的上面:

</form-beans>

<global-forwards>
  <forward name="login" path="/login.jsp" redirect="true"/>
</global-forwards>

<action-mappings>

全局forward是都可以访问的,但是当需要使用forward时,strues自动安就近原则来选择。当局部也有定义时,就按照局部的来转。

所以对以公共的内容,就可以定义到全局里,例如错误处理等。



动态ActionForward:

静态ActionForward在运行期改不了,采用动态ActionForward,在运行期是可以改动的。

  String page = request.getParameter("page");

ActionForward af = new ActionForward();
  af.setPath("/page" + page + ".jsp?name=Tom");
  return af;

静态的 ActionForward的url是不能加参数的,而使用动态的ActionForward,则可以加参数。



ActionForward的使用

1、理解全局和局部ActionForward的概念
2、redirect的使用
3、struts-config.xml文件不允许动态修改
4、理解动态ActionForward,动态的ActionForward是可以运行期修改的



http://sundful.iteye.com/blog/143167

ActionForward的作用就是从一个页面链接到另一个页面,最简单的应用就是mapping.findForward("success")。

属性:name-逻辑名称;path-URL;redirect-当设置为true是,重定向,默认为false;className(可选)-默认为ActionForward。

一般的调用过程:当ActionServlet调用Action时,Action 把Mapping的findForward()传递给它。findForward()先在局部forward转发列表中寻找key,如果没找到,再从全局forward转发列表中寻找。如果都没找到,此方法将返回null,浏览器报错。

在<html:link>标记中的使用:
在配置文件中定义一个forward:

Java代码
01.<forward name="article" path="/do/article?dispatch=view"/> 
<forward name="article" path="/do/article?dispatch=view"/>

<html:link>中:

Java代码
01.<html:link forward="article" paramName="articleForm" paramProperty="articleKey" paramId="key">News from the edge</html:link> 
<html:link forward="article" paramName="articleForm" paramProperty="articleKey" paramId="key">News from the edge</html:link>

运行结果:

Java代码
01.<a href="http://localhost/artimus/do/article?dispatch=view&key=17">News from the edge</a> 
<a href="http://localhost/artimus/do/article?dispatch=view&key=17">News from the edge</a>

注意这边,如果已经存在一个参数,标签会很聪明的帮你添加一个连接符号,之后再添加参数。
添加自己要转发的路径:

Java代码
01.public ActionForward execute( ActionMapping mapping,  
02.                              ActionForm form,   
03.                              HttpServletRequest request,  
04.                              HttpServletResponse response)   
05.                               throws Exception{   06.        ActionForward forward = new ActionForward();   07.        String loginid = ((LoginForm)form).getLoginid();  
08.        String password = ((LoginForm)form).getPassword();  
09.        if(...){   10.             ......  // business code    11.            forward.setPath("welcome.jsp");   12.        }else{   13.            ActionMessages errors = new ActionMessages();   14.            .......  
15.            forward = mapping.findForward("Failure");   16.        }  
17.        return forward;   18.    } 
public ActionForward execute( ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception{
ActionForward forward = new ActionForward();
String loginid = ((LoginForm)form).getLoginid();
String password = ((LoginForm)form).getPassword();
if(...){
......  // business code
forward.setPath("welcome.jsp");
}else{
ActionMessages errors = new ActionMessages();
.......
forward = mapping.findForward("Failure");
}
return forward;
}
在Action 类中添加参数:

Java代码
01.ActionForward forward = mapping.findForward("article");  
02.StringBuffer path = new StringBuffer(forward.getPath());   03.boolean isQuery = (path.indexOf("?")>=0);   04.if (isQuery)   05.path.append("&amp;dispatch=view");   06.else  07.path.append("?dispatch=view");   08.return new ActionForward(path.toString());    ActionForward forward = mapping.findForward("article");
StringBuffer path = new StringBuffer(forward.getPath());
boolean isQuery = (path.indexOf("?")>=0);
if (isQuery)
path.append("&amp;dispatch=view");
else
path.append("?dispatch=view");
return new ActionForward(path.toString());

如果ActionForward 没有设置为重定向,新的参数将被合并到当前request的参数中。如果新的参数的名称和原参数名称相同,在新的转发期内将使用新的参数值。




http://liuyinhuan.iteye.com/blog/271181
ActionForward的使用

 

   1、ActionForward包含转向信息

  

   2、全局forward和局部forward

        * 全局forward,若很多个Action处理完后都要转向到某页面,不妨把该页面设为全局forward:

Java代码
01.<global-forwards>  
02.     <forward name="login" path="/login.jsp" redirect="true"/>   03.</global-forwards> 
  <global-forwards>
<forward name="login" path="/login.jsp" redirect="true"/>
</global-forwards>

        * 局部forward:

Java代码
01.<action path="/login"   
02.        type="cn.huan.struts.LoginAction"  03.        name="loginForm"  04.        scope="request"  05.        >  
06.      <forward name="success" path="/login_success.jsp"/>   07.      <forward name="error" path="/login_error.jsp"/>   08. </action> 
     <action path="/login"
type="cn.huan.struts.LoginAction"
name="loginForm"
scope="request"
>
<forward name="success" path="/login_success.jsp"/>
<forward name="error" path="/login_error.jsp"/>
</action>

        * mapping.findForward方法会先自动找配置中的局部forward,若没有就找全局forward

         

  

   3、转发和重定向

          转向:同一个request

          重定向:需设置redirect="true",另建一个新request,故改变了url

         

   4、转发和重定向都可以自己定义而不用struts提供的ActionForward

        

         在Action中自定义转向:

Java代码
01.RequestDispatcher dispatcher = request.getRequestDispatcher("/mustlogin.jsp");  
02.dispatcher.forward(request, response);  
03.return null;  RequestDispatcher dispatcher = request.getRequestDispatcher("/mustlogin.jsp");
dispatcher.forward(request, response);
return null;



         在Action中自定义重定向:        

Java代码
01.response.sendRedirect(request.getContextPath() + "/login.jsp");  
02.return null;  response.sendRedirect(request.getContextPath() + "/login.jsp");
return null;



             

   5、struts-config.xml文件和web.xml文件在运行时都不能动态修改,也就是不能再在Action中改已配置好的属性值



  

   6、动态ActionForward

         不需要修改Action代码和增加<forward>配置





      

     例如:如果需要根据页面输入的值动态的跳转到不同页面:

Java代码
01.<form action="dynaactionforward.do" method="post">  
02.   页面:<input type="text" name="page"><br>   03.   <input type="submit" value="提交">   04.</form> 
   <form action="dynaactionforward.do" method="post">
页面:<input type="text" name="page"><br>
<input type="submit" value="提交">
</form>



          





   则用动态ActionForward可很好地实现,Action和配置信息分别为(其中注释部分为没有使用动态   ActionForm时的代码):

    Action代码:

Java代码
01.package cn.huan.struts;  
02. 
03.import javax.servlet.http.HttpServletRequest;   04.import javax.servlet.http.HttpServletResponse;   05. 
06.import org.apache.struts.action.Action;   07.import org.apache.struts.action.ActionForm;   08.import org.apache.struts.action.ActionForward;   09.import org.apache.struts.action.ActionMapping;   10. 
11./**  12. * 动态ActionForwad测试 
13. * @author 刘银环 
14. * 
15. */ 
16.public class DynaActionForwardTestAction extends Action {   17. 
18.    /* (non-Javadoc)  19.     * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) 
20.     */ 
21.    @Override  22.    public ActionForward execute(ActionMapping mapping, ActionForm form,   23.            HttpServletRequest request, HttpServletResponse response)  
24.            throws Exception {   25.        String page = request.getParameter("page");   26.//      ActionForward af = null;   27.//      if("1".equals(page)){   28.//          af = mapping.findForward("page1");   29.//      }else if("2".equals(page)){   30.//          af = mapping.findForward("page2");   31.//      }   32.//      return af;   33.          
34.        //动态ActionForward   35.        ActionForward af = new ActionForward();   36.        af.setPath("/page" + page + ".jsp");   37.        return af;   38.    }  
39. 
40.} 
package cn.huan.struts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* 动态ActionForwad测试
* @author 刘银环
*
*/
public class DynaActionForwardTestAction extends Action {
/* (non-Javadoc)
* @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String page = request.getParameter("page");
// ActionForward af = null;
// if("1".equals(page)){
// af = mapping.findForward("page1");
// }else if("2".equals(page)){
// af = mapping.findForward("page2");
// }
// return af;
//动态ActionForward
ActionForward af = new ActionForward();
af.setPath("/page" + page + ".jsp");
return af;
}
}


   配置信息:

Java代码
01.<action path="/dynaactionforward" 
02.        type="cn.huan.struts.DynaActionForwardTestAction">   03.        <!--   
04.        <forward name="page1" path="/page1.jsp"/>   05.        <forward name="page2" path="/page2.jsp"/>   06.         -->  
07.</action> 


from: google baidu
分享到:
评论

相关推荐

    Struts1.x_action

    执行execute方法时,Action会根据请求参数和业务逻辑来处理请求,并返回一个表示结果的ActionForward对象,这个对象指示Struts框架如何导航到下一个页面或资源。 1. **ActionForm**:在Struts1.x中,ActionForm是...

    Java>jquery-easyui_combotree异步树的生成代码示例(NEW)

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String optype = request.getParameter("optype"); if ...

    myeclipse下建立struts工程

    2. **项目命名与配置**:输入项目名称,如 "mytest",其他默认设置即可。上下文名称通常默认为项目名称,这决定了应用程序在服务器上的访问路径。 3. **添加 Web 项目能力**:右键点击项目,选择 "MyEclipse -&gt; Add...

    LookupDispatchAction 是使用方法

    public ActionForward method1(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // 方法1的逻辑 return mapping.findForward("success...

    Struts多模块[定义].pdf

    - **ActionForward**:在配置文件中,ActionForward可以指定目标模块,允许跨模块的跳转。 - **ActionForm**:每个模块可以有自己独立的表单bean,通过ActionForm可以在模块间传递数据。 - **国际化**:每个模块可以...

    Struts1文件上传、单文件、多文件上传(上传文件大小问题,如何设置无限制)

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { UploadForm uf = (UploadForm) form; String name = ...

    安卓广播事件大全

    #### DEFAULT_ACTIONVIEW_ACTION (默认动作视图) 此广播事件表示执行默认的查看操作,通常用于打开文件或链接。对应的Action字符串为`android.intent.action.VIEW`。 #### DEFAULT_CATEGORY (默认类别) 此类别...

    Zend Framework动作助手Redirector用法实例详解

    - setGotoSimple():该方法用于设置默认的URL,当没有参数给gotoSimple()方法时,程序将会转向这个预设的URL。这个方法和Zend_Controller_Action::_forward()方法类似,接受动作名、控制器名、模块名以及参数数组...

    Ajax结合Struts的经典实例

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // 执行业务逻辑 String message = "Hello, this is an...

    struts乱码处理

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { request.setCharacterEncoding("UTF-8"); // 处理...

    Struts_config.xml详解

    需要注意的是,`forward`与`include`两个属性是互斥的,即在一个Action配置中只能存在其中一个。 2. **其他配置** - **roles** - 指定允许调用该Action的安全角色,多个角色之间用逗号`,`分隔。在处理请求时,`...

    session网页有效期

    public ActionForward session(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println(...

    struts1.x整合freemarker

    它通过ActionForm来封装用户请求的数据,Action类处理这些数据并调用服务层方法,最后通过Result(ActionForward)决定视图的跳转。 2. **Freemarker模板语言** Freemarker是一个非侵入式的模板引擎,它与Java代码...

    struts1.x多文件上传

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { FileUploadForm uploadForm = ...

    ros PCQ限速 详解

    - **默认设置**:默认情况下,如果未明确设置,`pcq-rate`参数应设为0。这意味着系统会根据实际情况动态调整速率,而不是固定在一个特定值上。 - **关键配置命令**: - `/queuetype add name=pcq-download kind=pcq...

    ITjob就业培训java教材32.docx

    ActionServlet的配置包括设置`servlet-name`(例如`action`)、`servlet-class`(`org.apache.struts.action.ActionServlet`),以及一系列初始化参数如`application`、`config`、`debug`和`detail`。此外,还需要...

    java技术面试题.pdf

    Action的execute()方法返回的ActionForward对象指示请求应转发到哪个JSP组件,从而生成动态网页。 2. **Spring框架**: - Spring是一个全面的Java企业级应用开发框架,提供了IOC(Inversion of Control)容器和AOP...

    Struts2 demo

    - 有多种结果类型,如ACTION、FORWARD、REDIRECT、CONTINUATION等,满足不同场景需求。 - 全局结果可以在包级别定义,作为默认结果或异常处理。 7. **接收请求参数.rar** - Struts2通过注解或Action类的属性自动...

    switch security.rar

    注意:如果没有说明一条语句的操作行为,默认的行为是forward。如果进入VLAN的数据流没有匹配上任何一条语句,最后将被丢弃掉。 基于IP的: Config#access-list 1 permit 192.168.1.1 0.0.0.0 Config#vlan access...

Global site tag (gtag.js) - Google Analytics