`
Elvis_Wu
  • 浏览: 51031 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

另类的Struts配置

    博客分类:
  • JAVA
阅读更多
JPetStore-5.0程序中不一样的struts
关键字: struts
平常我们使用struts会定义form,写Action,设置struts-config.xml文件,然后页面的数据是以form对象传给Action,然后调用Service层,完成业务,再返回struts-config.xml配置的页面。
而JPetStore-5.0的struts不同,例如:
页面是这样的
<html:form method="post" action="/shop/editAccount.shtml">   
    <html:hidden name="accountBean" property="validation" value="edit"/>   
    <html:hidden name="accountBean" property="username"/>   
    <h3>User Information</h3>   
    <table>   
      <tr>   
        <td>User ID:</td><td><bean:write name="accountBean" property="username"/></td>   
      </tr><tr>   
      <td>New password:</td><td><html:password name="accountBean" property="password"/></td>   
    </tr><tr>   
      <td>Repeat password:</td><td><html:password name="accountBean" property="repeatedPassword"/></td>   
    </tr>   
    </table>   
    <%@ include file="IncludeAccountFields.jsp" %>   
    <input type="submit" name="submit" value="Save Account Information"/>   
</html:form> 
 
  

<html:form method="post" action="/shop/editAccount.shtml">
    <html:hidden name="accountBean" property="validation" value="edit"/>
    <html:hidden name="accountBean" property="username"/>
    <h3>User Information</h3>
    <table>
      <tr>
        <td>User ID:</td><td><bean:write name="accountBean" property="username"/></td>
      </tr><tr>
      <td>New password:</td><td><html:password name="accountBean" property="password"/></td>
    </tr><tr>
      <td>Repeat password:</td><td><html:password name="accountBean" property="repeatedPassword"/></td>
    </tr>
    </table>
    <%@ include file="IncludeAccountFields.jsp" %>
    <input type="submit" name="submit" value="Save Account Information"/>
</html:form>


struts-config.xml的配置文件是这样的
 
<form-beans>   
    <form-bean name="accountBean" type="com.ibatis.jpetstore.presentation.AccountBean"/>   
</form-beans>   
<action path="/shop/editAccount" type="org.apache.struts.beanaction.BeanAction" 
            name="accountBean" scope="session" 
            validate="true" input="/account/EditAccountForm.jsp">   
      <forward name="success" path="/shop/index.shtml"/>   
</action> 

<form-beans>
    <form-bean name="accountBean" type="com.ibatis.jpetstore.presentation.AccountBean"/>
</form-beans>
<action path="/shop/editAccount" type="org.apache.struts.beanaction.BeanAction"
            name="accountBean" scope="session"
            validate="true" input="/account/EditAccountForm.jsp">
      <forward name="success" path="/shop/index.shtml"/>
</action>


AccountBean是这样的:
public String editAccount() {   
    try {   
      accountService.updateAccount(account);   
      account = accountService.getAccount(account.getUsername());   
      myList = catalogService.getProductListByCategory(account.getFavouriteCategoryId());   
      return SUCCESS;   
    } catch (Exception e) {   
      throw new BeanActionException ("There was a problem updating your Account Information. Cause: "+e, e);   
    }   
} 

public String editAccount() {
    try {
      accountService.updateAccount(account);
      account = accountService.getAccount(account.getUsername());
      myList = catalogService.getProductListByCategory(account.getFavouriteCategoryId());
      return SUCCESS;
    } catch (Exception e) {
      throw new BeanActionException ("There was a problem updating your Account Information. Cause: "+e, e);
    }
}



jsp把页面form提交给了/shop/editAccount.shtml,其实所有的数据都提到了一个类里org.apache.struts.beanaction.BeanAction,这个类其实就是一个我们平常写的Action,里面是这样的:

public final ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {   
    String forward = SUCCESS_FORWARD;   
    try {   
      if (!(form instanceof BaseBean)) {   
        if (form != null) {   
          throw new BeanActionException("The form for mapping '" + mapping.getPath() + "' named '" + mapping.getName() + "' was not an instance of BaseBean. BeanAction requires an BaseBean instance.");   
        } else {   
          throw new BeanActionException("The form for mapping '" + mapping.getPath() + "' named '" + mapping.getName() + "' was null. BeanAction requires an BaseBean instance.");   
        }   
      }   
      BaseBean bean = (BaseBean) form;   
      ActionContext.initCurrentContext(request, response);   
      if (bean != null) {   
        // Explicit Method Mapping   

        Method method = null;   
        String methodName = mapping.getParameter();   
        if (methodName != null && !NO_METHOD_CALL.equals(methodName)) {   
          try {   
            method = bean.getClass().getMethod(methodName, null);   
            synchronized (bean) {   
              forward = bean.getInterceptor().intercept(new ActionInvoker(bean, method));   
            }   
          } catch (Exception e) {   
            throw new BeanActionException("Error dispatching bean action via method parameter ('" + methodName + "'). Cause: " + e, e);   
          }   
        }   
    
        // Path Based Method Mapping   

        if (method == null && !NO_METHOD_CALL.equals(methodName)) {   
          methodName = mapping.getPath();   
          if (methodName.length() > 1) {   
            int slash = methodName.lastIndexOf("/") + 1;   
            methodName = methodName.substring(slash);   
            if (methodName.length() > 0) {   
              try {   
                method = bean.getClass().getMethod(methodName, null);   
                synchronized (bean) {   
                  forward = bean.getInterceptor().intercept(new ActionInvoker(bean, method));   
                }   
              } catch (Exception e) {   
                throw new BeanActionException("Error dispatching bean action via URL pattern ('" + methodName + "'). Cause: " + e, e);   
              }   
            }   
          }   
        }   
      }   
    } catch (Exception e) {   
      forward = "error";   
      request.setAttribute("BeanActionException", e);   
    }   
    return mapping.findForward(forward);   
} 


也就是说,在这个类里,程序会取配置文件里的 parameter 属性是否定义,如果定义了,则就用反射调用com.ibatis.jpetstore.presentation.AccountBean里的相应方法;如果没有定义,则就会去配置文件里的path="/shop/editAccount" 属性,取最后一个斜杠后的单词,再用反射调用相应方法;如果parameter 定义了且是parameter="*"则不调用任何一个方法,直接返回,配置的返回页面。
分享到:
评论

相关推荐

    STRUTS配置文件

    struts配置文件,用于创建springmvc与struts工程的配置文件,集合加数组获得后台的空间空间空间 空间 空间空了

    struts配置大全(1、2全)

    本资料“struts配置大全(1、2全)”涵盖了Struts 1和Struts 2两个版本的核心配置,以及与Spring MVC的整合配置,旨在帮助开发者深入理解并熟练掌握Struts框架的配置方法。 **Struts 1配置** Struts 1的配置主要集中...

    struts配置

    根据给定文件的信息来看,这段文字实际上是在描述K线图的相关知识,并非“struts配置”。但是为了满足您的需求,我会基于这段描述进行一个错误纠正并生成与“struts配置”相关的知识点。以下是对“struts配置”的...

    配置Struts配置Struts

    配置Struts配置Struts配置Struts配置Struts配置Struts配置Struts

    struts的配置与应用

    struts的配置与应用struts的配置与应用struts的配置与应用struts的配置与应用struts的配置与应用struts的配置与应用struts的配置与应用struts的配置与应用struts的配置与应用

    简单Struts配置案例

    本教程将深入讲解如何配置一个简单的Struts应用,以便开发者能够快速理解并掌握其基本操作。 首先,我们需要理解Struts框架的核心概念。在Struts中,Controller由ActionServlet扮演,它负责接收HTTP请求,解析请求...

    ·Struts2配置文件介绍 超级详细

    ### Struts2配置文件介绍 #### 一、Struts2的核心配置文件 在Struts2框架中,有多个重要的配置文件用于控制应用的行为与结构,其中最核心的是`struts.xml`文件。此外还包括`web.xml`、`struts.properties`、`...

    struts-config.xml struts标准配置文件 struts-config

    struts-config.xml struts标准配置文件 struts-config

    struts配置的文件 连接池 mysql等配置文件

    下面将详细讨论Struts2配置文件的相关知识点,包括核心配置文件、连接池配置以及MySQL数据库的配置。 1. **Struts2核心配置文件**:主要由`struts.xml`构成,它是整个Struts2应用的主配置文件。在这个文件中,你...

    struts2 配置dtd 自动提示

    在配置Struts2时,通常会使用一个名为`struts.xml`的配置文件,该文件定义了应用程序的行为和组件。为了在开发环境中获得更好的代码辅助和提示,我们需要使IDE(例如Eclipse)理解`struts.xml`文件的结构,这通常...

    多个struts配置文件使用

    在Struts框架中,可以利用多个配置文件来组织和管理应用程序的不同部分,这不仅有助于保持代码的整洁,还能提高开发效率。以下是对“多个struts配置文件使用”这一主题的详细解析。 ### 一、Struts框架概述 Struts...

    Struts配置及标签库详解

    本文将深入探讨Struts的配置以及其标签库的详细内容。 在Struts框架中,配置文件起着至关重要的作用。主要的配置文件有两个:`struts-config.xml`和`web.xml`。`struts-config.xml`是Struts的核心配置文件,它定义...

    Struts配置

    详细讲解了Struts如何配置,适合刚刚接触Struts的开发者来配置环境

    Struts配置文件详解

    ### Struts配置文件详解 #### 一、Struts配置文件的重要性与作用 Struts框架作为SSH(Struts+Spring+Hibernate)三大框架之一,在企业级Web应用开发中扮演着核心角色。Struts配置文件是Struts框架的灵魂所在,它...

    struts2 Https 配置

    这可以通过在`struts.xml`配置文件中使用`&lt;constant&gt;`标签设置`struts.action.excludePattern`属性来实现。 ```xml &lt;constant name="struts.action.excludePattern" value="^http://.*"/&gt; ``` 3. **过滤器配置*...

    Struts配置文件详解.pdf

    ### Struts配置文件详解 #### 一、Struts配置文件的重要性与作用 Struts框架作为Java Web开发领域中的一种流行MVC(Model-View-Controller)框架,它提供了一种结构化的方式来构建Web应用程序。在Struts框架中,`...

    struts配置文件拆分

    struts-config.xml拆分,超级简单

    freemarker与struts2详细配置

    **FreeMarker与Struts2的整合配置详解** FreeMarker是一个基于Java的模板引擎,它用于生成动态HTML、XML或其他格式的文本输出。Struts2是一个流行的MVC(模型-视图-控制器)框架,用于构建Java Web应用程序。将...

Global site tag (gtag.js) - Google Analytics