Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的与Struts 1的体系结构差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
体系结构
应用流程注解
当 收到请求(HttpServletRequest)它将请求传递给一个标准的的过滤链包括(ActionContextCleanUp)过滤器。
经过Other filters(SiteMesh ,etc),需要调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求哪个Action,
ActionMapper返回一个收集Action详细信息的ActionMaping对象。
FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager) 从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation对象。
ActionInvocation在调用Action之前会依次的调用所用配置拦截器(Interceptor N)一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result)
然后执行这个Result Result会调用一些模版(JSP)来呈现页面。
拦截器(Interceptor N)会再被执行(顺序和Action执行之前相反)最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和核心控制器(FilterDispatcher)。
Struts 2资源包的目录结构
apps:官方提供的Struts 2应用实例
docs:官方提供的Struts 2文档
lib:Struts 2 发行包及其依赖包
src:Struts 2对应的源代码
Action接口中常量字符串的逻辑含义
SUCCESS 表示程序处理正常,并返回给用户成功后的结果
NONE 表示处理正常结束,但不返回给用户任何东西
ERROR 表示处理结果失败
INPUT 表示需要更多用户输入才能顺利执行
LOGIN 表示需要用户正确登录后才能顺利执行
需要的依赖
javaee javaee-api 5 org.apache.struts struts2-core 2.3.4.1 org.apache.struts.xwork xwork-core 2.3.4.1
配置Struts2
在web.xml中
struts2_helloworld struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* index.jsp
创建控制类HelloWorld
import com.opensymphony.xwork2.Action; public class HelloWorld implements Action { @Override public String execute() throws Exception { return SUCCESS; } }
创建index.jsp
<%@ taglib prefix="s" uri="/struts-tags" %><%-- Created by IntelliJ IDEA. User: Date: 2018/11/15 Time: 9:26 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %>Title ====
配置struts.xml
/hh.jsp
效果图
实现通配符
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="struts06" namespace="/" extends="struts-default"> <action name="*_*" class="day06.{1}" method="{2}"> <result name="{2}">/{1}/{2}.jsp</result> </action> </package> </struts>
public class PatternAction extends ActionSupport{
public String list(){ ((Map<String,Object>)ActionContext.getContext().get("request")).put("msg","Result类型"); return "list"; } public String add(){ return SUCCESS; }}list.jspTitle list
效果