1.struts2 框架是对控制器优化的一
个框架
Struts 2 是一个 MVC 框架,以 WebWork 设计思想为核心,吸收了 Struts
1 的部分优点
在项目中添加框架,要到官网 http://struts.apache.org/development/2.x/
下载最新发布的版本。其中的目录文件如下
apps:该文件夹下包含了 struts2 的示例应用,这些示例应用对于学习者是很
有用的资料。
docs:该文件夹包含了 struts2 的相关文档,包括 struts2 的快速入门,
struts2 文档,以及 API 文档。
lib:包含了 struts2 框架的核心类库,以及 struts2 的第三方插件类库
src:该文件夹下包含了 struts2 框架的全部源代码。
2.核心必备 jar 包
3.struts2 框架添加的步骤
3.1 首先导入 jar 包
3.2 生成 struts.xml 配置文件
3.3 在 web.xml 文件中注册 struts2 框架,使用 filter 过滤器注册。
4.完成数据提交的三种方式
4.1 域模型数据提交方式(散数据提交)
在 action 中要有与表单元素相同名称的变量,一定要有该变量的 set() get()
方法,struts2 使用 set()get()方法去操作这些变量。在请求到达时,框架负
责接收数据并负责类型转换,程序员不用使用 request.getParameter("…")去
取数据。
index.jsp 页面
1.域模型数据提交
DemoAction 类中
public class DemoAction extends ActionSupport {
private String uname;
private String pwd;
public static final Double PI=3.1415926;
@Override
public String execute() throws Exception {
//1 不用设置编码
//2 接收数据 (自动吸入)
System.out.println(uname+"--"+pwd);
//3
//4
return "zar";
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
struts.xml 配置文件中
main.jsp
4.2 对象封装数据提交
实体类中必须要有成员变量的 set()get()方法。在 action 中的成员变量不
用 new 对象。但一定要有 set()get()方法。struts2 框架在注入值的时候会
new 对象。在页面上表单中元素的 name 属性要使用对象.属性的方式命
名。
index.jsp 页面
2.对象封装数据提交
User 类
public class User {
private String name;
private int age;
private Date date;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
UserAction 类
public class UserAction extends ActionSupport {
private User u;
@Override
public String execute() throws Exception {
System.out.println(u.getAge()+"---"+u.getName()+"---"+u.getDate());
return super.execute();
}
public User getU() {
return u;
}
public void setU(User u) {
this.u = u;
}
}
struts.xml 文件
main.jsp
4.3 ModelDriven(模型驱动)方式提交数据
注意:在实现 ModelDriven
接口的时候指定接收数据的对象的类型,在类
中要手工 new 出该对象,在页面上直接使用对象的属性名称作为表单元素
的 name 属性。
index.jsp
3.ModelDriven 数据提交
public Map session;
public Map request;
public Map application;
private String uname;
private String pwd;
@Override
public String execute() throws Exception {
session.put("uname", uname);
request.put("user", uname + "--" + pwd);
return super.execute();
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public void setRequest(Map request) {
this.request = request;
}
@Override
public void setSession(Map session) {
this.session = session;
}
@Override
public void setApplication(Map application) {
this.application = application;//接收框架做好的全局对象 application
}
}
6. 与 Servlet API 紧耦合的访问方式
要获得原生的 ServletAPI 的对象,用来除了做数据封装转发外,还有其它的
需求,例如取出端口,取出地址….
public class HttpRequestSessionApplicationAction extends ActionSupport {
private String uname;
public HttpServletRequest request;
public HttpServletResponse response;
public HttpSession session;
public ServletContext application;
public HttpRequestSessionApplicationAction(){
request=ServletActionContext.getRequest();
session=request.getSession();
application=session.getServletContext();
response=ServletActionContext.getResponse();
}
@Override
public String execute() throws Exception {
request.setAttribute("unamer",uname+"requst");
session.setAttribute("unames",uname+"session");
application.setAttribute("unamea",uname+"application");
return super.execute();
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
}