struts2
1.Struts2 是一个基于MVC的设计模式,的WEB应用层的框架啊,本质上就是一个Servlet
2.在MVC的设置模式中,Struts2处于控制层,来进行建立模型与视图的数据交互,
3.Struts2以WEBWork来为核心作为基础,进行运行的
创建工程加载对应的jar包
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.2.jar
freemarker-2.3.22.jar
javassist-3.11.0.GA.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
ognl-3.0.6.jar
struts2-core-2.3.24.jar
xwork-core-2.3.24.jar
在SRC目录创建 .xml文件
导入 dtd文件头

<struts> </struts> 创建一个请求的Action(相当于Servlet) public class Test_Action_01 { //此方法名称是固定的 public String execute(){ System.out.println("我执行了入门的方法"); //返回请求的地址 return "success"; //页面的名称,没有后缀名称
        }

进行配置Struts的xml文件
<package extends="struts&#45;default" name="hello" namespace="&#47;hello">
<action class="com&#46;java&#46;struts&#46;action&#46;Test&#95;Action&#95;01" method="execute" name="Test&#95;Action&#95;01">
<result name="success">/success.jsp</result>
</action>
</package>
进行配置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>
</struts>

    <!--
   package
        Action 的进行封装。可以进行配置多个action
   name
       取名称,不要重复
   namespace
       给action 的访问路径定义的一个名称空间
   extends
      继承默认一个拦截器 的一个名称
   abstract=""  包是否为抽象的,标识。属性,此包不能直接运行,只能继承
        ture  抽象  false  非抽象(默认的)
              如   <package name=,"struts-default" abstract="true">
-->
    <package name="hello"  namespace="/hello"  extends="struts-default">
<!--     可以进行定义全局的结果集-->
            <global-results>
    <!--
            result  执行返回的结果集的
              name="outLogin"  名称
              type  =  跳转的类型  重定向 或者  转发
      -->
             <result name="outLogin" type="redirect">/login.jsp</result>
            </global-results>
        <!--
   当出现异常的时候进行跳转到错误的页面的
            -->
         <global-exception-mappings>
            <!--
        exception="`"   异常的包路径如:java.long.Exception
        result=""  跳转的页面的名称 如 error
            -->
             <exception-mapping exception="`" result=""></exception-mapping>
         </global-exception-mappings>
        <!--
             name="Test_Action_01"
                    名称-路径访问的地址名称
            class=
                action完整的类路径
            method=
                调用action类中的方法  ,处理请求的方法
        -->
          <action name="Test_Action_01" class="com.java.struts.action.Test_Action_01" method="execute">
              <!--
                   进行处理结果的
                       name="success"  标识结果处理的名称(执行某个方法返回的值,必须是一致)
                      type  =  跳转的类型  重定向 或者  转发(默认)
                      标签体:编写就是页面的路径     /success.jsp

              -->
                <result name="success" >/success.jsp</result>
                <result name="success01">/success.jsp</result>
          </action>
    </package>
    <!--可以进行引入其他的struts.xml文件-->
   <include file="com\java\struts\action\struts.xml"></include>

常用的配置
struts.i18n.encoding=UTF-8 格式化字符集编码
方式一:
进行配置
<struts>


方式二

<context-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>utf-8</param-value>
</context-param>
常用配置的使用</struts>

<!--进行配置格式化字符集的-->
 <constant name="struts.i18n.encoding" value="utf-8"></constant>
<!--
   指定请求路径地址的action 的后缀名
-->
 <constant name="struts.action.extension" value="action,,"></constant>
<!--进行配置开发模式-->
<constant name="struts.devMode" value="false"></constant>
<!--进行配置动态方法进行调用 是否开启 默认false-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

动态的加载
方式一

<!--进行配置格式化字符集的-->
 <constant name="struts.i18n.encoding" value="utf-8"></constant>

<!--进行配置动态方法进行调用 是否开启 默认false-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

<package name="hello"  namespace="/hello"  extends="struts-default">
    <action name="Test_Action01" class="com.test.struts.action.Test_Action01" >
        <result name="success" >/success.jsp</result>
    </action>
</package>

页面执行

<form action="hello&#47;Test&#95;Action01&#33;getAdd" method="post">

</form>

方式二:

<package extends="struts&#45;default" name="hello" namespace="&#47;hello">

<action class="com&#46;test&#46;struts&#46;action&#46;Test&#95;Action01" method="&#123;1&#125;" name="Test&#95;Action01&#95;&#42;">
<result name="success">/success.jsp</result>
</action>
</package>
--
<form action="hello&#47;Test&#95;Action01&#95;getAdd" method="post">

</form>

转发和重定向
<action class="com&#46;java&#46;struts&#46;action&#46;Test&#95;Action&#95;01" name="Test&#95;Action&#95;01">
<!–转发–>
<result name="success" type="dispatcher">/success.jsp</result>
<!–重定向–>
<result name="del" type="redirect">/success.jsp</result>
</action>
action 和action之间的转发
<action class="com&#46;java&#46;struts&#46;action&#46;Test&#95;Action&#95;01" method="getAdd" name="Test&#95;Action&#95;01">



<result name="success" type="dispatcher">/success.jsp</result>
</action>

 <action name="Test_Action_02" class="com.java.struts.action.Test_Action_02"  >
     <!--转发 到 action中 Test_Action_02  准发到 Test_Action_01-->
     <interceptor-ref name="basicStack"    />
     <result name="success" type="chain">Test_Action_01</result>
 </action>

action 和action之间的重定向
<action class="com&#46;java&#46;struts&#46;action&#46;Test&#95;Action&#95;01" method="getAdd" name="Test&#95;Action&#95;01">



<result name="success" type="dispatcher">/success.jsp</result>
</action>

<action class="com&#46;java&#46;struts&#46;action&#46;Test&#95;Action&#95;03" name="Test&#95;Action&#95;03">
<result name="success" type="redirectAction">
<object>Test_Action_01
/hello
</object></result>
</action>

Struts2 中获取Servlet的API
public String getAdd(){

     ActionContext.getContext().put("name","RequestName");//相当于Servlet中的request域
     //session
     Map<String, Object> session = ActionContext.getContext().getSession();
     session.put("lastName","sessionName");
     //appliaction
     Map<String, Object> application = ActionContext.getContext().getApplication();
     application.put("lastAge","application");

     return  "success";
 }

 <action name="Test_Action_04_Servlet" class="com.java.struts.action.Test_Action_04_Servlet"  >
     <result name="success" >/success.jsp</result>
 </action>

---


\{requestScope.name}
\{sessionScope.lastName}
\{applicationScope.lastAge}

获取页面数据对象了
方式一:
*/
public class Users {

private  Integer     id;
private  String    name;
private Date  date;
//get  set 方法
public class Test_Action_05_User extends ActionSupport {
//获取页面的数据
 private Users  users;  //对应的get set 方法
 public   String    getAdd(){

     System.out.println("页面的数据信息::"+users);
     return  "success";
 }
 -----
      <action name="Test_Action_05_User" class="com.java.struts.action.Test_Action_05_User"    >
     <result name="success" >/success.jsp</result>
 </action>
 页面的提交
    <FORM  ACTION="hello/Test_Action_05_User!getAdd" method="post" >
   <%--是属性名称  get set 方法的名称 去掉get set   首字母小写--%>
           <input TYPE="text" NAME="users.name" VALUE="小王"><br/>
           <input TYPE="text" NAME="users.id" VALUE="123"><br/>
           <input TYPE="text" NAME="users.date" VALUE="2019-12-12"><br/>
           <INPUT TYPE="submit" VALUE="提交"><BR/>
     </FORM>

方式二:
public class Test_Action_06_User extends ActionSupport implements ModelDriven<users> {
//获取页面的数据
private Users users=new Users();</users>

 public   String    getAdd(){

     System.out.println("页面的数据信息::"+users);
     return  "success";
 }

@Override
public Users getModel() {



    return users;
}

}
------------
<action class="com&#46;java&#46;struts&#46;action&#46;Test&#95;Action&#95;06&#95;User" name="Test&#95;Action&#95;06&#95;User">
<result name="success">/success.jsp</result>
</action>

 -----------
    <FORM  ACTION="hello/Test_Action_06_User!getAdd" method="post" >
             <input TYPE="text" NAME="name" VALUE="小王"><br/>
           <input TYPE="text" NAME="id" VALUE="123"><br/>
           <input TYPE="text" NAME="date" VALUE="2019-12-12"><br/>
           <INPUT TYPE="submit" VALUE="提交"><BR/>
      获取集合数据
 public class Test_Action_07_List extends ActionSupport{


private List<String> list;
 public   String    getAdd(){

     for (String o : list) {
         System.out.println(o);
     }
     return  "success";
 }

public List<String> getList() {
    return list;
}

public void setList(List<String> list) {
    this.list = list;
}

}----------

 <action name="Test_Action_07_List" class="com.java.struts.action.Test_Action_07_List"    >
     <result name="success" >/success.jsp</result>
 </action>

---------页面
<form action="hello&#47;Test&#95;Action&#95;07&#95;List&#33;getAdd" method="post"> <%--是属性名称 get set 方法的名称 去掉get set 首字母小写--%>



 获取map数据
        public class Test_Action_08_Map extends ActionSupport{


private HashMap<String,Object> map;
 public   String    getAdd(){
     System.out.println(map);
     return  "success";
 }

public HashMap<String, Object> getMap() {
    return map;
}

public void setMap(HashMap<String, Object> map) {
    this.map = map;
}

}

xml的编写

 <action name="Test_Action_08_Map" class="com.java.struts.action.Test_Action_08_Map"    >
     <result name="success" >/success.jsp</result>
 </action>

<%--是属性名称 get set 方法的名称 去掉get set 首字母小写--%>



</form>