Struts2的简介
- Struts2是一个基于MVC的web层框架 (web层框架遵守MVC设计模式)
- Struts2与struts关系? 没关系 struts2框架的内核webwork webwork内核是xwork
- Struts2可以与web完全解耦,是可插拔式的框架(通过filter)
Struts2快速入门
- 导入struts2开发的相关jar
struts-2.3.24-all\struts-2.3.24\apps\struts2-blank\WEB- INF\lib*.jar - 配置web.xml
<!-- 配置Struts2的核心Filter -->
<filter>
<filter-name>Struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3 编写Action
public class QuickStartAction {
public String execute(){
System.out.println("QuickStartAction running....");
return null;
}
}
4 配置struts.xml
位置:src下 (类加载路径)
约束:struts2-core-2.3.24.jar/struts-2.3.dtd
配置:
<?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="text" namespace="/" extends="struts-default">
<action name="quick" class="com.itheima.action.QuickStartAction"></action>
</package>
</struts>
5 测试
url: http://localhost:8080/Struts2Day01/quick
struts2配置文件
- StrutsPrepareAndExecuteFilter的作用
init_DefaultProperties(); // [1] 加载org/apache/struts2/default.properties
init_TraditionalXmlConfigurations(); // [2] 加载struts-default.xml,struts-plugin.xml,struts.xml
init_LegacyStrutsProperties(); // [3] 加载struts.properties
init_CustomConfigurationProviders(); // [5]
init_FilterInitParameters() ; // [6] 加载核心filter的初始化参数 aaa=bbb
Struts
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
aaa
bbb
init_AliasStandardObjects() ; // [7]
总结:
服务器启动时,Fiter对象创建,init方法执行,配置文件就加载
配置文件加载顺序:
default.properties struts内置
struts-default.xml struts内置
struts-plugin.xml struts内置
struts.xml 自定义(重点)
struts.properties 自定义
filter的init参数 自定义
后加载的配置如果与先加载的配置有冲突,那么后加载会覆盖先加载
1. default.properties
struts.i18n.encoding=UTF-8 post提交不用解决乱码
struts.multipart.maxSize=2097152 限制上传的文件的大小
struts.action.extension=action,, 访问Action时可以携带的扩展名
struts.devMode = false 设置当前是否为开发模式 默认非开发模式
如果设置为true 那么修改struts的配置文件后不需要重新启动
2. struts-default.xml
常量 相当于在properties中配置键值对
struts会自动创建配置一些bean对象
3 struts-default.xml
常量 相当于在properties中配置键值对
struts会自动创建配置一些bean对象
4 struts.xml
在src下创建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>
<!-- 1、配置常量 -->
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.action.extension" value="action,abc,,"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!-- 2、虚拟包(逻辑包)package
出现的目的:方便去管理Action
属性:
name:包的名称
namespace:命名空间
作用: 与action的name一起组成虚拟的访问路径
例如:
namespace="/" action的name="quick"
http://localhost:8080/Struts2Day01/quick
namespace="/abc" action的name="quick"
http://localhost:8080/Struts2Day01/abc/quick
extends:该包继承自哪一个包 一般继承struts-default
作用:父包中定义好的内容直接使用
-->
<package name="text" namespace="/" extends="struts-default">
<!-- 2.1 Action的基本配置(重点)
属性:
name:当前Action的虚拟名称 该名称与namespace一起组成访问路径
class:Action的全限定名
method:指定访问Action的哪一个方法
结果视图的配置
name: 逻辑视图名称 与Action中方法的返回值进行匹配
-->
<!-- <action name="quick_save" class="com.itheima.action.QuickStartAction" method="save">
<result name="saveResult">/saveResult.jsp</result>
<result name="updateResult">/updateResult.jsp</result>
</action>
<action name="quick_update" class="com.itheima.action.QuickStartAction" method="update">
<result name="saveResult">/saveResult.jsp</result>
<result name="updateResult">/updateResult.jsp</result>
</action> -->
<!-- 2.2 Action的优化配置-通配符方式(重点)
name="qucik_save" method="save"
name="qucik_update" method="update"
name="qucik_*" method="{1}"
name="qucik_*_*" method="{1}{2}"
*代表任意字符串 {n}代表第n个*对应的字符串
例如:
name="qucik_*" method="{1}"
资源quick_xxx 访问的方法就是xxx
name="qucik_*_*" method="{1}{2}"
资源quick_save_Customer 访问的方法就是saveCustomer
-->
<action name="quick_*" class="com.itheima.action.QuickStartAction" method="{1}">
<result name="saveResult">/saveResult.jsp</result>
<result name="updateResult">/updateResult.jsp</result>
</action>
<!-- 2.3 动态方法调用(了解)
不用在配置时执行方法
但是需要在访问时指定哪个方法
http://localhost:8080/Struts2Day01/资源!方法.action
http://localhost:8080/Struts2Day01/quick!save.action
注意:默认情况下 struts2不支持动态方法调用 需要开启才能使用
修改一个常量(default.properties) struts.enable.DynamicMethodInvocation = false
-->
<!-- <action name="quick" class="com.itheima.action.QuickStartAction">
<result name="saveResult">/saveResult.jsp</result>
<result name="updateResult">/updateResult.jsp</result>
</action> -->
</package>
<!-- 3、该xml文件引入其他xml文件 分模块开发 -->
<!-- <include file="struts-customer.xml"></include> -->
</struts>
Strits2相关API(Action创建的三种方式)
- 使用一个pojo充当Action pojo:(Plain Ordinary Java Object)简单的Java对象
- Action类去实现Action接口
- ActionSupport已经实现execute方法
ActionSupport功能强大