Struts2概述

  1. struts应用在JavaEE三层框架的web层
  2. Struts2是在Struts1和webwork基础上发展的全新框架
  3. web层的常见框架
    1)Struts2
    2)SpringMVC

Struts2准备以及简单入门

  1. jar包
  2. 创建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">
  3. 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>
  1. 创建Action类(三种方式,此处仅采用第一种方式)
    1)Action类中必须有execute()方法(默认执行该方法)
package tqb.actiondemo;

public class ActionDemo1 {
	
	/** * 默认执行的方法execute * @return */
	public String execute(){
		return "ok";
	}
}
  1. 在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>
  1. 访问action

核心配置文件标签详解

  1. package标签
    1)name:对配置文件没有直接影响,当存在多个package时,用于区分不同的package
    2)extends:默认值struts-default,有继承了struts-default,action标签设置的内容才是对Action类的设置
    3)namespace:默认值“/”,可不写,默认存在该值,用于构成访问路径
  2. action标签
    1)name:地址栏访问时的名称
    2)class:当前Action类的全路径名称
    3)method:访问Action类中的其它方法
  3. result标签
    1)name:方法返回值
    2)type:访问路径下的文件(如jsp页面)或其它Action的方式(转发或重定向),有四个值:路径下的文件(dispatcher、redirect)、其它Action(chain、redirectAction)
  4. constant标签
    1)主要进行常量的设置
    2)最常设置的常量(编码的处理)
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
  1. include标签
    1)分模块开发时,不能让多人同时修改同一个struts2核心配置文件,必须在自己的配置文件中进行修改,最后再引入到核心配置文件中
    2)file:引入文件的路径
<include file="tqb/actiondemo/demo1.xml"></include>
  1. 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的三种创建方式

  1. 不继承不实现任何类和接口,类中拥有execute方法
package tqb.actiontest;

/** * 编写Action的三种方式(第一种) * 不用实现或继承任何一个的接口或类 * @author tqb * */
public class ActionDemo1 {
	public String execute() {
		return "success";
	}
}
  1. 实现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;
	}
}
  1. 继承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;
	}
}
  1. 常规方法通过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>
  1. 使用通配符进行访问
<!-- 访问action的三种方式(第二种常用) -->
	<package name="demo" extends="struts-default">
		<!-- 采用占位符的方式进行配置 *表示可以匹配任何内容 {1}表示第一个位置 -->
		<action name="demo_*" class="tqb.actiontest.ActionDemo4" method="{1}"></action>
	</package>


3. 动态方法访问(了解)