Struts 翻译:支柱
Struts 是流行和成熟的基于 MVC 设计模式的 Web 应用程序框架
POJO(Plain Ordinary Java Object)简单的 Java 对象
MVC 模式
模型视图控制器
Model View Controller
工作原理图
环境
二、Struts2 项目项目结构
.
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── mouday
│ │ └── HelloWorldAction.java
│ ├── resources
│ │ └── struts.xml
│ └── webapp
│ ├── WEB-INF
│ │ └── web.xml
│ ├── hello.jsp
│ └── index.html
└── test
└── java
1、配置文件
(1)pom.xml
4.0.0
org.example
java-demo-struts
1.0-SNAPSHOT
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
8080
/
UTF-8
true
src/main/webapp/WEB-INF/web.xml
true
org.apache.struts
struts2-core
2.5.22
javax.servlet
javax.servlet-api
4.0.1
provided
(2)src/main/webapp/WEB-INF/web.xml
Hello
struts2
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
struts2
/*
index.html
(3)src/main/resources/struts.xml
/hello.jsp
2、Action
src/main/java/com/mouday/HelloWorldAction.java
package com.mouday;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println("hello action");
return SUCCESS;
}
}
3、视图文件
src/main/webapp/index.html
hi
src/main/webapp/hello.jsp
hello action jsp
4、访问测试
GET http://localhost:8080/
hi
GET http://localhost:8080/HelloWorldAction
hello action jsp
三、核心文件
web.xml
struts.xml
struts.properties 全局属性文件,自动加载
struts.properties 常用配置
# struts.xml改动后重新加载重载 默认 false
struts.configuration.xml.reload=true
# 打开开发模式 默认 false
struts.devMode=true
# 设置浏览器缓存静态页面 默认true
struts.serve.static.browserCache=false
# 被struts处理的请求后缀
struts.action.extension=action,do
# 服务器运行时端口号
struts.url.http.port=8080
四、深入 Struts2
1、访问 Servlet API 方式
- ActionContext
- 实现 Aware 接口
- ServletActionContext
2、Action 搜索顺序 逐级向上查找
3、动态方法调用 (1)指定 method 属性
package com.mouday;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println("hello action");
return SUCCESS;
}
public String add(){
System.out.println("add");
return SUCCESS;
}
}
struts.xml(简化)
/add.jsp
访问结果
GET http://localhost:8080/add.action
add result
(2)感叹号方式(不推荐)
参考 struts2.5 使用感叹号和通配符实现动态方法调用无效的问题及解决!
配置文件
regex:.*
/hello.jsp
/add.jsp
GET http://localhost:8080/HelloWorldAction!add.action
add result
(3) 通配符方式
regex:.*
/{2}.jsp
GET http://localhost:8080/HelloWorldAction_add.action
add result
4、指定多个配置文件
配置示例
struts.xml
hello.xml
regex:.*
/{2}.jsp
访问
GET http://localhost:8080/HelloWorld_add.action
add result
5、默认 Action
/error.jsp
访问
GET http://localhost:8080/xxxx.action
error jsp
6、Struts2 后缀 (1)struts.xml
(2)struts.properties
struts.action.extension=action,do
(3)web.xml
struts2
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
struts.action.extension
do
7、接收参数
(1)Action 属性
Action 类
package com.mouday;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String execute() throws Exception {
System.out.println(username);
return SUCCESS;
}
}
路由配置
/login.html
表单页面
(2)Domain Model
新建 User 类
package com.mouday.bean;
public class User {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
Action
package com.mouday.action;
import com.mouday.bean.User;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.println(user.getUsername());
return SUCCESS;
}
}
登录表单
(3)ModelDriven
Action
package com.mouday.action;
import com.mouday.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction extends ActionSupport implements ModelDriven {
private User user = new User();
@Override
public String execute() throws Exception {
System.out.println(user.getUsername());
return SUCCESS;
}
public User getModel() {
return user;
}
}
表单
(4)接收列表类型
User 类
package com.mouday.bean;
import java.util.List;
public class User {
private String username;
private List list;
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
Action
package com.mouday.action;
import com.mouday.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction extends ActionSupport implements ModelDriven {
private User user = new User();
@Override
public String execute() throws Exception {
System.out.println(user.getUsername());
System.out.println(user.getList());
return SUCCESS;
}
public User getModel() {
return user;
}
}
表单
8、处理结果类型 Struts2 处理流程
用户请求
-> Stuts框架
-> 控制器Action
-> Stuts框架
-> 视图资源
result 如果省略 name,则默认是 success
/success.jsp
/success.jsp
处理结果类型:
- SUCCESS 正确执行,默认视图
- NONE 正确执行,不返回视图
- ERROR 执行失败
- LOGIN 登录视图
- INPUT 参数输入界面
Action
package com.mouday.action;
import com.mouday.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction extends ActionSupport implements ModelDriven {
private User user = new User();
@Override
public String execute() throws Exception {
System.out.println(user.getUsername());
System.out.println(user.getList());
return SUCCESS;
}
@Override
public void validate() {
if (user.getUsername() == null || "".equals(user.getUsername())
) {
addFieldError("username", "用户名不能为空");
}
}
public User getModel() {
return user;
}
}
配置
/login.jsp
/login.jsp
登录框
9、局部结果和全局结果 OGNL
resource