目录:
MVC模式:
struts2 是基于MVC模式的web层的开发框架,是对servlet技术的封装。
M: Model模型。使用javabean技术, 对业务数据的封装。
V: View视图。 使用jsp技术,对业务数据的显示。
C: Control控制器。使用servlet技术, 1)接收请求, 获取用户参数; 2)调用业务逻辑处理方法; 3)获取结果,把结果显示到视图中。
——》优化MVC的web层代码, 一个项目对应一个servlet类
struts2的文件夹结构
- apps文件夹:存放官方提供的示例程序。
- docs文件夹:存放官方文档。
- lib文件夹: 核心类库,以及第三方插件。
- src文件夹:对于源码。
struts2使用步骤
- 导入struts的支持jar包
- 配置启动的全局过滤器(filter)-----web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>structs_2018</display-name> <!-- 配置structs2的全局过滤器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</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>
- 编写一个action类,实现业务方法。
package action; import com.opensymphony.xwork2.ActionSupport; public class HelloAction extends ActionSupport{ @Override public String execute() throws Exception { // TODO Auto-generated method stub return SUCCESS; } }
- 新建一个struts.xml(在src根目录下),配置Action对象
<?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"> <action name="hello" class="action.HelloAction"> <result name="success" type="redirect">/success.jsp</result> </action> </package> <!-- 感叹号可以使用 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> </struts>
- 访问Action业务:
http://localhost:8080/项目名/hello.action
struts2系统架构及执行流程
系统架构:
- 当web容器收到一个请求时,他将请求传递给一个标准过滤器链,其中包括ActionContextCleanUp及其他过滤器。
- 接下来需要调用FilterDispatcher,它将调用ActionMapper来确定调用哪个action,ActionMapper返回一个收集了Action详细信息的ActionMapper对象。
- 接下来,FilterDispatcher将控制权委派给ActionProxy, ActionProxy调用配置管理器从配置文件中读取配置信息,然后创建ActionInvocation对象。实际上,ActionInvocation的处理过程就是Struts2处理请求的过程。ActionInvocation被创建的同时,填充了所需要的所有对象和信息,他在调用action对象之前会依次调用所有拦截器。
- 一旦action返回结果字符串,ActionInvocation负责查找结果字符串对于的Result,然后执行这个Result(一般为jsp来呈现页面)。
- 之后拦截器会再次执行(与之前action执行之前的顺序相反),最后响应被返回给在web.xml中配置的那些过滤器。
- 其中FilterDispatcher:struts2的前端控制器,是struts2的调度中心,只需在web.xml配置依次即可。
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <!-- 过滤所有请求 --> <url-pattern>/*</url-pattern> </filter-mapping>
运行流程:
项目启动:
- 创建核心过滤器, strutsPrepareAndExecuteFilter对象
- 执行核心过滤器的init方法:
依次读取以下信息:
struts-default.xml
struts-plugin.xml
struts.xml
访问资源:
- 在内存中查询相应的Action配置,得到class内容,创建Action对象
- 读取Action配置的method内容,执行Action对象的对应方法。
struts2.xml配置
- 电脑无网络时,编程过程中显示注释,配置过程如下:
首先找到struts2压缩文件中的struts-2.5.dtd文件(可复制到其他地方),按下图add添加 。
key=-//Apache Software Foundation//DTD Struts Configuration 2.5//EN,
keyType=public ID
location = dtd复制的地址,之后重启MyEclipse.
- 有网络的时候:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">