一:通过Action属性获取参数
Action类可以通过定义成员变量,并提供相应的setter,getter,和提交参数的名称一致,并不用做数据类型的转换。从界面获取参数,相应提交方式可以用get 和post,如:testAction? name=admin。
具体代码如下:
jsp
<form action="./User_check.do">
用户名:<input type="text" name="useName"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="提交">
</form>
struts.xml
<package name="user" namespace="/" extends="struts-default">
<!-- 解决struts2.5 通配符调用无效的问题 -->
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="*_*" class="com.lhb.StrutsText.{1}" method="{2}">
<result name="success">/success.jsp</result>
</action>
</package>
java
public class User extends ActionSupport {
private static Logger log = Logger.getLogger(User.class);
private String useName;
private String password;
public String getUseName() {
return useName;
}
public void setUseName(String useName) {
this.useName = useName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String check() {
log.debug("useName :"+useName+"password :"+password);
return "success";
}
}
访问执行如下路径:http://localhost:8080/StrutsText/user_login.jsp并提交数据
控制台
测试获取参数成功
二:使用DomainModel获取参数
上述方法在Action里面会有许多参数和方法,这样会显得Action很混乱。获取参数也可以借助Model 层的模型,在Action只用保存它的一个对象,并设置对象的get和set方法。相应提交方式可以用get 和post。
java action修改为:
private static Logger log = Logger.getLogger(User.class);
private UserBean user;public UserBean getUser() {return user;}public void setUser(UserBean user) {this.user = user;}public String check() {log.debug("useName :" + user.getUseName() + " password :" + user.getPassword());return "success";} entity:// 错误的写法,不能自己实例化,struts会自动实例化private Users users = new Users();
private String useName;
private String password;
public UserBean(String useName, String password) {
this.useName = useName;
this.password = password;
}
public UserBean() {
}
public String getUseName() {
return useName;
}
public void setUseName(String useName) {
this.useName = useName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserBean [useName=" + useName + ", password=" + password + "]";
}
jsp修改为:
<form action="./User_check.do">
用户名:<input type="text" name="user.useName"><br/>
密码:<input type="password" name="user.password"><br/>
<input type="submit" value="提交">
</form>
jsp需要注意,name属性的值为对象.属性。
访问执行如下路径:http://localhost:8080/StrutsText/user_login.jsp并提交数据
控制台
测试获取参数成功
三:使用ModelDriven获取参数
上述两个事例都能重jsp页面获取数据,不过在struts有一个ModelDriven 接口,只需在创建Action 的时候去实现ModelDriven 接口,在调用接口的getModel()方法,取到了相关model对象。
java action修改为:
private static Logger log = Logger.getLogger(User.class);
private UserBean user = new UserBean();// 手动实例化
@Override
public UserBean getModel() {
// TODO Auto-generated method stub
return user;
}
public String check() {
log.debug("useName :" + user.getUseName() + " password :" + user.getPassword());
return "success";
}
jsp修改为:
<form action="./User_check.do">
用户名:<input type="text" name="useName"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="提交">
</form>
访问执行如下路径:http://localhost:8080/StrutsText/user_login.jsp并提交数据
控制台
测试获取参数成功
4:request获取参数
上述三种方式均能从JSP获取数据,不过当有特殊需求时,万不得已的情况下,也可以用requst获取参数,不过这样的方式并不推荐,在action中获取requst和response的代码为:
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
其他操作参照Servlet中requst和response的操作,可以获取参数,转发,重定向,设置对象等。