action.class中:
public class action {
    public String say(){
        System.out.println("fdsafdsa");
        return "success";
    }
}
struts.xml中
<struts>
    <!--开启开发模式-->
    <constant name="struts.devMode" value="true"></constant>
    <package name="p1" extends="struts-default">
        <action name="say" class="test.action" method="say">
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>

web.xml中

    <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>
    

Struts执行过程简易版:

ie:say.action->tomcat
tomcat->StrutsPrepareAndExecuteFilter->解析uri得到action元素->在struts.xml中vkdkresult()

用户创建的:struts,action,template

default.properties 该文件在core包中 struts2.core
struts-default.xml 该文件在core包中 struts2.core
struts-plugin 某个jar包中
struts.xml web应用默认配置文件
struts.properties struts默认配置文件
web.xml 应用配置文件

代理:我调目标类的方法,先经过代理,再经过被代理对象

<package> 作用:方便模块化开发
<struts>
    <constant name="struts.devMode" value="true"></constant>
    <package name="p1" extends="struts-default">
        <action name="say" class="test.action" method="say">
            <result name="success">/success.jsp</result>
        </action>
    </package>
    <package name="order"></package>
</struts>

name:唯一,必须.
extends: 一般都需要.直接或间接继承一个struts-default的包名
可以继承以上的包如 extends="p1"
abstract="ture" 说明这是个抽象包,让别人继承,此时没有什么action子元素
namespace:名称空间,一般以"/"开头,和动作名称一起,构成访问路径

action详解

编写动作类方法:继承ActionSupport
<action name="*_*" class="...." method={1,2}>
    <result name="success">/{1}{2}.jsp</result>
</action>

获取request,response

1.      
        System.out.println(ServletActionContext.getRequest());;
        System.out.println(ServletActionContext.getResponse());;
        System.out.println(ServletActionContext.getServletContext());;

2.  HttpServletRequest request;
    HttpServletResponse response;

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    @Override
    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }

return :配置一个结果视图

        <action name="save"  class="test.Demo3Action" method="save">
            <result name="success" type="redirect">/jsps/success.jsp</result>
            <result name="error">/jsps/error.jsp</result>
        </action>
name:逻辑视图名称,对应动作方法的返回值
可以不写,默认success
type:指定结果类型,默认dispatcher,就是转发
其他类型:
chain: 转发到另一个动作
如:            <result name="success" type="chain">action1</result>
redirectAction:重定向到另一个action
velocity: 
tream:下载使用
plainText:以纯文本的展示
dispathcer: 
freemarker:
httpheader:
redirect:

chain的另一种写法

(EJB重量级持久层,天然分布式,负载均衡) 但是不够灵活,不能充分适应业务 多条件查询 如果使用EntityBean,做查询时,一个查询的条件就得写一个sql,就用了一个SessionBean,新增修改删除给EntityBean,多条件查询交给session. Hibernate 开发快,无sql语句,面向对象, Hibernate 与 mybatis区别 Hibernate,java面向对象盛行期.将设计过程全部面向对象开发.ORM. ibatis:维持原有编程方式,前面面向对象,后面持久层使用sql Hibernate通过反射,性能很低 Hibernate底层使用sql,就hql转sql无法优化