`
SIHAIloveYAN
  • 浏览: 119962 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

struts2教程(2)--配置

 
阅读更多

Struts2配置

一、Struts2配置文件加载顺序

struts2 配置文件 由核心控制器加载 StrutsPrepareAndExecuteFilter (预处理,执行过滤)

            init_DefaultProperties(); // [1]   ----------  org/apache/struts2/default.properties

            init_TraditionalXmlConfigurations(); // [2]  --- struts-default.xml,struts-plugin.xml,struts.xml

            init_LegacyStrutsProperties(); // [3] --- 自定义struts.properties

            init_CustomConfigurationProviders(); // [5]  ----- 自定义配置提供

            init_FilterInitParameters() ; // [6] ----- web.xml

            init_AliasStandardObjects() ; // [7] ---- Bean加载 


结论

1、default.properties 该文件保存在 struts2-core-2.3.7.jarorg.apache.struts2包里面 (常量的默认值)

2、struts-default.xml 该文件保存在 struts2-core-2.3.7.jar Bean、拦截器、结果类型 )

3、struts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jar (在插件包中存在 ,配置插件信息 )

4、struts.xml 该文件是web应用默认的struts配置文件 (实际开发中,通常写struts.xml

5、struts.properties 该文件是Struts的默认配置文件 (配置常量)

6、web.xml 该文件是Web应用的配置文件(配置常量)

后加载文件中struts2常量会覆盖之前加载文件 常量内容

二、Struts2Action配置

1)必须要为<action>元素 配置<package>元素 (struts2围绕package进行Action的相关配置 )

配置package 三个常用属性

<package name="default" namespace="/" extends="struts-default">

1、name 包名称,在struts2的配置文件文件中 包名不能重复 ,name并不是真正包名,只是为了管理Action

2、namespace <action>name属性,决定Action的访问路径 (以/开始 )

3、extends 继承哪个包,通常开发中继承 struts-default包 (struts-default包在struts-default.xml定义 ),例如,如果需要使用json,则需要继承json的包。

继承struts-default包后,可以使用 包中定义拦截器和结果类型


2Action的通过<action>元素配置

<action name="hello" class="com.sihai.struts2.demo1.HelloAction">

<action>name<package>namespace属性 共同决定Action的访问路径 !!!!!!!!

例如

<package name="default" namespace="/user" extends="struts-default">

   <action name="hello" class="com.sihai.struts2.demo1.HelloAction">

访问路径 /user/hello.action


3) <action> 元素配置默认值

<package> namespace默认值 “”

<action> class默认值 ActionSupport

<result> name默认值 success

默认ActionAction的默认处理类

1) 默认Action, 解决客户端访问Action不存在的问题 ,客户端访问ActionAction找不到,默认Action就会执行

  <default-action-ref name="action元素的name" />


2) 默认处理类 ,客户端访问Action,已经找到匹配<action>元素,但是<action>元素没有class属性,执行默认处理类

 <default-class-ref class="完全类名" />


*struts-default.xml配置默认处理类 ActionSupport

三、Struts2的常量配置


1struts2默认常量 在 default.properties中配置


2) 开发者自定义常量

struts.xml (要求)

格式 <constant name="struts.devMode" value="true" />


struts.properties (要求)

格式 struts.devMode = true


web.xml

格式

	<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

<init-param>

<param-name>struts.devMode</param-name>

<param-value>true</param-value>

</init-param>

</filter>


3) 常用常量

	<constant name="struts.i18n.encoding" value="UTF-8"/>  ----- 相当于request.setCharacterEncoding("UTF-8"); 解决post请求乱码

        <constant name="struts.action.extension" value="action"/>  --- 访问struts2框架Action访问路径 扩展名 (要求)

        struts.action.extension=action,, 默认以.action结尾扩展名 和 不写扩展名 都会分发给 Action

        <constant name="struts.serve.static.browserCache" value="false"/> false不缓存,true浏览器会缓存静态内容,产品环境设置true、开发环境设置false

        <constant name="struts.devMode" value="true" />  提供详细报错页面,修改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>
	<package name="default" namespace="/" extends="struts-default">

		<!-- <default-action-ref name="default" /> --> <!-- 处理其它的action处理不了的请求路径 -->

		<default-class-ref class="com.sihai.action.DefaultAction" /><!-- 
			用于设置action默认处理类 -->

		<action name="good">
			<result>/index.jsp</result>
		</action>
		<action name="hello" class="com.sihai.action.HelloAction">
			<result>/hello.jsp</result>
		</action>

		<action name="default" class="com.sihai.action.DefaultAction">
			<result>/default.jsp</result>
		</action>
	</package>

</struts>


四、struts2 配置文件分离

通过 <include file="struts-part1.xml"/> struts2 配置文件 拆分


五、Action

HTTP请求 提交 Struts2 StrutsPrepareAndExecuteFilter核心控制器 ------请求分发给不同Action

Action书写的的三种格式

第一种 Action可以是POJO ((PlainOldJavaObjects)简单的Java对象)---- 不需要继承任何父类,实现任何接口

struts2框架 读取struts.xml获得 完整Action类名

obj = Class.forName("完整类名").newInstance();

Method m = Class.forName("完整类名").getMethod("execute"); m.invoke(obj);通过反射 执行 execute方法

第二种 编写Action 实现Action接口

Action接口中,定义默认五种 逻辑视图名称

public static final String SUCCESS = "success"; // 数据处理成功 (成功页面)

public static final String NONE = "none"; // 页面不跳转 return null;效果一样

public static final String ERROR = "error"; // 数据处理发送错误(错误页面)

public static final String INPUT = "input"; // 用户输入数据有误,通常用于表单数据校验 (输入页面)

public static final String LOGIN = "login"; // 主要权限认证(登陆页面)

第三种 编写Action 继承ActionSupport (推荐)

Action中使用 表单校验、错误信息设置、读取国际化信息 三个功能


六、Action的配置method(通配符)

1) 在配置 <action>元素时,没有指定method属性, 默认执行Action类中execute方法

  <action name="request1" class="com.sihai.struts2.demo3.RequestAction1" />


2) 在<action>元素内部 添加 method属性,指定执行Action中哪个方法

<action name="regist" class="cn.itcast.struts2.demo4.RegistAction" method="regist"/> 执行 RegistAction 的regist方法


将多个请求 业务方法 写入到一个Action类中

	<action name="addBook" class="com.sihai.struts2.demo4.BookAction" method="addBook" ></action>

        <action name="delBook" class="com.sihai.struts2.demo4.BookAction" method="delBook" ></action>   


3) 使用通配符*,简化struts.xml配置

	<a href="${pageContext.request.contextPath }/user/customer_add.action">添加客户</a>

<a href="${pageContext.request.contextPath }/user/customer_del.action">删除客户</a>


struts.xml

<action name="customer_*" class="com.sihai.struts2.demo4.CustomerAction" method="{1}"></action>   ---  {1}就是第一个* 匹配内容


七、动态方法调用

访问Action中指定方法,不进行配置

1) 在工程中使用 动态方法调用 ,必须保证 struts.enable.DynamicMethodInvocation = true常量值 为true

2) 在action的访问路径 中 使用"!方法名"

页面

<a href="${pageContext.request.contextPath }/user/product!add.action">添加商品</a>


配置

<action name="product" class="com.sihai.struts2.demo4.ProductAction"></action>


执行 ProductAction 中的 add方法



八、Action访问Servlet

1、 在Action中解耦合方式 间接访问 Servlet API ---------使用 ActionContext对象

struts2 Action API 已经与Servlet API 解耦合 (没有依赖关系 )

Servlet API 常见操作 : 表单提交请求参数获取,向requestsessionapplication三个范围存取数据

actionContext = ActionContext.getContext();

1) actionContext.getParameters(); 获得所有请求参数Map集合

2) actionContext.put("name", "sihai"); / actionContext.get("company")request范围存取数据

3) actionContext.getSession(); 获得session数据Map,对Session范围存取数据

4) actionContext.getApplication(); 获得ServletContext数据Map,对应用访问存取数据

package com.sihai.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

//获取servlet api  通过ActionContext获取
public class ServletDemo1Action extends ActionSupport {

	@Override
	public String execute() throws Exception {
		// 1.获取ActionContext
		ActionContext context = ActionContext.getContext();

		// 2.获取Servlet api

		// 2.1 获取application中数据
		// Map<String, Object> applicationMap = context.getApplication();
		// System.out.println(applicationMap.get("aname"));
		//
		// // 2.2 获取session中数据
		// Map<String, Object> sessionMap = context.getSession();
		// System.out.println(sessionMap);
		//
		// // 2.3 获取请求参数
		// Map<String, Object> paramMap = context.getParameters();
		// //request.getParameterMap();
		// System.out.println(((String[])paramMap.get("username"))[0]);

		// 2.4 向request范围存储数据
		context.put("username", "tom");

		// context.get("username");

		return SUCCESS;
	}
}


2、 使用接口注入的方式,操作Servlet API(耦合)

ServletContextAware : 注入ServletContext对象

ServletRequestAware :注入 request对象

ServletResponseAware : 注入response对象

package com.sihai.action;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

//获取servlet api  通过注入方式
public class ServletDemo2Action extends ActionSupport implements
		ServletRequestAware {

	private HttpServletRequest request;

	@Override
	public String execute() throws Exception {

		System.out.println(request.getParameter("username"));

		return null;
	}

	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
}


3、 在Action中直接通过ServletActionContext 获得Servlet API

ServletActionContext.getRequest() : 获得request对象 (session

ServletActionContext.getResponse() : 获得response对象

ServletActionContext.getServletContext() : 获得ServletContext对象

静态方法没有线程问题,ThreadLocal


package com.sihai.action;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

//获取servlet api  通过ServletActionContext获取
public class ServletDemo3Action extends ActionSupport {

	@Override
	public String execute() throws Exception {
		HttpServletRequest request = ServletActionContext.getRequest();

		System.out.println(request.getParameter("username"));
		return SUCCESS;
	}

}


九、Result结果类型

Action处理请求后, 返回字符串(逻辑视图名),需要在struts.xml提供 <result>元素定义结果页面

1、 局部结果页面 和 全局结果页面

<action name="result" class="com.sihai.struts2.demo6.ResultAction">

   <!-- 局部结果  当前Action使用 -->

  <result name="success">/demo6/result.jsp</result>

</action>

 

<global-results>

<!-- 全局结果 当前包中 所有Action都可以用-->

<result name="success">/demo6/result.jsp</result>

</global-results>

2、 结果页面跳转类型

* struts-default.xml定义了 一些结果页面类型

* 使用默认typedispatcher转发 (request.getRequestDispatcher.forward

1) dispatcher Action转发给 JSP

2) chain Action调用另一个Action(同一次请求)

<result name="success" type="chain">hello</result>  hello是一个Action的name


3redirectAction重定向到JSP

4redirectActionAction重定向到另一个Action

<result name="success" type="redirectAction">hello</result>



分享到:
评论

相关推荐

    Struts教程-------

    本文主要讲解什么是Struts Framework,它的框架结构,组件结构,以及简单的配置讲解。 文章的包括了如下七大部分: Framework的概念和体系简介 Struts的概念和体系结构 Struts的工作原理和组件 Struts配置文件简介 ...

    struts2-tags-文档.rar

    "struts2.chm"可能是Struts2的基础教程,涵盖了框架的基本概念、配置、动作、拦截器等核心组件。在这个文档中,你可以了解到如何设置Struts2的配置文件,如何创建Action类,以及如何使用拦截器进行业务逻辑处理。...

    struts2-2.0.14

    而`struts-2.0.14`可能是一个包含其他Struts2相关组件或配置文件的目录,例如配置文件(struts.xml)、示例应用或者额外的插件。 总的来说,Struts2-2.0.14版本的发布,为开发者提供了一个稳定且功能丰富的平台,...

    Struts2视频教程

    - **Hello Struts2**:通过创建一个简单的“Hello World”示例,帮助开发者快速上手Struts2的基本配置和运行流程。 - **Action类详解**:Action类是Struts2的核心组件之一,负责处理用户的请求并返回相应的结果。...

    struts2官方例子12--主题的使用

    本教程将深入讲解Struts2中的主题和皮肤功能,基于官方示例12进行解析。 首先,我们需要理解“主题”和“皮肤”的概念。在Struts2中,主题是一组皮肤的集合,而皮肤则是一个具体的样式表(CSS)文件,用于定义页面...

    Struts---------教程.rar

    Struts 是一个开源的Java Web框架,由Apache软件基金会维护,主要用于...通过阅读《Struts教程.doc》,你将能全面了解Struts的各个方面,包括安装配置、基本概念、实战示例等,从而在实际项目中更好地运用Struts框架。

    struts2官方例子3--使用Struts2标签

    本教程将深入讲解Struts2官方例子3,主要关注如何使用Struts2提供的标签。 一、Struts2标签库概述 Struts2的标签库是基于JSP标准标签库(JSTL)的扩展,提供了丰富的标签来处理表单、验证、国际化等功能。这些标签...

    Struts2漏洞检测包---面工具手工检测

    - 对于想要深入了解Struts2框架及其安全性的读者,建议参考Apache官方文档、OWASP等权威机构发布的指南和教程。 - 除了手工检测之外,还可以考虑使用自动化扫描工具来提高检测效率,例如Nessus、OpenVAS等。 - 在...

    javastruts2入门学习实例--用户注册和用户登录整合.rar

    - `struts.xml`是Struts2的主配置文件,用于定义Action类、结果类型、拦截器等。 - `struts.properties`配置全局属性,如开发环境设置、错误页面等。 4. **Action类**: 每个Action类对应一个特定的用户操作,...

    struts2教程.rar

    在“Struts2教程.chm”中,可能涵盖了Struts2的基础概念、配置、Action、Interceptor、Result、OGNL、国际化、异常处理、插件使用等方面的详细内容,对于初学者和进阶者都是极好的参考资料。而“打开方式.htm”可能...

    自学传智博客struts2-黎活明-源码-第02讲_02第一个struts2应用开发_DemoStruts2.rar

    通过实践这个教程,你不仅可以了解到Struts2的基础知识,还能掌握如何在实际项目中运用。这包括了从创建Action到配置Struts2,再到编写JSP页面的完整流程。同时,对Web工程目录结构的理解也对日后的开发工作大有裨益...

    struts 2教程资料

    Struts 2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,由Apache...提供的"struts 2资料"压缩包文件可能包含了相关的教程文档、示例代码和其他学习资源,可以作为学习过程中重要的参考资料。

    struts2学习之九---拦截器

    Struts2是一个强大的Java EE应用程序框架,主要用于构建Web应用程序。拦截器是Struts2的核心特性之一,它在MVC设计模式中...在学习过程中,可以参考官方文档、博客文章以及相关教程,加深对Struts2拦截器的理解和实践。

    Max的Struts2教程

    2. **配置文件**:Struts2的配置文件通常为struts.xml,用于定义Action类、结果页面、拦截器等。它可以声明Action的映射、参数、结果类型和拦截器栈。 3. **拦截器**:Struts2中的拦截器是AOP(面向切面编程)的...

    Struts2——教程

    本教程将深入探讨Struts2的核心概念、架构以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优秀特性,并融合了WebWork框架的优点。Struts2的目标是提供一个...

    Struts2教程(完整)

    ### Struts2教程知识点概述 #### 一、Struts2框架简介 - **框架类别**: - **MVC框架**:Struts2属于MVC(Model-View-Controller)框架,这类框架主要包括Struts、WebWork、SpringMVC等。 - **事件驱动框架**:...

    struts2教程(完全版)

    本教程将深入讲解Struts2的基础知识,帮助初学者快速掌握这一强大的框架。 一、Struts2的准备工作 1. **安装与实例**: 在开始使用Struts2之前,需要下载Struts2的发行包,例如`struts-2.1.6-all.zip`。解压缩后...

    Struts2教程

    Struts2 Struts2 Struts2 教程 1 1 1 :第一个 Struts2 Struts2 Struts2 程序 在本系列教程中我们将学习到 Struts2 的各种技术。在本教程中使用的工具和程序库的版本 如下: 开发工具: MyEclipse6 Web 服务器: ...

    Struts2官方例子3--Action的编写

    本教程将深入讲解如何在Ant环境下编写Struts2的Action。 首先,Action是Struts2中的控制器,它接收到用户的请求,执行相应的业务逻辑,并决定如何响应用户。Action类通常需要继承自`...

    Struts2教程.chm,Struts2教程.chm

    - Struts2的配置主要在struts.xml文件中进行,包括Action配置、Result配置、拦截器配置等。 - 动态方法访问(Dynamic Method Invocation,DMI)允许直接通过URL调用Action的方法。 4. **Action和Result** - ...

Global site tag (gtag.js) - Google Analytics