struts2 工作原理:
一个请求在Struts 2框架中的处理大概分为三个步骤
第一:客户端提交一个(HttpServletRequest)请求
如在浏览器里面输入 http://localhost:8080/reg.jsp就是提交给一个
(HttpServletRequest)请求
请求被提交到一系列的过滤器里面(Filter),如(ActionContextCleanUp,其他过滤器,
FilterDispather)。注意这是有先后顺序的。
FilterDispather是控制器的核心,就是MVC的Struts
第二 :实现中控制器的核心。
FilterDispatcher 询问ActionMapper是否需要调用某个Action来处理HttpServletRequest请求
,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交给ActionProxy。
ActionProxy通过Configuration Manager(struts.xml)询问配置文件,找到需要调用的Action
类。比如注册 UserReg 类。
第三: ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action,
在调用之前,ActionInvocation会根据配置加载Action相关的所有拦截器(Interceptor)
,一旦Action调用完毕,ActionInvocation负责根据struts.xml中的配置找到相应的result视图,返回结
果。
struts 2 的核心控制器是FilterDispatcher,有三个重要的方法:destroy(),doFilter(),init();
-----小技巧----打开记事本 CMD--notep
------reg.jsp-----------------------------------------------------------------------------------------------------------------
<body>
<form action="user.action" method="post">
<input type="text" name="username"/><br/>
<input type="text" name="password"/><br/>
<input type="submit" name="save"/>
</form>
</body>
------success.jsp----------------------------------------------------------------------------------------------------------
<body>
username= ${username};
password= ${password};
</body>
------com.panhe.cn.HelloWorldAction---------------------------------------------------------------------------------
package com.panhe.cn;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWordAction extends ActionSupport{
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
System.out.println(username);
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
System.out.println(password);
this.password = password;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
------struts.xml------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<!--struts2 总共有四类配置文件
struts.properties : 定义框架自身的全局变量
strurs.default.xml: 定义框架自身的使用的action映射以及result定义
struts-plugin.xml : struts插件使用的配置文件,比如当使用strtus和spring结合的时候就需要
在 web.xml 中引用该配置文件。
strtus.xml 定义应用自身使用的action映射以及result定义;当我们一般将应用的各个模块分到不同的配置文件里面 :
struts.properies定义的全局属性也可以在strtus.xml文件中定义
-->
<!-- 四个配置文件的执行顺序
strurs.default.xml struts-plugin.xml strtus.xml struts.properties web.xml
-->
<struts>
<!--必须是.action结尾的才能被Struts2框架管理 -->
<!--动态方法的调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<!--设置开发模式 -->
<constant name="struts.devMode" value="false" />
<!--
name 表示模版名称 namespace 表示空间名称,URL后面要自带的 extends
struts是必须继承这个文件,因为里面会有很多定义的拦截器的
-->
<package name="user" namespace="/" extends="struts-default">
<!--name 的名字 class是我要关联的类
method 最默认值execute方法
result 默认值是success试图
-->
<action name="user" class="com.panhe.cn.HelloWordAction"
method="execute">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
------web.xml------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--配置文件 Strtus2.0过滤器-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
-----------------------------------------------------------------------------------------------------------------------