界面传值取值在编写web项目的时候总是避免不了的。最近在看Struts2基础视频,敲代码敲多了,应该补充一下基础知识了。
取值赋值的两种方式
1.采用ModelDriven
举例:
(1)首先创建User实体
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;
}
}
(2)Action实现ModelDriven接口,实现getModel()方法,返回Bean对象
/**
* 功能: 用ModelDriven方法收集数据
* 作者: 宋笑
* 日期: 2016-1-12 下午12:47:56
*
*/
public class LoginAction implements Action, ModelDriven<User> {
private User user = new User();
public String execute() throws Exception {
//Action中取值
if ("admin".equals(user.getUsername()) && "admin".equals(user.getPassword())) {
return SUCCESS;
}else {
return ERROR;
}
}
// 实现getModel()方法,返回User对象
public User getModel() {
return user;
}
}
界面取值
<body>
<form action="login.action">
用户:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
2.直接对Action中的对象赋值
(1)首先创建User实体(与上述一样)
(2)直接定义User对象,创建getset方法
/**
* 功能: 直接对Action中的对象赋值
* 作者: 宋笑
* 日期: 2016-1-12 下午12:47:56
*
*/
public class LoginAction implements Action {
//定义User实体对象
private User user;
public String execute() throws Exception {
//取值
if ("admin".equals(user.getUsername()) && "admin".equals(user.getPassword())) {
return SUCCESS;
}else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
在html中可以采用如下方式命名输入域
<form action="login.action">
用户:<input type="text" name="user.username"><br>
密码:<input type="password" name="user.password"><br>
<input type="submit" value="登录">
</form>
Struts2的Action访问Servlet API三种方式
1.可以通过ActionContext访问Servlet API,获取或存入数据。此种方式没有侵入性
//将登录信息设置到session中
ActionContext.getContext().getSession().put("user", username);
//采用如下方式访问request对象
ActionContext.getContext().put("user", username);
//采用如下方式访问application对象
ActionContext.getContext().getApplication().put("user", username);
//通过request.getParameter()取得数据
String username = (String)ActionContext.getContext().getParameters().get("username");
2.可以通过实现装配接口没,完成对Servlet API的访问
* ServletRequestAware取得HttpServletRequest对象
* ServletResponseAware取得HttpServletResponse对象
* ServletContextAware取得ServletContext对象(工具类)
举例:
/**
* 功能: 实现 ServletRequestAware,ServletResponseAware接口,访问ServletAPI
* 作者: 宋笑
* 日期: 2016-1-12 下午01:02:48
*
*/
public class LoginAction implements Action, ServletRequestAware, ServletResponseAware {
private String username;
private String password;
//定义request,response对象
private HttpServletRequest request;
private HttpServletResponse response;
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) && "admin".equals(password)) {
//将信息设置到session中
request.getSession().setAttribute("user", username);
//采用如下方式访问request对象赋值
request.setAttribute("user", username);
//通过request.getParameter()取得数据
request.getParameter("username");
return SUCCESS;
}else {
return ERROR;
}
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
}
3.可以通过ServletActionContext提供的静态方法取得ServletAPI
*getPageContext();
*getRequest();
*getResponse();
*getServletContext();
//session赋值
ServletActionContext.getRequest().getSession().setAttribute("user", username);
//赋值
ServletActionContext.getPageContext().setAttribute("user", username);
//赋值
ServletActionContext.getServletContext().setAttribute("user", username);
//获取数据
ServletActionContext.getRequest().getParameter("username");
第一种没有侵入性,剩下的两种有侵入性,但是一般会用第三种比较简单。因为一般Action不复用和测试,所以侵入也没有事儿。
无论做什么事儿,实现的方法总会有很多种,所以我们应该了解所有的方法,选择最合适的一种做法