关于Struts2
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求。
Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。
1)核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。
2)业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。
1、客户端(Client)向服务器发送一个请求(request)
2、客器(Container)通过web.xml映射请求,并获得控制器(Controller)的名字。
3、容器(Container)调用控件器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1之后调用StrutsPrepareAndExecuteFilter。
4、控制器(Controller)通过ActionMapper获得Action的信息。
5、控制器(Controller)调用ActionProxy。
6、ActionProxy读取struts.xml文件读取相应的action和interceptor stack的信息。
7、ActionProxy把request请求传递给ActionInvocation。
8、ActionInvocation依次调用action和interceptor。
9、根据action执行结果,产生result。
10、Result信息返回给ActionInvocation。
11、产生一个HttpServletResponse响应。
12、将产生的响应返回给客户端。
0.示例效果
1. 配置Structs2应用环境
开发环境:
Eclipse Oxygen.3 Release (4.7.3)
jdk-9.0.4
Tomcat 9.0
struts-2.5.14.1
需要导入的jar包:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID"
version="3.1">
<display-name>hellostruts</display-name>
<!-- 配置StrutsPrepareAndExecuteFilter核心控制器 -->
<filter>
<!-- 过滤器名 -->
<filter-name>filter</filter-name>
<!-- StrutsPrepareAndExecuteFilter核心控制器的实现类 -->
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<!-- 过滤器名 -->
<filter-name>filter</filter-name>
<!-- 过滤器过滤所有请求 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
2. 创建输入视图,接受用户输入的数据
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Hello Struts2</title>
</head>
<body>
<form action="user.action" method="post">
<p>用户名: <input type="text" name="userName"><br>
<p>地址:<input type="text" name="address"><br>
<p>电话:<input type="text" name="tel"><br>
<p>邮箱:<input type="text" name="email"><br>
<p><input type="submit" value="提交">
</body>
</html>
3. 创建业务控制器,并实现其业务处理方法execute()方法
package com.zhaoyuan.action;
import com.opensymphony.xwork2.Action;
public class UserAction implements Action {
private String userName;
private String address;
private String telephone;
private String email;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String execute() throws Exception {
if(userName.length()>6) {
return "success";
}else {
return "error";
}
}
}
4. 在struts.xml中配置业务控制器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<!-- 定义一个名为user的Action,实现类为com.zhaoyuan.action.UserAction -->
<action name="user" class="com.zhaoyuan.action.UserAction">
<!-- 配置execute()方法返回值与视图资源 之间的映射关系-->
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
5. 创建结果视图,显示结果数据
success.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>success</title>
</head>
<body>
用户名:${param.userName }<br>
地址:${param.address }<br>
电话:${param.tel }<br>
邮箱:${param.email }<br>
</body>
</html>
error.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>error</title>
</head>
<body>
出错
</body>
</html>
6. 运行web应用,显示结果页面
参考链接: