struts.xml
- 名称和位置固定的,放在src目录下
- 在配置文件中主要三个标签 package、action、result,标签里面的属性
package
- 类似于代码包,区别不同的action,要配置action,必须首先写package标签,在package里面才能 配置action
- name属性:name属性值根功能本身没有关系的,在一个配置文件中可以写多个package标签,name属性值不能相同的
- extends属性:属性值固定的,struts-default。写了这个属性之后,在package里面配置的类具有action功能
- namespace属性:namespace属性值和action标签里面的name属性值构成访问路径
<?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="demo" extends="struts-default" namespace="/">
<action name="hello" class="cn.itcast.action.HelloAction">
<result name="ok">/hello.jsp</result>
</action>
</package>
</struts>
action
- action标签配置action访问路径
- name属性:namespace属性值和action标签里面的name属性值构成访问路径,在package标签里面写多个action标签,但是action的name属性值不能相同的
- class属性:action全路径
- method属性:比如在action里面默认执行的方法execute方法,但是在action里面写其他的方法.让action里面多个方法执行,使用method进行配置
result
- 根据action的方法返回值,配置到不同的路径里面
- name属性:和方法返回值一样
- type属性:配置如何到路径中(转发或者重定向),type属性默认值 做转发操作
修改常量
- struts2默认的常量位置:org.apache.struts2—>static—>default.properties
- 默认常量可以在struts.xml中进行修改
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
引入xml
- 单独写配置文件,把配置文件引入到核心配置文件中
- 比如struts.xml是核心配置文件,hello.xml是团队中某个人的项目配置文件,则可以在struts.xml中引入hello.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>
<include file="cn/itcas/action/hello.xml">
</struts>
web.xml
<web-app>
<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>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Action类
普通方式
- 创建普通类,这个不继承任何类,不实现任何接口
实现接口
- 创建类,实现接口 Action
/**
* 实现接口
* @author asus
*
*/
public class UserAction implements Action{
@Override
public String execute() throws Exception {
// return "success";
return SUCCESS;
}
}
继承抽象类
- 创建类,继承类 ActionSupport(一般使用)
/**
* 继承类
* @author asus
*
*/
public class PersonAction extends ActionSupport {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}
访问action
method
- 使用action标签的method属性,在这个属性里面写执行的action的方法
package cn.itcast.method;
import com.opensymphony.xwork2.ActionSupport;
public class BookAction extends ActionSupport {
//添加
public String add() {
System.out.println("add..............");
return NONE;
}
//修改
public String update() {
System.out.println("update..............");
return NONE;
}
}
<!-- 配置action的方法访问 -->
<package name="methoddemo" extends="struts-default" namespace="/">
有method属性:写要执行的action里面的方法的名称
<action name="addAction" class="cn.itcast.method.BookAction" method="add"></action>
执行update方法
<action name="updateAction" class="cn.itcast.method.BookAction" method="update"></action>
</package>
- 缺陷:action每个方法都需要配置,如果action里面有多个方法,配置很多的action
通配符
- 使用通配符方式实现
- 在action标签里面name属性,name属性值里面写 符号 * 星号
- 星号理解: 表示匹配任意内容
package cn.itcast.method;
import com.opensymphony.xwork2.ActionSupport;
public class BookAction extends ActionSupport {
//添加
public String add() {
System.out.println("add..............");
return NONE;
}
//修改
public String update() {
System.out.println("update..............");
return NONE;
}
}
<!-- 通配符方式实现 -->
<package name="methoddemo" extends="struts-default" namespace="/">
<!--
name属性值里面写符号 *
(1)执行action里面的add方法,访问 book_add,使用book_*可以匹配到,*相当于变成 add
(2)执行action里面的update方法,访问book_update,使用book_*可以匹配到,*相当于变成 update
上面两个路径使用 book_* 可以匹配到
method属性写*值
-->
<action name="book_*" class="cn.itcast.method.BookAction" method="{1}">
</action>
</package>
访问book_update.action就会调用action类中的update方法