Struts 2 执行流程 配置信息

Struts 2 执行流程

首先,浏览器访问,经过Filter,Filter从src/struts.xml中寻找命名空间和action的名字,获取action类,从方法中拿到返回值,接着从result内部获取到hello.jsp

学习流程(Struts架构图)

配置详解

  核心配置:

    

     <!-- package元素:将我们的Action封装,可以在package中配置很多action
        name:包名字,随便起,不能与其他包名重复
        namespace:给action访问网络路径定义一个命名空间
        extends:继承一个指定包
        abstract属性:包是否为抽象的,标识属性。
     -->
     <!-- action元素
        name属性:决定了Action访问资源名
        class属性:Action类的完整类名
        method:方法名
     -->
     <!-- result元素
         name属性:标识结果处理名称,与action方法的返回值对应
         type属性:指定调用某个result类来处理结果,默认使用转发
      -->

修改struts的编码(加载顺序,3>1),可以替代Filter配置编码,解决post问题

第一种修改方式

在src下新建struts.properties

在struts-core的jar包下的struts2下的default下有个修改encoding的,复制过来

struts.i18n.encoding=UTF-8即可修改编码为UTF-8

第二种修改方式(真正开发中)

在struts.xml下加入标签
<constant name="struts.i18n.encoding" value="UTF-8"></constant>

第三种修改方式

<context-param>
  	<param-name>struts.i18n.encoding</param-name>
  	<param-value>UTF-8</param-value>
  </context-param>

常量介绍

struts.action.extension=action,,

访问action时的后缀名,默认值为action或者空

如果修改为do,那么访问时必须加上.do,.do是struts1自带的

struts.devMode = false

指定struts2是否以开发模式运行

1.热加载主配置

2.提供更多错误信息输出,方便开发时的测试

动态方法调用

1.(了解)

Demo类

package com.littlepage.dynamic;

public class DemoAction {
    public String add() {
        System.out.println("添加用户");
        return "success";
    }
    public String del() {
        System.out.println("删除用户");
        return "success";
    }
    public String update() {
        System.out.println("修改用户");
        return "success";
    }
    public String find() {
        System.out.println("查找用户");
        return "success";
    }
}

xml文件

<?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>
    <!-- 配置动态方法常量 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    <package name="dynamic" namespace="/dynamic" extends="struts-default">
        <action name="DemoAction" class="com.littlepage.dynamic.DemoAction">
            <result name="success">/hello.jsp</result>
        </action>
    </package>
</struts>

访问调用!

http://localhost:8080/StrutsTest/dynamic/DemoAction!add

console打印信息

 不推荐理由,不满足seo(search engine optimization)

2.(重点)

修改struts.xml

<?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="dynamic" namespace="/dynamic" extends="struts-default">
		<action name="DemoAction_*" class="com.littlepage.dynamic.DemoAction" method="{1}">
			<result name="success">/hello.jsp</result>
		</action>
	</package>
</struts>

将action name的改为可通配,可通配在后面method中可以使用表达式进行通配符的取出

访问

http://localhost:8080/StrutsTest/dynamic/DemoAction_add

console打印

struts2中默认配置

练习:

原文地址:https://www.cnblogs.com/littlepage/p/10703014.html