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

struts1自定义方法的使用与执行过程

阅读更多

最近有人问我,你做项目中用户的一个请求是怎么与struts1交互的,我说请求的url中包含了action的名字和方法名,这样就可以找到相应方法,执行并返回给用户了。 他又问,那struts1中有什么方法呢,execute;那怎么能调用到自定义的方法,在请求中指定,在struts-config.xml中配置。。。  接下来他疑惑了,说struts2 是可以以struts.xml中配置方法名的。 是,他说的没错,只是我没有表述清楚struts1自己定义方法的关键点。 下面具体说一下struts1中使用自定义方法及自定义方法执行的过程。

在struts1中我们知道核心的控制器是ActionServlet这个类,那么它负责了获取用户的请求,改变modle状态,返回用户试图,这是MVC模型的一个交互方式。那么他的内部实现是如何的呢? 通常我们在使用struts定义一个action中会继承MappingDispatchAction、LookupDispatchAction,或者直接继承DispatchAction,他们的区别这里暂不做解释。 这里我们直接继承DispatchAction类。如我们的类就叫LoginAction。先上代码

test.LoginAction

public class LoginAction extends DispatchAction{
    public ActionForward login(ActionMapping mapping, ActionForm form,
             HttpServletRequest resquest, HttpServletResponse response) throws Exception{
        //TODO 逻辑
        mapping.findForward("login");
    }
}

 struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">
<struts-config>
 <form-beans>
    <form-bean name="loginFormBean" type="test.LoginActionForm" />
 </form-beans>
 <action-mappings>
    <action name="loginFormBean" parameter="method"
			path="/loginAction" scope="request"
			type="test.LoginAction">
			<forward name="login" path="/index.jsp" />
    </action>
  </action-mappings>
</struts-config>

 login.jsp

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<html>
<head>
    <script type="text/javascript">
        function subForm(){
            document.loginFormBean.submit();
        }
    </scipt>
</head>

<body>
  <html:form action="/loginAction.do?method=login" method="post"
	onsubmit="return subForm()">
      <input type="text" name="name"/>
      <input type="password" name="pwd"/>
      <input type="button" value="submit" onclick="subForm"/>
  </html:form>
</body>
</html>

 

现在就开始说下struts1是如何找到我们自定义的login这个方法的

我们首先看login.jsp,这个是我们首先访问的页面,它模拟一个登录的操作,那么输入用户名、密码,点击submit后,会执行subForm这个函数,这个函数要做的就是执行path为"/loginAction.do?method=login"的操作且用的是POST方式,这里看html:form中action的值。

当开始执行loginAction.do时,首先进入ActionServlet中的doPost方法(假设ActionServlet的初始化方法已经在server启动时执行了,那么也就把相关的配置包括struts-config的内容加载了进来),然后调用process方法,在process方法中首先有selectModule的过程(其实就是找到这个请求的url对应的actionMapping配置,并放到request中),在process方法的最后会调用RequestProcess的process方法,而process最终会调用到DispatchAction的execute方法,这个就是struts请求的默认执行方法了。而我们的LoginAction类中并没有execute方法,那它肯定没法执行了。

其实这里就要回头再看一下我们的请求url中是不是有个method=login这个参数,在struts-config.xml中对loginAction的配置中有个 parameter="method" 的配置。那现在在回到我们的DispatchAction的execute方法中,在这里,会获取这个值(如果配置了),这里就会获取到这个parateter的值为method。而拿到这个method后又做了什么,其实就是把method作为参数通过request.getParameter(method)获取到一个值,这个值是什么,其实就是请求的url中的login,这样,要执行的方法就获取到了,而再通过反射的机制,去调用login这个方法,从而完成对login方法请求,并返回视图给用户。 

 

 

 

 

 

分享到:
评论

相关推荐

    struts实现自定义标签

    在 Struts 中,自定义标签是提供一种灵活的方式,使得视图层(通常为 JSP 页面)能够更好地与业务逻辑交互,从而提高代码的可读性和可维护性。本文将深入探讨如何在 Struts 中实现自定义标签。 一、自定义标签概述 ...

    Struts2自定义分页标签

    本资源详细介绍了如何在Struts2中自定义分页标签,使得开发过程更加便捷。 在Struts2中,分页通常涉及到以下几个关键步骤: 1. **创建Action类**:首先,你需要创建一个Action类,该类将处理用户的请求,包括获取...

    自定义 validate验证 struts1框架

    3. **配置struts-config.xml**:在项目的`struts-config.xml`配置文件中,你需要将自定义的ActionForm与相应的Action进行关联,并指定表单验证使用的ActionForm类。同时,可以在这里配置全局错误消息,以及默认的...

    struts2 自定义验证程序的实现方法详解

    ### Struts2 自定义验证程序的实现方法详解 #### 一、Struts2 内建验证程序实现的分析 在探讨如何实现自定义验证程序之前,我们先来了解一下 Struts2 的内置验证机制。Struts2 提供了丰富的内置验证器(Validator...

    Struts2自定义标签

    本文将深入探讨Struts2自定义标签的创建过程及其应用场景,旨在为开发者提供实用的指导和参考。 #### 二、自定义标签的概念与作用 自定义标签本质上是一种封装了特定逻辑的JSP标签,它可以被重用,使得JSP页面的...

    Struts 2 自定义MVC 框架

    自定义Struts 2 MVC框架的过程有助于深入理解其工作原理,从而更好地应用和优化项目。 首先,我们来详细探讨Struts 2的核心组件和它们的角色: 1. **模型(Model)**:模型是应用的核心,负责处理业务逻辑和数据。在...

    Struts2 自定义标签

    在Struts2的配置文件(通常是`struts.xml`)中,添加标签库的配置,让框架知道如何找到并使用这些自定义标签。 ```xml &lt;struts&gt; &lt;!-- 其他配置 --&gt; &lt;constant name="struts.custom.i18n.resources" value=...

    struts2自定义类型转换器

    `convertValue`方法是核心,负责执行实际的转换操作,而`getConvertedType`方法则告诉Struts2这个转换器用于哪个类型。 接下来,为了让Struts2知道并使用我们的自定义转换器,我们需要在配置文件中注册它。在`...

    JSP 开发之Struts2内建自定义拦截器.docx

    通常,你只需要重写`intercept()`方法,它接受一个`ActionInvocation`对象,该对象代表当前Action的执行过程。 ```java public class SimpleInterceptor extends AbstractInterceptor { @Override public String ...

    struts 2.0自定义验证器

    这些关键字将在验证过程中与错误信息对应。 7. **整合到Action类(Integration with Action Class)** 最后,确保Action类使用了`@Validated`注解,或者在Action配置中设置了`validate`属性为true,以便Struts 2在...

    struts2自定义类型转换、拦截器实例练习

    在实践过程中,你将更深入地理解Struts2的工作流程,包括请求的分发、值栈的使用、以及Result的返回。此外,通过自定义类型转换和拦截器,你将能够灵活应对各种业务需求,提升应用程序的灵活性和可扩展性。 总之,...

    struts2自定义拦截器.pdf

    配置Struts2框架以使用自定义拦截器是关键步骤。在`struts2.xml`配置文件中,你需要在合适的`&lt;package&gt;`标签下定义拦截器。例如: ```xml &lt;package name="customPackage" namespace="/" extends="struts-default"&gt; ...

    利用Struts和自定义标签实现分页,包括类库、例题、使用说明

    自定义标签则可以作为用户界面与业务逻辑之间的桥梁,简化页面渲染过程。 一、Struts框架基础 Struts框架的核心组件包括Action、ActionForm、ActionServlet、配置文件(struts-config.xml)以及JSP视图。Action处理...

    struts验证器validator使用,以及自定义验证器

    5. **处理验证结果**:在Action类中,Struts会自动调用验证器,如果验证失败,Action的execute方法不会执行,而是返回“input”结果,可以在JSP页面中显示错误信息。 **三、自定义验证器** 当内置的验证规则不能...

    自定义的struts2的resulttype

    通过以上步骤,我们就可以在Struts2应用中自如地使用自定义ResultType了。记得在开发过程中遵循良好的编程实践,如代码复用、异常处理和注释,以确保代码质量。同时,自定义ResultType时应尽量保持其通用性,以便在...

    struts2.0整合Struts 1

    书中通过实例演示了如何将Struts 1应用迁移到Struts 2,使开发者能够理解两者的差异和集成方法。 Struts 2的关键特性包括: 1. **Action类与Result**:Struts 2中的Action类替代了Struts 1的Form Bean,负责处理...

    转:struts1与struts2的区别

    ### Struts1与Struts2的主要区别 #### 1. Action类的设计差异 - **Struts1**: 在Struts1框架中,Action类必须继承自一个抽象类`org.apache.struts.action.Action`。这种方式可能导致的问题是代码灵活性较低,尤其...

    自定义实现Struts2源代码

    执行过程中,Interceptor链会按照定义的顺序执行。 7. **模型驱动和值栈** Struts2使用值栈(Value Stack)存储Action和结果对象,使得视图可以直接访问模型数据。自定义Action时,可以通过`ValueStack`将模型对象...

    自定义struts(实现拦截器)

    在自定义Struts的过程中,我们通常会涉及到以下几个核心知识点: 1. **配置文件**: - Struts2的配置通常基于`struts.xml`文件,它定义了Action类、结果类型、拦截器栈等信息。自定义Struts时,你需要创建自己的...

    自定义struts框架

    在自定义Struts框架的过程中,我们可能会涉及到以下几个关键知识点: 1. **MVC设计模式**:Struts框架的核心是MVC模式,它将业务逻辑(Model)、用户界面(View)和控制逻辑(Controller)分离,使得代码结构清晰,...

Global site tag (gtag.js) - Google Analytics