(一)环境搭建
创建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">
<struts>
</struts>
在web.xml文件配置struts2的核心过滤器
<!-- struts2的核心过滤器 -->
<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>
(二) struts2案例
创建一个class:“FirstAction”,创建一个方法:“SayHellow()”
public class FirstAction {
/*
*
* 动作方法:
* 一般返回string类型,也可返回null
*
* */
public String SayHellow(){
System.out.println("hello");
return "success";
}
}
在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="first" extends="struts-default">
<action name="hello" class="action.FirstAction" method="SayHellow">
<result name="success" type="dispatcher">/WEB-INF/success.jsp</result>
</action>
</package>
</struts>
实验一下
index.jsp
success.jsp
点击
成功跳转到success.jsp
<?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.devMode" value="true"></constant>
<!-- 设定访问后缀为.action -->
<constant name="struts.action.extension" value="action"></constant>
<!--package标签
作用:给访问的action进行分包管理
属性:
name:指定包的名称,必须唯一
extends:继承,一般需要继承 struts-default
abstract:声明为抽象包,只有没有action标签的包,才能定义为抽象包
namespace:指定当前包的名称空间,它可以让我们的访问url模块化。
命名规则:/+名称 如:“/user”
指定该属性后,访问url变成:名称空间+包名称
例如:
/user/userAction.action
命名空间有默认值:默认值是:“”
-->
<package name="first" extends="struts-default">
<!-- action标签
作用:建立动作名称,动作类和动作方法的对应关系
属性:
name:指定动作名称
class:指定动作类的全限定名
method:指定方法名称
动作类的三种创建方法:
第一种:无侵入式: 实际开发应用不多
例如FirstAction
第二种:实现接口的方式 实际开发应用不多
Action类实现一个接口Action
默认动作方法:当执行execute方法时,method属性可不写
<action name="hello" class="action.FirstAction">
</action>
第三种:继承ActionSupport的方式
默认动作类:ActionSupport
<action name="hello">
</action>
-->
<action name="hello" class="action.FirstAction" method="SayHellow">
<result name="success" type="dispatcher">/WEB-INF/success.jsp</result>
</action>
<!-- action的三种访问方式 -->
<!-- 第一种 全匹配方式 -->
<action name="hello" class="action.FirstAction" method="SayHellow">
<result name="success" type="dispatcher">/WEB-INF/success.jsp</result>
</action>
<!-- 第二种 使用通配符方式 -->
<!-- 基本用法 如name为 addUser method为addUser 动作类Action为UserAction -->
<action name="*" class="action.UserAction" method="{1}">
<result name="{1}" type="dispatcher">/WEB-INF/{1}{2}.jsp</result>
</action>
<!-- 高级用法 如name为 add_User method为addUser 动作类Action为UserAction-->
<action name="*_*" class="action.{2}Action" method="{1}{2}">
<result name="{1}" type="dispatcher">/WEB-INF/{1}{2}.jsp</result>
</action>
<!-- 第三种 动态方法调用 -->
<!--result标签
作用:用于配置结果视图,可以是jsp,html,action
属性:
name:指定逻辑结果视图。与动作方法的返回值进行比较,一致时,前往配置页面或者action
type: 指定前往视图的方法。
常用的type:
dispatcher:请求转发(默认值)
redirect:重定向
redirectAction:重定向到另一个动作(会自动在url后面拼接.action )
全局结果视图
定义放在action标签外面,在 <global-results>标签内部的结果视图
可以在多个action使用
局部结果视图优先级较高
<package name="myDefault" extends="struts-default" abstract="true" >
<global-results>
<result name="login">login.jsp</result>
</global-results>
</package>
其他package继承这个package
-->
</package>
</struts>
(三)struts2内部执行过程