Struts2的配置文件
1.1 struts.xml中的标签详解
1.1.1 constant标签
作用:
用于修改struts2中的常量
属性:
name:指定常量的key
value:指定常量的值
用法:
<!-- 开启开发者模式 -->
<constant name="struts.devMode" value="true"></constant>
1.1.2 package标签
作用:
在struts2的配置文件中引入了面向对象思想,使用了分包管理。易于管理动作类。便于模块化开发动作类。
属性:
name:
包的名称。必须写。且必须唯一。
extends:
一般情况下需要继承struts-default包,但不是必须的。不过如果不继承的话,将无法使用struts2提供的核心功能。struts-default.xml中定义着struts-default这个包。而struts-default.xml是在我们的struts.xml加载之前加载。
abstract:
把包声明为抽象包,抽象包就是用来被继承的。只要是没有<action>元素的包,就可以声明为抽象包。
namespace:
名称空间。它的作用是把访问的URL按照模块化来管理。
名称空间的写法:
必须以/开头
后面可以是字母和数组的组合,也可只有字母。
如果有数字的话,数字不能作为/后面的第一个字符。
当我们指定了名称空间之后,访问的URL就变成了:
名称空间+action标签的name属性取值
例如:
/n1/hello.action
/customer/addCustomer.action
/customer/editCustomer.action
/linkman/findAllLinkMan.action
/linkman/removeLinkMan.action
名称空间的默认值是:""(struts2官方文档中提供的)
用法:
<package name="myDefault" extends="struts-default" abstract="true">
<!-- 此处就可以定义公共配置,该公共配置应该是当前应用中的公共配置 -->
</package>
<package name="p1" extends="myDefault" namespace="/n1">
<action name="hello" class="com.itheima.web.action.HelloAction" method="sayHello">
<result name="success" type="dispatcher">/success.jsp</result>
</action>
</package>
1.1.3 action标签
作用:
建立动作名称和动作类以及动作方法的对应关系。
属性:
name:指定的动作名称。和页面中url后面保持一种。注意此处不能后缀。动作名称必须唯一。
class:指定的是动作类的全限定类名。
method:指定的是动作方法名称
1.1 动作类的三种创建方式:
1.1.1 第一种:无侵入式创建(实际开发中基本不用)
/**
* 我们的第一个动作类
* 动作类的第一种创建方式:
* 无侵入式的创建。
*/
public class HelloAction {
/**
* @return
*/
public String sayHello(){
System.out.println(this);
System.out.println("HelloAction中的sayHello方法执行了。。。。");
return "success";
}
}
<action name="hello" class="com.itheima.web.action.HelloAction" method="sayHello">
<result name="success" type="dispatcher">/success.jsp</result>
</action>
1.1.2 第二种:实现Action接口的定义方式 (实际开发中用的也不多)
/**
* 动作类的第二种创建方式:
* 实现Action接口
*/
public class Hello2Action implements Action{
@Override
public String execute() throws Exception {
System.out.println("Hello2Action的execute方法执行了............");
return ERROR;
}
}
默认的动作方法是:execute(),所以可以不指定method属性
<action name="hello2" class="com.itheima.web.action.Hello2Action">
<result name="success" type="dispatcher">/success.jsp</result>
</action>
Action接口中的常量
SUCCESS:一般多用于成功
ERROR:一般多用于动作方法执行失败
LOGIN:一般多用于返回登录页面
NONE:一般用于不返回任何结果视图,和return null作用是一样的
INPUT:一般多用于数据回显,也是struts2中数据回显时的默认返回值。
1.1.3 第三种:继承ActionSupport (们实际开发中采用的方式)
/**
* 动作类的第三种创建方式:
* 继承ActionSupport
*/
public class Hello3Action extends ActionSupport{
}
<action name="hello3" class="com.itheima.web.action.Hello3Action">
<result name="success" type="dispatcher">/success.jsp</result>
</action>
1.1.4 默认动作类:ActionSupport类
通过struts-default.xml中我们知道默认的动作类是ActionSupport,所以如果实现该类的execute方法,则可以不用指定class和method属性
<action name="defaultAction">
<result name="success" type="dispatcher">/success.jsp</result>
</action>
1.2 配置action时使用通配符
1.2.1 原始全匹配配置方式:
<package name="user" extends="struts-default" namespace="/user" >
<action name="addUser" class="com.itheima.web.action.UserAction" method="addUser">
<result name="success">/success.jsp</result>
</action>
<action name="updateUser" class="com.itheima.web.action.UserAction" method="updateUser">
<result name="success">/success.jsp</result>
</action>
<action name="deleteUser" class="com.itheima.web.action.UserAction" method="deleteUser">
<result name="success">/success.jsp</result>
</action>
<action name="findUser" class="com.itheima.web.action.UserAction" method="findUser">
<result name="success">/success.jsp</result>
</action>
</package>
页面访问方式:
<a href="${pageContext.request.contextPath}/addUser.action">添加用户</a>
<a href="${pageContext.request.contextPath}/updateUser.action">修改用户</a>
<a href="${pageContext.request.contextPath}/deleteUser.action">删除用户</a>
<a href="${pageContext.request.contextPath}/findUser.action">查询用户</a>
Action类中的方法:
/**
* 用户管理的动作类
*/
public class UserAction extends ActionSupport {
public String addUser(){
System.out.println("添加了用户");
return SUCCESS;
}
public String updateUser(){
System.out.println("更新了用户");
return SUCCESS;
}
public String deleteUser(){
System.out.println("删除了用户");
return SUCCESS;
}
public String findUser(){
System.out.println("查询了用户");
return SUCCESS;
}
}
1.2.2 使用通配符访问方式
1.2.3 第一种:单一通配符
<package name="user" extends="struts-default">
<action name="*" class="com.itheima.web.action.UserAction" method="{1}">
<result name="success">/success.jsp</result>
</action>
</package>
页面访问方式和Action类中的方法不变
1.2.4 第二种:多个通配符组合使用
<package name="user" extends="struts-default"> <action name="*_*" class="com.itheima.web.action.{2}Action" method="{1}{2}">
<result name="success">/success.jsp</result>
</action>
</package>
页面访问方式:
<a href="${pageContext.request.contextPath}/add_User.action">添加用户</a>
<a href="${pageContext.request.contextPath}/update_User.action">修改用户</a>
<a href="${pageContext.request.contextPath}/delete_User.action">删除用户</a>
<a href="${pageContext.request.contextPath}/find_User.action">查询用户</a>
Action类中的方法不变。
1.2.5 第三种:动态方法调用
<!-- 开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="user" extends="struts-default">
<action name="user" class="com.itheima.web.action.UserAction" >
<result name="success">/success.jsp</result>
</action>
</package>
页面访问方式:
<a href="${pageContext.request.contextPath}/user!addUser.action">添加用户</a>
<a href="${pageContext.request.contextPath}/user!updateUser.action">修改用户</a>
<a href="${pageContext.request.contextPath}/user!deleteUser.action">删除用户</a>
<a href="${pageContext.request.contextPath}/user!findUser.action">查询用户</a>
Action类中的方法不变。