详解Java的Struts2框架的结构及其数据转移方式
Struts2框架的结构
Struts2是一个MVC架构的Web框架,其结构包含以下几个部分:
Action类
Action类用于处理请求并响应给用户,是整个框架中的核心组件,通常存放在src目录下的com.example.action包中,下面是一个简单的Action类示例:
package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute() throws Exception {
return SUCCESS;
}
}
配置文件
Struts2的配置文件通常存放在src目录下的struts.xml文件中,用于配置Action类、拦截器、参数等。以下是一个简单的struts.xml文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="hello" class="com.example.action.HelloAction">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
数据转移方式
Struts2提供了多种数据传输方式,包括request参数、session参数、Action属性、属性驱动等。
request参数
request参数是通过HTTP请求发送到服务器上的一些参数,可以通过ActionContext类中的getRequest()方法来获取request实例,从而获取request中的参数值,以下是一个获取request参数的示例:
package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import javax.servlet.http.HttpServletRequest;
public class HelloAction extends ActionSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String username = request.getParameter("username");
return SUCCESS;
}
}
Action属性
Action属性是Action类中的成员变量,可以通过定义setter和getter方法对其进行访问,在jsp页面中通过EL表达式获取其值,以下是一个使用Action属性的示例:
package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute() throws Exception {
name = "world";
return SUCCESS;
}
}
在jsp页面中,可以通过${name}来获取Action属性的值。
示例
示例1:一个简单的登陆页面
下面是一个简单的登陆页面,其中用户需要输入用户名和密码才能登陆系统。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<s:form action="login">
<s:textfield name="username" label="Username"/>
<s:password name="password" label="Password"/>
<s:submit value="Login"/>
</s:form>
</body>
</html>
其中,
以下是相应的Action类中用于处理请求的代码:
package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() throws Exception {
if ("admin".equals(username) && "123456".equals(password)) {
return SUCCESS;
} else {
addActionError("Invalid username or password");
return ERROR;
}
}
}
用户输入用户名和密码后,会提交表单到/LoginAction.action,LoginAction类中的execute方法会被调用,通过判断输入的用户名和密码是否正确,如果正确则返回SUCCESS,否则返回ERROR。
在返回SUCCESS时,Struts2会按照struts.xml中配置的结果映射,跳转到登录成功后的页面;在返回ERROR时,Struts2会在jsp页面中显示addError()方法中的提示信息。
示例2:属性驱动
属性驱动是指通过setter和getter方法来访问Action类中的属性,可以通过Action类中的成员变量来存储表单参数值,在jsp页面中使用EL来获取Action类中的属性值。
以下是一个使用属性驱动的代码示例:
package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport {
private String username;
private String password;
private String email;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String execute() throws Exception {
// do something
return SUCCESS;
}
}
在jsp页面中,可以通过EL表达式来获取Action类中的属性值:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Register</title>
</head>
<body>
<h1>Register</h1>
<s:form action="register">
<s:textfield name="username" label="Username" value="%{username}"/>
<s:password name="password" label="Password" value="%{password}"/>
<s:textfield name="email" label="Email" value="%{email}"/>
<s:submit value="Register"/>
</s:form>
</body>
</html>
其中,value属性是通过EL表达式来获取当前Action类中的属性值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java的Struts2框架的结构及其数据转移方式 - Python技术站