一、.action文件的概述
.action是Struts框架的核心文件之一,是指一个控制器的动作。在Struts中,.action文件用来处理各种动作请求并向客户端发送响应结果,可以看成是一个中间人角色,它接收JSP页面的请求和参数并将其解析,进而调用相关的Java类和方法来实现业务逻辑和实现结果的返回。.action文件通常由不同的请求方法组成,而每个请求方法对应着一个Java类的方法。它是整个Struts框架的核心组成部分之一,起着控制整个应用程序流程的作用。
在使用Struts框架创建的Web应用程序中,通常需要将请求与响应解耦,使用专门的控制器来处理。而.action文件就是这个专门的控制器,它负责从网络中接收客户端的请求并将其转发到相应的视图或者业务逻辑组件。基于MVC架构的Struts框架,通过.action文件将负责控制层的action类和视图层的JSP页面联系起来,将业务逻辑与用户界面完全分离。
总而言之,.action文件是Struts框架中的一个非常重要的文件,它是连接用户请求和业务逻辑的桥梁,是整个Struts应用程序的核心组成部分。
二、.action文件的结构
一个.action文件通常有一个名称,一个命名空间(命名空间可选),一个或多个请求方法(methods),以及一个或多个全局结果(global results)。
其中,名称就是文件的名称,例如“login.action”;命名空间表示该.action文件所处的位置,以便Struts框架能够正确加载文件;请求方法是指.action文件所对应的方法,它会像任何其他方法一样被执行。而全局结果则是可以被任何一个方法共享的结果,它们位于.action文件的外部,可以通过文件的名称来访问。
以一个简单的例子来讲解.action文件的结构,我们来看看一个login.action文件的结构:
<!--action文件--> <!--名称为“login”--> <!--命名空间为default--> <action name="login" class="com.example.LoginAction" method="execute"> <!--经过Struts处理后,将转发到名称为success的结果--> <result name="success">/success.jsp</result> <!--经过Struts处理后,将转发到名称为error的结果--> <result name="error">/error.jsp</result> </action>
在上面的例子中,我们定义了一个名为“login”的action文件,它的命名空间为“default”,请求方法为“execute”,意味着当使用“/login.action”这个URL访问时,将会执行LoginAction类中的execute方法。在执行之后,如果结果是“success”,则将转发到/success.jsp页面,否则将转发到/error.jsp页面。
三、.action文件的用途
.action文件的用途非常广泛。它可以处理各种类型的请求,从简单的表单提交到AJAX请求等等。例如,我们可以使用.action文件来处理以下情况:
1. 处理表单提交
在Web开发中,表单是非常常见的交互方式。当用户提交表单时,我们需要将表单数据发送到服务器端进行处理。使用.action文件可以轻松处理表单的提交,处理方式如下:
// JSP页面 <form action="login.action" method="post"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit" value="提交"> </form> // 对应的action文件 <action name="login" class="com.example.LoginAction" method="execute"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> // LoginAction类 public class LoginAction { private String username; private String password; public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public String execute() { if ("admin".equals(username) && "123456".equals(password)) { return "success"; } else { return "error"; } } }
在上面的例子中,我们定义了一个表单,其提交的地址为“login.action”。因为表单使用的是POST方法,所以.action文件中需要使用“method=’post’”来接收请求。在LoginAction中,我们定义了两个属性“username”和“password”,并通过setter方法设置,这样在执行“execute”方法时就可以访问到这些属性的值。根据这些参数,我们决定返回何种结果,最终结果由.action文件指定。
2. 处理AJAX请求
在现代Web应用程序中,AJAX请求是非常常见的。使用.action文件可以轻松处理这些请求。需要注意的是,在.action文件中,我们需要使用“@Result(type='json')”来返回JSON格式的数据,例如:
// JSP页面 <button onclick="getData()">获取数据</button> <script> function getData() { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { var data = JSON.parse(xhr.responseText); // do something with data } } xhr.open("POST", "ajax.action", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send("data=123"); } </script> // 对应的action文件 <action name="ajax" class="com.example.AjaxAction" method="execute"> <result name="success" type="json"></result> </action> // AjaxAction类 public class AjaxAction { private String data; public void setData(String data) { this.data = data; } public String execute() { // do something with data return "success"; } }
在上面的例子中,我们定义了一个按钮,其点击事件会使用AJAX请求来获取数据。使用XMLHttpRequest对象,我们可以使用POST方式发送一个包含“data=123”的数据包。在.action文件中,我们定义了一个名为“ajax”的动作,将会执行AjaxAction类中的execute方法,并返回JSON格式的数据。
四、.action文件的注意事项
1. 命名规范
根据Struts框架的规范,.action文件的名称应该以“.action”结尾,并且要有具有明确的意义。例如,如果你正在处理一个表单提交,请将文件命名为“login.action”而不是“form.action”。
2. 使用前后缀配置
在Struts的配置文件中,可以使用“
<constant name="struts.action.extension" value="action"/> <constant name="struts.action.prefix" value="/pages/"/> <constant name="struts.action.suffix" value=".jsp"/>
3. 可配置的参数
.action文件可以传递一些参数以便在执行方法时使用。例如,我们可以在.action文件中添加以下内容以传递一个名为“userId”的参数:
<action name="user" class="com.example.UserAction" method="execute"> <param name="userId">123</param> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action>
在UserAction中,我们需要使用如下代码来获取参数:
public class UserAction extends ActionSupport { private int userId; public void setUserId(int userId) { this.userId = userId; } public String execute() { // do something with userId return SUCCESS; } }
4. 防止XSS攻击
使用.action文件处理用户提交的请求时,需要注意防止XSS攻击。Struts已经在
五、总结
.action文件是Struts框架的核心组成部分之一,它是连接用户请求和业务逻辑的桥梁,是整个Struts应用程序运行的关键。.action文件可以用来处理各种类型的请求,包括表单提交、AJAX请求等等。在使用.action文件时,需要注意命名规范、使用前后缀配置、可配置的参数以及防止XSS攻击等问题。