package xinfei.code.test;
/**
* Struts2的概述?什么是Struts2?
* Struts2是基于MVC设计模式的WEB层的框架
* (常见的web框架:Struts1、Struts2、WebWork、SpringMVC)
* Struts2执行流程(前端控制器模式)看下图
* WEB层框架都有一个特点:
* 遵循前端控制器模型,不同的web层框架实现前端控制器模型技术实现不一样
* Struts2 -->filter
* SpringMVC->servlet
* Struts2的前端控制器(StrutsPreparedAndExecuteFilter)
* init 方法:服务器启动执行一次 主要作用:用来加载整个struts2配置文件的
* 按照顺序一个一个加载:
* 1. default-properties
* 目录:(/org/apache/struts2/default.properties)
* struts2的一些初始化配置
* 2. struts-default.xml
* 目录:(/struts-default.xml)
* struts2定义好的包就在这个配置文件中 所以要在服务器启动的时候就要加载
* struts2默认包:struts-default 大量拦截器
* 3. struts-plugin.xml 这是struts2整个spring用到的一个配置文件
* 4. struts.xml src下的定义的配置文件
* 5. 加载StrutsPreparedAndExecuteFilter的初始化参数值
* <init-param>
<param-name>struts.action.extension</param-name>
<param-value>action,,</param-value>
</init-param>
那么..这样按顺序加载有什么好处呢?
这样的好处就是如果前面的配置文件内容与后面的配置内容一致了,
后面的配置内容就会覆盖前面的内容
* @author zx
*
*/
public class Text {
}
src下创建一个struts.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>
<!-- 覆盖action的后缀名访问 name:key value:自定义的值 -->
<constant name="struts.action.extension" value="action,,"></constant>
<!-- 开启动态方法执行 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!--
name:包名 整个配置文件中唯一 作用:给别人继承的
其实extends="struts-default"也是继承struts-default.xml的
namespace:命名空间 会和action标签中的name属性组成当前action的浏览器访问路径
action标签:
name:action的名称 会和package标签中的namespace组成action访问路径
class:全限定名 如果能和浏览器访问路径匹配 通过反射创建实例对象
result 接收返回值别名 默认:请求转发
-->
<package name="test01" extends="struts-default" namespace="/abc">
<!-- 普通访问 -->
<action name="hello" class="xinfei.code.action.ActionDemo01">
<result name="action">/demo01.jsp</result>
</action>
<!-- 实现Action访问 -->
<action name="implment_test" class="xinfei.code.action.ActionDemo02">
<result name="action">/demo01.jsp</result>
</action>
<!-- 继承ActionSupport -->
<action name="extends_test" class="xinfei.code.action.ActionDemo03">
<result name="action">/demo01.jsp</result>
</action>
</package>
</struts>
jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/abc/hello">struts2的初访问</a>
<br/>
------------------------------------------------------------------------
<a href="${pageContext.request.contextPath }/abc/implment_test">继承Action</a>
<br/>
------------------------------------------------------------------------
<a href="${pageContext.request.contextPath }/abc/extends_test">继承Action</a>
</body>
</html>
action包下
package xinfei.code.action;
public class ActionDemo01 {
public String execute(){
System.out.println("浏览器访问了...");
return "action";
}
}
package xinfei.code.action;
import com.opensymphony.xwork2.Action;
public class ActionDemo02 implements Action{
@Override
public String execute() throws Exception {
System.out.println("实现了action接口...");
return "action";
}
}
package xinfei.code.action;
import com.opensymphony.xwork2.ActionSupport;
public class ActionDemo03 extends ActionSupport{
@Override
public String execute() throws Exception {
System.out.println("继承actionsupport接口...");
return "action";
}
}