Struts 2 配置Action详解
在 Struts 2 中,Action 是一个处理请求的对象,负责接收来自用户的请求,并进行处理。配置 Action 是 Struts 2 中比较重要的一项任务,配置不当会导致程序无法正常工作或者存在安全隐患。本篇文章将详细讲解 Struts 2 中如何配置 Action。
配置 Struts 2 Action
在 Struts 2 中,我们可以通过配置 XML 文件的方式来定义 Action。
<package name="default" namespace="/" extends="struts-default">
<action name="hello" class="com.example.HelloAction">
<result name="success">/hello.jsp</result>
</action>
</package>
上面的配置代码将一个名为 "hello" 的 Action 映射到类 com.example.HelloAction
上,并将成功响应映射到 JSP 文件 /hello.jsp
上。
在上面的配置中,<package>
元素定义了一个包,name
属性指定包名,namespace
属性指定 URL 前缀,extends
属性指定继承的包名。<action>
元素定义了一个 Action,name
属性指定 Action 名称,class
属性指定处理该 Action 的 Java 类的名称。通过 <result>
元素指定不同状态的输出结果。
配置 Struts 2 Action 参数
在上面的 Action 配置文件中,我们可以通过 <param>
标签为 Action 设置参数。
<package name="default" namespace="/" extends="struts-default">
<action name="hello" class="com.example.HelloAction">
<param name="message">Hello, World!</param>
<result name="success">/hello.jsp</result>
</action>
</package>
上面的配置代码为 hello
Action 设置了一个名为 message
的参数,并将其值设置为 Hello, World!
。
示例1:使用 Struts 2 提交表单
下面是一个示例代码演示了如何使用 Struts 2 提交表单。
<package name="user" namespace="/user" extends="struts-default">
<action name="register" class="com.example.RegisterAction">
<result name="success">/success.jsp</result>
<result name="input">/register.jsp</result>
</action>
</package>
在上面的代码中,我们定义了一个新的包 /user
。在该包中,通过 <action>
元素定义了一个名为 register
的 Action,将其映射到名为 com.example.RegisterAction
的 Java 类上。
在 RegisterAction
类中,我们可以通过注解或属性的方式定义该 Action 的属性值。例如:
@Namespace("/user")
public class RegisterAction extends ActionSupport {
private String username;
private String password;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
@Action(value = "register", results = {
@Result(name = "success", type = "redirectAction", params = {"actionName", "welcome"}),
@Result(name = "input", location = "/register.jsp")
})
public String execute() {
// 保存用户数据
return SUCCESS;
}
}
在上面的代码中,我们使用 @Namespace
注解指定了该 Action 的命名空间。定义 username
和 password
属性并提供其 setter 方法来接受表单提交的数据。
在 execute
方法中,我们使用 @Action
注解来定义 Action 的参数。在该注解的 results
属性中通过 <result>
元素来设置 Action 的不同状态的输出结果。在 success
状态下通过 redirectAction
来进行重定向到 URL 为 "/welcome" 的 Action,而在 input
状态下直接返回到 "/register.jsp" 页面。
在 JSP 页面中,我们可以通过 <s:form>
和 <s:textfield>
等 Struts 2 标签来实现表单的输入和提交。
<s:form action="register">
<s:textfield name="username" label="Username" />
<s:password name="password" label="Password" />
<s:submit />
</s:form>
示例2:使用 Struts 2 处理 AJAX 请求
下面是一个示例代码演示了如何使用 Struts 2 处理 AJAX 请求。
<package name="user" namespace="/user" extends="struts-default">
<action name="username_check" class="com.example.CheckUsernameAction">
<result name="success" type="json">
<param name="root">result</param>
</result>
</action>
</package>
如上面的代码所示,我们定义了一个名为 username_check
的 Action,将其映射到名为 com.example.CheckUsernameAction
的 Java 类上。
在 CheckUsernameAction
类中,我们可以通过处理 AJAX 请求来检查用户名是否存在。例如:
@Namespace("/user")
public class CheckUsernameAction extends ActionSupport {
private String username;
public void setUsername(String username) {
this.username = username;
}
@Action(value = "username_check", results = {
@Result(name = "success", type = "json")
})
public String execute() {
boolean result = false;
// 检查用户名是否存在
if (username.equals("admin")) {
result = true;
}
Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("result", result);
setJsonData(resultMap);
return SUCCESS;
}
private String jsonData;
public String getJsonData() {
return jsonData;
}
public void setJsonData(String jsonData) {
this.jsonData = jsonData;
}
public void setJsonData(Map<String, Object> jsonMap) {
try {
JSONObject jsonObject = JSONObject.fromObject(jsonMap);
jsonData = jsonObject.toString();
} catch (Exception e) {
}
}
}
在上面的代码中,我们使用 @Namespace
注解指定了该 Action 的命名空间。定义 username
属性并提供其 setter 方法来接受 AJAX 请求的数据。
在 execute
方法中,我们使用 @Action
注解来定义 Action 的参数。在该注解的 results
属性中通过 <result>
元素来设置 Action 的不同状态的输出结果。在 success
状态下使用 JSON 数据格式来返回结果给客户端。
在 CheckUsernameAction
的属性中,我们定义了 jsonData
属性和 getJsonData
和 setJsonData
方法来处理返回给客户端的 JSON 数据。
在客户端中,我们可以使用 AJAX 请求来向 username_check
Action 提交数据。例如:
var usernameInput = document.getElementById('username_input');
var checkButton = document.getElementById('check_button');
checkButton.onclick = function() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var result = JSON.parse(xhr.responseText);
if (result.result) {
// 用户名已存在
} else {
// 用户名可用
}
}
}
xhr.open('POST', '/user/username_check');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('username=' + usernameInput.value);
}
如上面的代码所示,我们使用 XMLHttpRequest
对象来发送 AJAX 请求,提交数据并处理返回结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts 2 配置Action详解 - Python技术站