最近有人问我,你做项目中用户的一个请求是怎么与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 中,自定义标签是提供一种灵活的方式,使得视图层(通常为 JSP 页面)能够更好地与业务逻辑交互,从而提高代码的可读性和可维护性。本文将深入探讨如何在 Struts 中实现自定义标签。 一、自定义标签概述 ...
本资源详细介绍了如何在Struts2中自定义分页标签,使得开发过程更加便捷。 在Struts2中,分页通常涉及到以下几个关键步骤: 1. **创建Action类**:首先,你需要创建一个Action类,该类将处理用户的请求,包括获取...
3. **配置struts-config.xml**:在项目的`struts-config.xml`配置文件中,你需要将自定义的ActionForm与相应的Action进行关联,并指定表单验证使用的ActionForm类。同时,可以在这里配置全局错误消息,以及默认的...
### Struts2 自定义验证程序的实现方法详解 #### 一、Struts2 内建验证程序实现的分析 在探讨如何实现自定义验证程序之前,我们先来了解一下 Struts2 的内置验证机制。Struts2 提供了丰富的内置验证器(Validator...
本文将深入探讨Struts2自定义标签的创建过程及其应用场景,旨在为开发者提供实用的指导和参考。 #### 二、自定义标签的概念与作用 自定义标签本质上是一种封装了特定逻辑的JSP标签,它可以被重用,使得JSP页面的...
自定义Struts 2 MVC框架的过程有助于深入理解其工作原理,从而更好地应用和优化项目。 首先,我们来详细探讨Struts 2的核心组件和它们的角色: 1. **模型(Model)**:模型是应用的核心,负责处理业务逻辑和数据。在...
在Struts2的配置文件(通常是`struts.xml`)中,添加标签库的配置,让框架知道如何找到并使用这些自定义标签。 ```xml <struts> <!-- 其他配置 --> <constant name="struts.custom.i18n.resources" value=...
`convertValue`方法是核心,负责执行实际的转换操作,而`getConvertedType`方法则告诉Struts2这个转换器用于哪个类型。 接下来,为了让Struts2知道并使用我们的自定义转换器,我们需要在配置文件中注册它。在`...
通常,你只需要重写`intercept()`方法,它接受一个`ActionInvocation`对象,该对象代表当前Action的执行过程。 ```java public class SimpleInterceptor extends AbstractInterceptor { @Override public String ...
这些关键字将在验证过程中与错误信息对应。 7. **整合到Action类(Integration with Action Class)** 最后,确保Action类使用了`@Validated`注解,或者在Action配置中设置了`validate`属性为true,以便Struts 2在...
在实践过程中,你将更深入地理解Struts2的工作流程,包括请求的分发、值栈的使用、以及Result的返回。此外,通过自定义类型转换和拦截器,你将能够灵活应对各种业务需求,提升应用程序的灵活性和可扩展性。 总之,...
配置Struts2框架以使用自定义拦截器是关键步骤。在`struts2.xml`配置文件中,你需要在合适的`<package>`标签下定义拦截器。例如: ```xml <package name="customPackage" namespace="/" extends="struts-default"> ...
自定义标签则可以作为用户界面与业务逻辑之间的桥梁,简化页面渲染过程。 一、Struts框架基础 Struts框架的核心组件包括Action、ActionForm、ActionServlet、配置文件(struts-config.xml)以及JSP视图。Action处理...
5. **处理验证结果**:在Action类中,Struts会自动调用验证器,如果验证失败,Action的execute方法不会执行,而是返回“input”结果,可以在JSP页面中显示错误信息。 **三、自定义验证器** 当内置的验证规则不能...
通过以上步骤,我们就可以在Struts2应用中自如地使用自定义ResultType了。记得在开发过程中遵循良好的编程实践,如代码复用、异常处理和注释,以确保代码质量。同时,自定义ResultType时应尽量保持其通用性,以便在...
书中通过实例演示了如何将Struts 1应用迁移到Struts 2,使开发者能够理解两者的差异和集成方法。 Struts 2的关键特性包括: 1. **Action类与Result**:Struts 2中的Action类替代了Struts 1的Form Bean,负责处理...
### Struts1与Struts2的主要区别 #### 1. Action类的设计差异 - **Struts1**: 在Struts1框架中,Action类必须继承自一个抽象类`org.apache.struts.action.Action`。这种方式可能导致的问题是代码灵活性较低,尤其...
执行过程中,Interceptor链会按照定义的顺序执行。 7. **模型驱动和值栈** Struts2使用值栈(Value Stack)存储Action和结果对象,使得视图可以直接访问模型数据。自定义Action时,可以通过`ValueStack`将模型对象...
在自定义Struts的过程中,我们通常会涉及到以下几个核心知识点: 1. **配置文件**: - Struts2的配置通常基于`struts.xml`文件,它定义了Action类、结果类型、拦截器栈等信息。自定义Struts时,你需要创建自己的...
在自定义Struts框架的过程中,我们可能会涉及到以下几个关键知识点: 1. **MVC设计模式**:Struts框架的核心是MVC模式,它将业务逻辑(Model)、用户界面(View)和控制逻辑(Controller)分离,使得代码结构清晰,...