1,配置struts.xml文件
1.1,典型struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- contant 元素用于常量的配置 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
<constant name="struts.devMode" value="true"></constant>
<!-- package 元素用于包配置 -->
<package name="default" namespace="/" extends="struts-default">
<!-- 配置Action -->
<action name="index">
<!-- 配置Result -->
<result type="dispatcher">
<param name="location">/index.jsp</param>
</result>
</action>
</package>
<!-- include 元素用于包含配置 -->
<include file="example.xml"></include>
</struts>
<struts>元素是根元素 ,其他元素都放在<struts></struts>中
1.2, 常量配置
<struts>
<!-- 设置默认编码集为UTF-8 -->
<constant name="struts.il8n.encoding" value="UTF-8"/>
<!-- 设置使用开发模式 -->
<constant name="struts.devMode" value="true"></constant>
</struts>
1.3, 包配置
Struts2的核心组件是 Action和拦截器,它使用包来管理Action和拦截器。
每个包就是多个包和多个拦截器的集合。
<package name="" namespace="" extends="" abstract="">
</package>
name:必填属性,他指定包的名字,此名字是被其他包引用的key
namespace:可选属性,改属性定义了包的命名空间
extends:可选属性,他指定该包继承自其它包(其它包中的Action和拦截器)
abstract:可选属性,他指定该包是否是一个抽象包,抽象包不能包含Action定义
extentds通常设置成 struts-default 这样就有了Struts2的默认Action和拦截器
1.4,包含配置
<struts>
<!-- 包含了四个配置文件 -->
<!-- 相对路径 默认src文件夹下 -->
<include file="struts-shop.xml"/>
<include file="struts-user.xml"/>
<include file="struts-shoppingcart.xml"/>
<!-- 绝对路径 -->
<include file="cn/itcast/action/struts-product.xml"/>
</struts>
被包含的配置文件必须都是标准的Struts2配置文件
2,Action的配置
2.1,实现Action控制类
Action作为框架的核心类,用于实现对用户的请求处理,Action类被称为业务逻辑控制类
Action类的实现分为三种:
1,POJO的实现
POJO的全称是 Plain Ordinary Java Object(简单的java对象),只要有一部分get/set方法的类就可以称为POJO
一般在这个POJO类中,要有一个公共无参的构造方法(默认构造方法就可以)和一个execute()方法
execute()是Action类的默认请求处理方法,定义格式如下:
public String execute()throws Exception{
return "success";
}
execute()方法要求:
1,方法权限修饰符为public
2,返回一个字符串,就是指定下一个页面的Result
3,方法没有参数
满足上述要求的POJO都算作是Struts2的Action的实现
2,实现Action接口
Action接口源码:
package com.opensymphony.xwork2;
public interface Action {
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}
该接口定义了五个常量和一个execute()方法
3,继承ActionSupport类
ActionSupport类本身实现了Action接口,是Struts2默认的Action接口实现类,所以继承该类就相当于
实现了Action接口
ActionSupport类还实现了很多其他接口来为用户提供更多的功能
该类还实现了Serializable接口,所以继承该类必须声明变量serialVersionUID
private static final long serialVersionUID=1L;
2.2,配置Action
<action name="" class="" mathod="">
</action>
name:必填属性,标识Action,指定了Action所处理请求的URL
class:可选属性,指定Action对应的实现类
method:可选属性,指定请求Action时的方法
实例代码:
<action name="test" class="com.test.TestAction">
<result name="success">/success.jsp</result>
</action>
2.3,使用通配符
在使用method属性时,由于Action类中有多个业务逻辑处理方法,在配置Action时,就需要使用
多个action元素。在实现同样功能的情况下,为了减轻struts.xml 配置文件的负担,这是就要
借助通配映射
如下样例:
<package name="user" namespace="/user" extends="struts-default" >
<action name="userAction_*"
class="cn.itcast.action.UserAction" method="{1}">
<result>/index.jsp</result>
</action>
</package>
上述代码中*为通配符,{1} 为第一个* method视客户端发送的请求来决定为什么
如果发送/user/userAction_login.action 时 method属性就是login
如果定义为*_* 那class属性就是action.{1} meithod属性就是{2}
定义为* 那么就可以匹配任何请求
另外result也可以用通配符处理
<result>/{1}.jsp</result>
3,Action访问Servlet API
4,Action处理请求参数
5,Result结果类型