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

框架学习之Struts2 第二节 Action的详解

 
阅读更多

http://www.cnblogs.com/yinger/archive/2011/07/25/2116707.html

 

1.Action 名称的搜索顺序

它是对namespace从后面往前面的递推的搜索,如果当前的这个path组成的namespace不是一个package,那么就减少一个path继续搜索

如果是一个package,并且在那个package中找到了action就会执行,但是如果这个package下没有这个action,那么就会直接在默认的package中搜索

如果找到了就执行,如果还是没有,就提示找不到action

 

2. Action 配置中的各个默认值

action的class--->ActionSupport

action的method--->execute

result的name--->SUCCESS=”success”

 

3.Action中的result的各种转发类型

①dispatcher:默认的,内部请求转发

②redirect:浏览器重定向

③redirectAction:重定向到另一个action

④plainText:原样输出网页源代码,不执行Jsp

 

4.为action属性注入值

在action配置中为响应的action的类的属性赋值,同时可以在返回的结果视图中得到这个值

这个属性一定要提供set方法

 

5.指定struts2的请求

指定请求的后缀:修改常量struts.action.extension 的值,如果有多个后缀,可以使用逗号隔开

 

常量的定义:常量可以定义在多个配置文件中,但是由于加载常量的顺序原因,后面的文件的常量值会覆盖前面的常量值

建议在struts.xml中配置

 

几种常见的常量配置介绍

 

6. struts2的处理流程

这一部份很重要,解释一下:用户在地址栏里输入了url后,就向服务器发送了一个请求,根据 web.xml 中的配置找到
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

对应的类 StrutsPrepareAndExecuteFilter 来处理,它是框架的核心控制器,它负责拦截

<url-pattern>/*</url-pattern> (web.xml 中配置了)指定的用户请求

如果用户请求的路径合法(以默认的.action为后缀或者没有后缀),那么就会进入到框架中处理,进入之前还会经过一系列的拦截器

才会转到action类处理

如果路径不合法,那么此次请求失败

 

7.指定多个struts配置文件

<include file=”XXX.xml” />    分模块的管理

 

8. 动态指定调用action中的某个方法

有两种方式:第一种,动态方法调用,但是已经不建议使用

如果想关闭动态方法调用,可以在struts.xml中配置

<constant name=”struts.enable.DynamicMethodInvocation” value=”false”>

 

第二种方式,使用通配符定义action

action name=”helloworld_*”   method=”{1}”

如果请求的url尾是helloworld_execute,调用的是execute方法

如果是 helloworld_other,调用的是 other 方法

 

测试:

文档结构图

 

 代码展示:

XML 部分
[web.xml]
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <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>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

[struts.xml]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <include file="strutspackage.xml"></include>
</struts>

[strutspackage.xml]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="base" extends="struts-default">
        <global-results><!-- 全局视图 -->
            <result name="success">/sucess.jsp</result>
        </global-results>
        <action name="base">
            <result name="success">/base.jsp</result>
        </action>
    </package>

    <package name="yinger" namespace="/yinger" extends="struts-default">
        <action name="helloworld_*" class="com.yinger.HelloWorld"
            method="{1}">
            <param name="actionPara">{1}</param>
            <result name="message">/message.jsp</result>
        </action>
        <action name="helloworld" class="com.yinger.HelloWorld"
            method="helloworld">
            <result name="helloworld">/helloworld.jsp</result>
        </action>
    </package>

    <package name="redirect" extends="struts-default">
        <action name="redirect" class="com.yinger.HelloWorld"
            method="redirect">
            <result name="redirect" type="redirect">/helloworld.jsp?${message}</result>
        </action>
    </package>
    
    <package name="plaintext" extends="struts-default">
        <action name="plaintext" class="com.yinger.HelloWorld"
            method="plaintext">
            <result name="plaintext" type="plainText">
                <param name="location">/plainText.jsp</param>
                <param name="charSet">GBK</param>
            </result>
        </action>
    </package>
    
    <package name="itcast" namespace="/itcast" extends="base">
        <action name="itcast" class="com.itcast.ItCast" method="execute">
            <result name="message">/message.jsp</result>
        </action>
        <action name="redirectAction_samePackage" class="com.itcast.ItCast"
            method="redirectAction_samePackage">
            <result name="redirectAction_samePackage" type="redirectAction">
                <param name="actionName">itcast</param>
                <param name="namespace">/itcast</param>
            </result>    
        </action>
        <action name="redirectAction_otherPackage" class="com.itcast.ItCast"
            method="redirectAction_otherPackage">
            <result name="redirectAction_otherPackage" type="redirectAction">
                <param name="actionName">helloworld</param>
                <param name="namespace">/yinger</param>
            </result>
        </action>
    </package>

</struts>

  

Java部分
HelloWorld.java

package com.yinger;

public class HelloWorld {
    private String message;
    private String actionPara;
    
    public String helloworld(){
        message = "HelloWorld.helloworld!";
        return "helloworld";
    }
    
    public String hello(){
        message = "HelloWorld.hello!";
        return "message";
    }

    public String execute(){
        message = "HelloWorld.execute!";
        return "message";
    }
    
    public String redirect(){
        message = "HelloWorld.redirect!";
        return "redirect";
    }
    
    public String plaintext(){
        message = "HelloWorld.plaintext";
        return "plaintext";
    }
    
    public String getActionPara() {
        return actionPara;
    }

    public void setActionPara(String actionPara) {
        this.actionPara = actionPara;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

}


ItCast.java

package com.itcast;

public class ItCast {
    private String message;
    
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String execute(){
        message = "ItCast.execute!";
        return "message";
    }
    
    public String redirectAction_samePackage(){
        message = "redirectAction_samePackage";
        return "redirectAction_samePackage";
    }
    
    public String redirectAction_otherPackage(){
        message = "redirectAction_otherPackage";
        return "redirectAction_otherPackage";
    }
}

  

JSP部分
index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  
  <body>
    index.jsp <br>
  </body>
</html>

base.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'sucess.jsp' starting page</title>
    
  </head>
  
  <body>
    base--->success! <br>
  </body>
</html>

success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'sucess.jsp' starting page</title>
    
  </head>
  
  <body>
    sucess <br>
  </body>
</html>

helloworld.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'helloworld.jsp' starting page</title>
  </head>
  
  <body>
    HelloWorld.jsp! <br>
    ${message }
  </body>
</html>

message.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'message.jsp' starting page</title>
  </head>
  
  <body>
    ${message} <br />
    ${actionPara }<br/>
  </body>
</html>


plainText.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'plainText.jsp' starting page</title>
    
  </head>
  
  <body>
    
  </body>
</html>

   

测试结果:

1.http://localhost:8080/struts2test/base

 

2. http://localhost:8080/struts2test/yinger/helloworld_hello

 

3.http://localhost:8080/struts2test/yinger/helloworld_execute

 

4.http://localhost:8080/struts2test/yinger/helloworld

 

5.http://localhost:8080/struts2test/itcast/redirectAction_samePackage—>http://localhost:8080/struts2test/itcast/itcast

 

6.http://localhost:8080/struts2test/itcast/redirectAction_otherPackage—>http://localhost:8080/struts2test/yinger/helloworld

 

7.http://localhost:8080/struts2test/redirect/redirect—>http://localhost:8080/struts2test/helloworld.jsp?HelloWorld.redirect!

 

8.http://localhost:8080/struts2test/plaintext/plaintext

 

9.http://localhost:8080/struts2test/itcast/itcast

 

10.http://localhost:8080/struts2test/itcast/1234/5678/itcast

 

 
分享到:
评论

相关推荐

    struts2深入详解源码1-5章

    第二章可能会详细讨论Struts2的Action和Result。Action类是开发者实现业务逻辑的地方,它可以返回不同的Result类型,如JSP、FreeMarker或Velocity模板。Result则将Action的执行结果导向对应的视图,实现页面跳转。...

    Struts2.0框架技术详解

    #### 二、Struts2框架技术概述 **2.1 Struts1和Struts2的对比** Struts1与Struts2的主要区别在于: - **请求处理机制**:Struts1使用ActionForm作为请求的载体,而Struts2则采用拦截器机制。 - **配置方式**:...

    struts 2完全学习手册

    2. **熟悉Java Web基础知识**:了解Servlet、JSP等相关技术对于学习Struts 2是非常重要的。 3. **掌握Struts 2的基本结构**:从Action、拦截器、配置文件等方面入手,逐步深入框架内部。 4. **实践项目开发**:通过...

    实验指导\第二章Struts框架详解.doc

    在2个课时内,你将学习如何使用Struts框架构建一个用户登录系统,从而了解Struts中各部分如何协同工作。 ### 实验目标 1. **理解Struts控制器的作用**:控制器是Struts框架的核心组件,它负责接收HTTP请求,解析...

    Struts2_Action学习笔记、通配符{1},{2}

    ### Struts2_Action 学习笔记与通配符配置详解 #### 一、Struts2简介及简单配置 Struts2是一个基于Java EE平台的开源Web应用框架,它继承了Struts1的优点,并在此基础上进行了大量的改进。Struts2的核心功能之一是...

    struts2 in action

    ### Struts2 in Action:Java Web开发框架详解 #### Struts2:现代Web应用框架 本书《Struts2 in Action》旨在为读者提供一个全面、深入的Struts2框架介绍。Struts2作为一款功能强大的Java Web应用开发框架,不仅...

    Struts2.应用开发详解(第二讲).rar

    本教程“Struts2应用开发详解(第二讲)”是系列教程的一部分,共计五部分,我们将深入探讨Struts2的核心概念和技术。 在Struts2框架中,Model代表业务逻辑,View负责展示,而Controller则是这两者之间的协调者,处理...

    struts2学习

    这里的`{1}`表示Action方法名与请求路径中的第二个参数匹配。例如,如果请求路径为`/modules/car/update`,那么将调用`carAction`类中的`update`方法。 **2. 明确配置方式:** 另一种方式是在配置文件中明确指定每...

    Struts2 In Action

    - **第2章:向Struts2说你好**(第20页起) - **章节概述**:这一章通过一个简单的示例项目,引导读者快速入门Struts2。通过实际操作,读者可以直观地感受到Struts2框架的强大之处。 - **关键知识点**: - 快速...

    Struts2学习笔记2012

    Action是Struts2应用程序的核心组件之一,负责处理用户请求并返回响应。了解Action的生命周期和执行流程对于编写高效的应用程序至关重要。 #### 十、Struts2_结果类型 Struts2支持多种结果类型,包括`dispatcher`...

    Struts 2+Hibernate+Spring整合开发技术详解随书源码18

    在"Struts 2+Hibernate+Spring整合开发技术详解"中,作者蒲子明深入讲解了如何将这三个框架有效地结合在一起。第18章可能涉及的是项目整合的高级话题或者特定场景的应用,由于文件名只给出了“第18章”,具体章节...

    Struts 2+Hibernate+Spring整合开发技术详解 12~17章

    这本由蒲子明编著的《Struts 2+Hibernate+Spring整合开发技术详解》深入探讨了如何将这三个框架有效结合,以构建高效、模块化的Web应用。书中第12到17章的内容涵盖了以下几个关键知识点: 1. **Struts 2框架**: -...

    struts2API文档

    2. **第二章:环境搭建** - 指导如何配置开发环境,包括安装JDK、Apache Tomcat服务器,以及设置IDE。 3. **第三章:第一个Struts2应用** - 通过创建一个简单的“Hello, World!”示例来介绍基本的项目结构和配置。 4...

    Struts2.应用开发详解(第一讲)

    Struts2是一个强大的Java Web应用程序开发框架,基于Model-View-Controller(MVC)设计模式,旨在简化企业级Web应用...本讲解为第一讲,后续部分会深入探讨更多高级特性和实战案例,帮助你全面掌握Struts2框架的使用。

    Struts框架详解.doc

    Struts框架是Apache软件基金会开发的一个开源Web应用框架,专门用于...尽管如此,Struts仍然是理解和学习MVC模式以及Web应用框架设计的重要参考,对于初学者和有经验的开发者来说,都具有重要的历史价值和教育意义。

    黑马Struts2视频(day2)

    Struts2是Java Web开发中广泛使用的开源框架,它的出现为开发者提供了强大的MVC(Model-View-Controller)...在day01视频中,通常会涵盖基础的环境搭建和第一个简单的Struts2应用示例,为后续的学习打下坚实的基础。

    struts2详解

    ### Struts2详解 #### 一、Struts2概述与工作原理 Struts2是一个用于构建企业级Java Web应用的强大框架。它继承了Struts1的一些特性,并在此基础上进行了改进和扩展,支持更加灵活和强大的功能。Struts2基于MVC...

Global site tag (gtag.js) - Google Analytics