Struts2
Struts2是一个开发web程序的MVC框架。例如SpringMVC、Struts1、WebWork等框架。
Struts2的MVC结构
- M模型:ValueStack、Interceptor
- V视图:Result(dispatcher、redirect、json)
- C控制器: StrutsPrepareAndExecuteFilter、Action
- 首先HTTP请求进入主控制器StrutsPrepareAndExecuteFilter
- 主控制器接收到请求后,根据请求分发给不同的Action进行处理
- Action组件可以调用Model处理具体业务,返回一个String结果
- 主控制器根据Action返回的String结果调用Result组件
- Result生成响应结果输出
Struts2 Hello Struts2 案例
- 创建web工程,引入struts2开发包
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.8</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.8</version>
</dependency>
</dependencies>
- 在web.xml配置Filter控制器
<filter>
<filter-name>
strutsmvc
</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>
strutsmvc
</filter-name>
<url-pattern>
/*
</url-pattern>
</filter-mapping>
- 编写HelloAction
//继承一个struts-default的package定义,可以使用内部定义的result、interceptor等
@ParentPackage("struts-default")
public class HelloAction {
@Action(value="/hello",results= {
@Result(name="success",type="dispatcher",location="/hello.jsp")
})
public String hello() {
System.out.println("--执行了hello处理--");
return "success";//对应result定义
}
}
- 编写hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello Struts2</h1>
</body>
</html>
Action属性可以往JSP传值
@ParentPackage("struts-default")
public class HelloAction {
private String name;
//提供get() set()方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Action(value="/hello",results= {
@Result(name="success",type="dispatcher",location="/hello.jsp")
})
public String hello() {
System.out.println("--执行了hello处理--");
name = "xiaohei";
return "success";//对应result定义
}
}
JSP通过EL表达式获取
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello ${name}</h1>
</body>
</html>
Struts2 返回JSON 案例
- 创建web工程,引入struts2开发包
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.8</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.8</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.5.8</version>
</dependency>
- 在web.xml配置StrutsPrepareAndExecuteFilter(同上个案例)
- 编写JsonAction
@ParentPackage("json-default")
//json-default继承struts-default 新增JSON
public class JsonAction {
private String name;
private String password;
@Action(value = "/hello1", results = {
@Result(name = "success",type = "json")
})
public String say(){
System.out.println("正在执行hello1");
name = "xiaohua";
password = "123";
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Struts登录功能
- 创建web工程,引入struts2-core、struts2-convention-plugin
- 在web.xml配置StrutsPrepareAndExecuteFilter
- 编写LoginAction
@ParentPackage("struts-default")
public class LoginAction {
private String username;//自动接收key=username的值
private String password;//自动接收key=password的值
@Action(value = "/login",results = {
@Result(name="success",type = "dispatcher",location = "/index.jsp"),
@Result(name = "fail",type = "dispatcher",location = "/login.jsp")
})
public String toLogin(){
if("xiaohua".equals(username) && "123".equals(password)){
return "success";
} else {
return "fail";
}
}
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;
}
}
- 准备login.jsp 、indes.jsp