`

struts2学习

阅读更多
4.包配置

包的属性 name |extends | namespace |abstract

struts2的配置文件是从上到下处理的,所以父包应该在子包前面。

抽象包不能有Action的定义。

如果没有为包指定命名空间,包使用默认的命名空间””

当某个包指定命名空间后包下所有的Action处理的URL应该是命名空间+ACTION名。

<package namespage=”/book” extends=”struts-default” name=”get”>

  <action name=”getBook” class=”com.strutstest.GetBookAction”>

            <result name=”success”>showbook.jsp</result>

  </action>

</package>

访问该包里的getBook的Action的路径是(web应用的名称是strutstest)

http://localhost:8080/strutstest/book/getBook.action

如果请求为/book/getBook.action系统查找/book的命名空间对应的getBook的action

如果找不到,系统将会在默认命名空间里面找。如果找不到就出现系统错误。

如果请求为/login.action系统会在根命名空间”/”中查找名为login的action

如果找不到,系统将会在默认命名空间里面找。如果找不到就出现系统错误。



默认命名空间是”” 根命名空间是”/”

命名空间只有一个级别。



5.拦截器配置

拦截器结构

<interceptors>

<interceptor name=”拦截器名” class=”拦截器类名”/>

        <interceptor-stack  name=”拦截栈名”>

                            <interceptor-ref  name=”外面定义的拦截名”/>

                   </interceptor-stack>

     </interceptors>

   

Action中使用拦截器配置

<action name=”MyAction” class=”yilin.MyAction”>

<result name=”success”>myresult.jsp</result>

<interceptor-ref  name=”上面定义的拦截器名或者拦截栈名”/>

</action>



6.ActionSupport类解剖



public class ActionSupport implements Action,Validateable,ValidationAware,TextProvider,

LocaleProvider,Serializable



Action接口

public interface Action

{

                   public static final String ERROR=”error”;

                   public static final String INPUT=”input”;

                   public static final String LOGIN=”login”;

                   public static final String NONE=”none”;

                   public static final String SUCCESS=”success”;

                   public String execute ()throws Exception;

}



Validateable接口

public abstract interface Validateable

{

 

   public abstract void validate();

}

ValidationAware 接口

public abstract interface com.opensymphony.xwork2.ValidationAware

{

  //收集校验错误的方法

  public abstract void setActionErrors(java.util.Collection arg0);

  //返回校验错误的方法

  public abstract java.util.Collection getActionErrors();

//普通ACTION信息的集合

  public abstract void setActionMessages(java.util.Collection arg0);

  public abstract java.util.Collection getActionMessages();

//字段错误信息的集合

  public abstract void setFieldErrors(java.util.Map arg0);

  public abstract java.util.Map getFieldErrors();

//添加错误信息

  public abstract void addActionError(java.lang.String arg0);

  public abstract void addActionMessage(java.lang.String arg0);

  public abstract void addFieldError(java.lang.String arg0, java.lang.String arg1);

  public abstract boolean hasActionErrors();

public abstract boolean hasActionMessages();

  public abstract boolean hasErrors();

  public abstract boolean hasFieldErrors();

}

LocaleProvider接口

public abstract interface com.opensymphony.xwork2.LocaleProvider

{

//控制Locale的相关信息

  public abstract java.util.Locale getLocale();

}



TextProvider接口

public abstract interface com.opensymphony.xwork2.TextProvider

{

//返回国际化信息的方法

   public abstract java.lang.String getText(java.lang.String arg0);

   public abstract java.lang.String getText(java.lang.String arg0, java.lang.String arg1);

   public abstract java.lang.String getText(java.lang.String arg0, java.lang.String arg1, java.lang.String arg2);

   public abstract java.lang.String getText(java.lang.String arg0, java.util.List arg1);

   public abstract java.lang.String getText(java.lang.String arg0, java.lang.String[] arg1);

   public abstract java.lang.String getText(java.lang.String arg0, java.lang.String arg1, java.util.List arg2);

   public abstract java.lang.String getText(java.lang.String arg0, java.lang.String arg1, java.lang.String[] arg2);

   public abstract java.lang.String getText(java.lang.String arg0, java.lang.String arg1, java.util.List arg2, com.opensymphony.xwork2.util.ValueStack arg3);

   public abstract java.lang.String getText(java.lang.String arg0, java.lang.String arg1, java.lang.String[] arg2, com.opensymphony.xwork2.util.ValueStack arg3);

//返回国际化资源包的方法

   public abstract java.util.ResourceBundle getTexts(java.lang.String arg0);

   public abstract java.util.ResourceBundle getTexts();

}



7.ActoinContext类

static ActionContext getContext();获取系统的ActionContext实例

Object get(Object key)类似调用HttpServletRequest的getAttribute(String name)方法

Map getApplication();模拟ServletContext实例。

void setApplication(Map application)

Map getParameters();获取所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap方法。

Map getSession();模拟HttpSession实例。

void setSession(Map session);

好处是与容器解藕。



8.ServletActionContext 类,用来返回容器的对象

static PageContext getPageContext();

static HttpServletRequest getRequest();

static HttpServletResponse getResponse();

static ServletConext getServletContext();

缺点,与容器耦合,优点,可以操作容器对象。更加方便。

必须指出,虽然可以在Acation类中获取HttpServletResponse;但是不能通过它来生成服务器的相应。

9.ServletResponseAware接口

通过实现此接口的setServletResponse(HttpServletResponse response)的方法,可以获取HttpServletResponse对象。

由于Action不能用Response对象来生成服务器相应,但是可以通过该对象来设置COOKIE。



10.Action配置详解



10.1  ACTION 属性 name|class|method

在设置name属性时,不要为在name中加入”.”或”-”,可能会引发一些异常.

在设置name属性时如果需要在name属性中使用”/”,则必须配置常量:

struts.enable.SlashesInActionNames=true

class属性不是必需的.如果我们不为<action>元素指定class属性,系统则默认使用系统的ActionSupport类,该类的execute方法默认返回SUCCESS;



10.2  动态方法调用一

1.配置STRUTS2常量

struts.enable.Dynamic.MethodInvocation=true

2.通过在页面设置form的action属性:

<form action=”ActionName!methodName.action”>

如<form action=”Login!login.action”>

javascript 代码

function register()

{

  this.form.action = “Login!register.action”;

  this.form.submit();

}

10.3为action元素配置method属性将一个action类映射到多个逻辑action元素

<action name=”login” class=”struts.LoginAction”>

  <result name=”success”….../ >

<result name=”error”….../ >

</action>

<action name=”register” class=”struts.LoginAction” method=”register”>

……

</action>

10.4 在action中使用通配符(动态方法调用二)

    在action元素中的属性,result子元素都可以设置通配符

         <action name=”*Action” class=”lee.LoginAction” method={1}>

         ……

         </action>

有时需要在classs属性和method属性同时使用表达式

         <action name=”*_*” method={2} class=”actions.{1}”>

     利用通配符返回对应的jsp页面

         <action  name=”*”>

     <result>/{1}.jsp</result>

多个匹配结果的处理方式:

如果有URL为abcAction.action的请求,如果struts.xml文件中有名为abcAction的action元素则由此action处理,如果没有,则才去匹配有通配符”*Action”或者”*”的action.排在前面的action元素先匹配.我们应该把名为”*”的action排在最后面.



10.5 默认的Action

<default-action-ref name=”一个有效的action的名”/>



11.配置结果

局部结果:将<result …/>作为<action…/>的子元素

全局结果:将<result…/>作为<global-results…/>的子元素

result属性 name|type

result子元素 param

  子元素属性 name(location|parse)

eg

  <result name=”success” type=”dispatcher”>//type默认就是dispatcher

  <param name=”location”>/thank.jsp</param>

//通常无需要设置param所以直接输出/thank.jsp就可以

  </result>

从struts-default.xml中可以看到dispatcher是默认的

<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>

struts2内建的结果类型:

chain: action链式处理的结果类型

chart:用于整合JFreeChart的结果类型

dispatcher:jsp整合的结果类型

freemarker:Freemarker整合的结果类型

httpheader:控制特殊的HTTP行为的结果类型

jasper:用于JasperReports整合的结果类型

jsf:用于JSF整合的结果类型

redirect:用于直接跳转到其他URL的结果类型

redirect-action:用于直接跳转到其他ACTION的结果类型

stream:用于向浏览器返回一个InputStream(用于文件下载)

tiles:用于与Tiles整合的结果类型

velocity:用于与Velocity整合的结果类型

xslt:用于与XML/XSLT整合

plaintext:用于现实某个页面的原始代码的结果类型.这种结果类型一般用来从页面发送邮件.



plaintext类型详解

STRUTS2允许为plaintext设置相应的编码

eg <result type=”plaintext”>

<param name=”location”>go.jsp</param>

<param name=”charSet”>GBK</param>

</result>

redirect-action类型详解

配置redirect-action的参数

actionName 重定向的action的名

namespace 重定向的action的命名空间



redirect 与 redirect-action两种结果类型都是重新生成一个新的请求,区别是前者通常用于生成一个对具体资源的请求,而后者通常用于生成一个对其他ACTION的请求.两个结果类型都会丢失请求参数,请求属性以及前一个ACTION的处理结果.



动态视图结果

配置<result…/>时可以通过OGNL表达式来${属性名.属性名.属性名}

<result type=”redirect”>eidt.action?skillName=${currentSkill.name}</result>

<result name=”success”>/${target}.jsp</result>

其中currentSkill和target必须是action的属性名.也就是说action必须提供currentSkill和target的getter和setter



全局结果

         <struts>

                   <package name=”lee” extends=”struts-default”>

                            <global-results>

                            <result name=”success”>${target}.jsp</result>

                            </global-results>

                   </package>

                   <action …>….</action>

         </struts>



12模型驱动与属性驱动



模型驱动利用javaBean来封装请求参数和处理结果

属性驱动是直接在action中封装请求参数和处理结果.



模型驱动必须实现ModelDriven接口

public class xxxAction implements Action,ModelDriven

{

  public String execute()throws Exception

  {…}

  public Object getModel()

  {…}

}

struts-default.xml中

<interceptor name="model-driven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>

struts2通过model-driven拦截器将请求参数封装到模型驱动的(model)JAVABEAN中

<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

struts2通过params拦截器将请求参数封装到属性驱动的ACTION中



13异常处理

   struts2通过声明式异常捕获和处理

局部异常映射:

将<exception-mapping …/>作为<action…/>子元素

全局异常映射:

将<exception-mapping …/>作为<global-exception-mappings>的子元素

exception-mapping的属性

  exception|result

exception :异常类型

result:出异常时系统转入result属性所指向的结果

<struts>

<package name=”pack” extends=”struts-default”>

         <global-results>

                   <result name=”sql”>/exception.jsp</result>

                   <result name=”root”>/exception.jsp</result>

         </global-result>

         <global-exception-mappings>

                   <exception-mapping exception=”java.sql.SQLException” result=”sql”/>

                   <exception-mapping exception=”java.lang.Exception” result=”root”/>

         <global-exception-mappings>

         <action name=”login” class=”yilin.LoginAction”>

                   <result name=”my”>/exception.jsp</result>

                   <result name=”success”>/go.jsp</result>

<exception-mapping exception=”yilin.MyCustomException” result=”my”/>

         </action>

</package>

</struts>

输出异常

<s:property value=”exception”/>输出异常对象本身

<s:property value=”exception.message”/>输出异常信息

<s:property value=”exceptionStack”/>输出异常堆栈信息



struts-default.xml中定义的exception异常拦截器

<interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>
分享到:
评论

相关推荐

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    struts2学习小项目(很适合初学者)

    在这个名为"struts2学习小项目"的资源中,我们可以看到一个适用于初学者实践的实例,它结合了Oracle数据库,提供了一个从基础到实践的学习路径。 首先,了解Struts2框架的基本概念至关重要。Struts2的核心是Action...

    STRUTS2学习文档

    这个"STRUTS2学习文档"显然是一个关于如何理解和使用Struts2框架的教程资料,对于想要快速掌握Struts2核心概念和技术的开发者来说,它是一份非常有价值的资源。 Struts2框架的核心特点包括: 1. **拦截器...

    struts2学习心得

    ### Struts2学习心得:深入理解Struts2框架的基本配置与初学者指南 #### Struts2框架概述 Struts2是Struts框架的升级版本,它继承了Struts1的优点并在此基础上进行了改进,提供了更丰富的功能和更好的性能。Struts...

    Struts2学习笔记

    根据给定的文件信息,以下是对Struts2学习笔记中涉及的关键知识点的详细解析: ### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC...

    struts2学习笔记.doc

    ### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...

    struts2学习笔记(1)

    ### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...

    struts2 学习资料

    这个压缩包中包含的资源是学习Struts2的关键资料,帮助开发者深入理解和掌握这个框架。 首先,"struts2权威指南"是学习Struts2的核心参考资料,通常会涵盖框架的基本概念、核心组件、配置细节、MVC设计模式的应用...

    张龙圣思园struts2学习笔记word

    张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...

    STRUTS2站点,STRUTS2学习实例8

    这个"STRUTS2学习实例8"显然旨在深化对Struts2的理解和应用,通过具体的实战项目来教学。让我们深入探讨一下Struts2的关键概念和技术。 首先,Struts2的核心是Model-View-Controller(MVC)设计模式。MVC模式将应用...

    struts2学习测试代码,struts2学习测试代码2

    struts2学习测试代码,struts2学习测试代码2struts2学习测试代码,struts2学习测试代码

    struts2学习 源码

    本资料“struts2学习 源码”旨在帮助初学者理解Struts2的核心概念和工作原理,通过来自达内的详细代码实例来提供直观的学习体验。 Struts2框架的关键特性包括: 1. **动作(Action)**:在Struts2中,业务逻辑通常...

    在Eclipse中配置Struts2项目(html)手把手教会你 +struts2 标签库介绍(html) + STRUTS2学习文档.pdf + Struts2―表单验证validate(html) + struts2和struts的比较 + struts教程(html)

    STRUTS2学习文档.pdf 对Struts2的一些配置文件进行了详细的说明。 Struts2―表单验证validate(html)对validate的type属性校验类型以及param 做了详细的解释说明。 struts2和struts的比较 让你更清楚的知道struts2...

    Struts2学习小结

    ### Struts2学习小结 #### 一、Struts2简介及环境搭建 **Struts2** 是一款基于 **MVC**(Model-View-Controller)设计模式的开源框架,用于简化 Java Web 应用程序的开发过程。通过将业务逻辑、用户界面以及控制...

    Struts2 学习 2

    本教程“Struts2 学习 2”将深入探讨Struts2的核心概念和技术,通过一系列文档帮助你掌握这个框架的关键要点。 一、ActionContext的理解与应用 在“第九讲 ActionContext.docx”中,你将学习到ActionContext是...

    struts2学习笔记总结

    Struts2是一个强大的Java Web应用程序开发框架,基于Model-View-Controller(MVC)设计模式,为开发者提供了...然而,随着Spring Boot等现代框架的兴起,Struts2的使用逐渐减少,但其设计理念和技术仍值得学习和借鉴。

    Struts2学习资料(强烈推荐)

    这个“Struts2学习资料(强烈推荐)”包含的资源旨在帮助开发者深入理解并熟练掌握Struts2的核心概念和技术。 Struts2权威指南通常会涵盖以下几个主要知识点: 1. **MVC模式**:Struts2是基于Model-View-...

Global site tag (gtag.js) - Google Analytics