Struts2中接收表单数据的三种驱动方式包括属性驱动、模型驱动和域驱动。下面我将详细讲解这三种方式的使用方法。
一、属性驱动
属性驱动是指表单数据通过setter方法注入到Action中对应的属性中,可通过以下步骤实现。
1.在Action中定义相应的属性以及对应的setter方法。
例如,在一个登录的Action中,我们需要接收用户名和密码,则可以定义如下两个属性:
public class LoginAction extends ActionSupport {
private String username;
private String password;
//getter方法和setter方法
}
2.在表单中通过name属性将数据与Action中的属性进行映射。
例如,在登录页面中,我们可以这样写表单:
<form action="login" method="post">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="登录">
</form>
3.在Action中定义一个处理表单提交的方法。
例如,在我们的登录Action中,我们可以这样写处理表单提交的方法:
public String execute() {
if ("admin".equals(username) && "123456".equals(password)) {
return SUCCESS;
} else {
return ERROR;
}
}
二、模型驱动
模型驱动是指表单数据注入到一个POJO实体中,再将该实体作为Action的属性,可通过以下步骤实现。
1.定义一个POJO类,用于保存表单数据。
例如,在一个用户注册的Action中,我们需要接收用户的账号、密码和邮箱,则可以定义如下一个User类:
public class User {
private String username;
private String password;
private String email;
//getter方法和setter方法
}
2.Action中定义一个POJO类的属性以及对应的setter方法。
例如,在我们的用户注册Action中,我们可以这样定义User属性:
public class RegistAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
//getter方法和setter方法
}
3.在表单中通过name属性将数据与Action中的POJO类属性进行映射。
例如,在注册页面中,我们可以这样写表单:
<form action="regist" method="post">
用户名:<input type="text" name="user.username"><br/>
密码:<input type="password" name="user.password"><br/>
邮箱:<input type="text" name="user.email"><br/>
<input type="submit" value="注册">
</form>
4.在Action中实现ModelDriven接口,并重写该接口的getModel()方法,将POJO对象返回即可。
例如,在我们的用户注册Action中,我们可以这样实现ModelDriven接口:
public User getModel() {
return user;
}
5.在Action中定义一个处理表单提交的方法。
例如,在我们的用户注册Action中,我们可以这样写处理表单提交的方法:
public String execute() {
//执行注册操作
return SUCCESS;
}
三、域驱动
域驱动是指表单数据通过HttpServletRequest对象,可通过以下步骤实现。
1.在Action中首先定义一个HttpServletRequest对象以及对应的setter方法。
例如,在我们的文件上传Action中,我们可以这样定义HttpServletRequest属性:
public class UploadAction extends ActionSupport {
private HttpServletRequest request;
//getter方法和setter方法
}
2.在表单中通过enctype属性将form表单的编码类型设置成multipart/form-data,以便文件上传。
例如,在文件上传页面中,我们可以这样写表单:
<form action="upload" method="post" enctype="multipart/form-data">
请选择需要上传的文件:<input type="file" name="file"><br/>
<input type="submit" value="上传">
</form>
3.在Action中的处理表单提交的方法中通过HttpServletRequest对象获取表单数据。
例如,在我们的文件上传Action中,我们可以这样写处理表单提交的方法:
public String execute() {
try {
String savePath = request.getSession().getServletContext().getRealPath("/upload/");
File file = new File(savePath);
if (!file.exists()) {
file.mkdir();
}
InputStream inputStream = new FileInputStream(upload);
OutputStream outputStream = new FileOutputStream(savePath + "\\" + uploadFileName);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
inputStream.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
以上就是Struts2中接收表单数据的三种驱动方式的详细讲解。
示例一,属性驱动方式:
// Action
public class LoginAction extends ActionSupport {
private String username;
private String password;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String execute() throws Exception {
if ("admin".equals(username) && "123456".equals(password)) {
return SUCCESS;
} else {
return ERROR;
}
}
}
// JSP
<form action="login.action" method="post">
<label>username:</label>
<input type="text" name="username"/><br/>
<label>password:</label>
<input type="password" name="password"/><br/><br/>
<input type="submit" value="login"/>
</form>
示例二,模型驱动方式:
// POJO类,如下定义:
public class User {
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;
}
}
// Action
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
public void setUser(User user) {
this.user = user;
}
// 获得模型驱动,该方法在ModelDriven接口中定义
@Override
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
System.out.println(user.getUsername() + ',' + user.getPassword());
return SUCCESS;
}
}
// JSP
<form action="user_submit.action" method="post">
<label>username:</label>
<input type="text" name="user.username"/><br/>
<label>password:</label>
<input type="password" name="user.password"/><br/><br/>
<input type="submit" value="Add User"/>
</form>
以上示例仅供参考,仅是三种驱动方式的简单示例,实际使用可以根据具体业务需求进行更改和拓展。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2中接收表单数据的三种驱动方式 - Python技术站