一 接受请求参数主要有三种:属性驱动
对象驱动
模型驱动<model Driven>
方式1:在Action中接收请求参数不需要使用request对象,在Action中定义与请求参数相同名称的属性,定义setter和getter方法,struts2框架会自动将请求参数解析出来并为Action属性赋值。访问:/hello.action?name=abc&pass=123
方式2:也可以将所有请求参数封装到javabean中
访问:/hello.action?user.name=abc&user.pass=123
public class HelloAction {
private User user;
public void setUser(User user) {…}
public User getUser() {…}
public String execute() throws Exception{
System.out.println("用户名:" + user.getName() + "密码:" + user.getPassword());
return null;
}
这个对象不需要new对象,strtus2会帮你去new
方式三。模型驱动 实现分三步走:
1.实现ModelDriven接口
2.实现getModel()方法
3.new 出实体对象进行实列化
public class Demo6Action extends ActionSupport implements ModelDriven<User>{
private User user=new User();
@Override
public String execute() throws Exception {
System.out.println("用户对象的信息:"+user);
return "success";
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return this.user;
}
}
补充:全局结果:
全局结果
实现同一个包中多个action共享一个结果
<struts>
<default-action-ref name="defaultAction"/ >
<package name="default" extends="struts-default">
<global-results>
<result name="error">/page/error.jsp</result>
<result name="login" type="redirect">/page/login.jsp</result>
</global-results>
…省略action的配置…
</package>
</struts>
二.编码问题
struts默认配置文件上默认的国际化编码为UTF-8(不建议修改),每次客户端请求后,struts都会用其设定request的默认编码,相当于如下代码。
request.setCharacterEncoding("utf-8")
如果jsp上的charset=utf-8,则用doPost请求传输的数据不会乱码。
用doGet请求传输的数据,需要手动解码:
第一种方式:
//获取ISO8859-1编码
Byte [] bs=this.name.getBytes("ISO8859-1");
//重组装UTF-8
String str = new String(bs,"utf-8");
第二种方式:
修改tomcat(servers文件夹server.xml) URIEncoding="UTF-8
总结:Action的作用
封装工作单元
转移数据
返回结果逻辑名
struts.xml文件是Struts 2的核心配置文件
Result的结果类型
dispatcher类型(默认)
redirect类型
redirectAction类型
中文乱码处理