Struts2概述
- struts应用在JavaEE三层框架的web层
- Struts2是在Struts1和webwork基础上发展的全新框架
- web层的常见框架
1)Struts2
2)SpringMVC
Struts2准备以及简单入门
- jar包
- 创建struts2核心配置文件(并且引入dtd约束)
1)位置必须是在src目录下
2)文件名必须是struts.xml
3)dtd约束:<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
- web.xml配置文件的设置
1)配置过滤器
<!--
必须在web.xml中配置过滤器,否则无法访问(404)
-->
<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>
- 创建Action类(三种方式,此处仅采用第一种方式)
1)Action类中必须有execute()方法(默认执行该方法)
package tqb.actiondemo;
public class ActionDemo1 {
/**
* 默认执行的方法execute
* @return
*/
public String execute(){
return "ok";
}
}
- 在struts.xml配置文件中添加如下内容
<?xml version="1.0" encoding="UTF-8"?>
<!--
引入约束文件
名称必须为struts.xml
位置必须在src目录下
-->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--
name:按照自己的想法进行起名,不影响其它设置
extends:只有继承了struts-default,action标签设置的内容才是对Action类的设置
namespace:默认值是“/”,该属性可以不进行设置
-->
<package name="actiondemo" extends="struts-default" namespace="/">
<!--
name:访问时需要在地址栏输入的名称
class:设置Action类的全路径
method:执行其它的方法
-->
<action name="actiondemo1" class="tqb.actiondemo.ActionDemo1">
<!--
name:返回值返回过来的值
/index.jsp:若返回值匹配成功要访问的路径
type:访问该路径的方式(转发、重定向),默认转发的方式
-->
<result name="ok">/index.jsp</result>
</action>
</package>
</struts>
- 访问action
核心配置文件标签详解
- package标签
1)name:对配置文件没有直接影响,当存在多个package时,用于区分不同的package
2)extends:默认值struts-default,有继承了struts-default,action标签设置的内容才是对Action类的设置
3)namespace:默认值“/”,可不写,默认存在该值,用于构成访问路径 - action标签
1)name:地址栏访问时的名称
2)class:当前Action类的全路径名称
3)method:访问Action类中的其它方法 - result标签
1)name:方法返回值
2)type:访问路径下的文件(如jsp页面)或其它Action的方式(转发或重定向),有四个值:路径下的文件(dispatcher、redirect)、其它Action(chain、redirectAction) - constant标签
1)主要进行常量的设置
2)最常设置的常量(编码的处理)
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
- include标签
1)分模块开发时,不能让多人同时修改同一个struts2核心配置文件,必须在自己的配置文件中进行修改,最后再引入到核心配置文件中
2)file:引入文件的路径
<include file="tqb/actiondemo/demo1.xml"></include>
- global-results标签
1)结果页面配置(全局页面配置)
2)应用场景:当多个action转向的地址相同时,可以采用全局页面配置
3)局部页面配置指的就是action中存在result标签
4)当局部页面配置和全局页面配置同时存在时,全局无效,局部有效
<package name="global-results" extends="struts-default" namespace="/">
<global-results>
<result name="success">/index.jsp</result>
</global-results>
<action name="actiondemo5" class="tqb.actiontest.ActionDemo5"></action>
<action name="actiondemo6" class="tqb.actiontest.ActionDemo6"></action>
</package>
Action的三种创建方式
- 不继承不实现任何类和接口,类中拥有execute方法
package tqb.actiontest;
/**
* 编写Action的三种方式(第一种)
* 不用实现或继承任何一个的接口或类
* @author tqb
*
*/
public class ActionDemo1 {
public String execute() {
return "success";
}
}
- 实现Action接口,且实现execute方法
package tqb.actiontest;
/*
* 导包com.opensymphony.xwork2.Action
*/
import com.opensymphony.xwork2.Action;
/**
* 编写Action的三种方式(第二种)
* 实现Action接口
* @author tqb
*
*/
public class ActionDemo2 implements Action {
@Override
public String execute() throws Exception {
/*
* 返回值的三种方式
* Action接口的常量
* public static final java.lang.String SUCCESS = "success";
* 返回none实质上是不返回任何值,即返回参数类型为void
* NONE = "none";
* ERROR = "error";
* INPUT = "input";
* LOGIN = "login";
*/
// return "success";
// return SUCCESS;
return Action.SUCCESS;
}
}
- 继承ActionSupport类
package tqb.actiontest;
import com.opensymphony.xwork2.ActionSupport;
/**
* 编写Action的三种方式(第三种)常用
* 继承ActionSupport(ActionSupport实质上实现了Action接口)
* @author tqb
*
*/
public class ActionDemo3 extends ActionSupport {
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
Action的访问方法
示例:Action类
package tqb.actiontest;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class ActionDemo4 extends ActionSupport {
private static final long serialVersionUID = 1L;
public String update(){
System.out.println("update...");
return Action.NONE;
}
public String add(){
System.out.println("add...");
return Action.NONE;
}
}
- 常规方法通过method属性进行访问
<!-- 访问action的三种方式(第一种) -->
<package name="demo" extends="struts-default">
<!--
无返回值,所以无result标签
-->
<action name="addAction" class="tqb.actiontest.ActionDemo4" method="add"></action>
<action name="updateAction" class="tqb.actiontest.ActionDemo4" method="update"></action>
</package>
- 使用通配符进行访问
<!-- 访问action的三种方式(第二种常用) -->
<package name="demo" extends="struts-default">
<!--
采用占位符的方式进行配置
*表示可以匹配任何内容
{1}表示第一个位置
-->
<action name="demo_*" class="tqb.actiontest.ActionDemo4" method="{1}"></action>
</package>
3. 动态方法访问(了解)