`

从头学起:struts2(1)

阅读更多

从头学起:struts2(1
从页面跳转说起:先看一个例子,使用通常的方式进行页面跳转。
建立如下两个页面:
first.jsp:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title> first </title>
    </head>
    <body>
        <h1>这里是:first.jsp </h1>
        <s:form action="second.jsp">
            <s:submit value="提交到second.jsp" />
        </s:form>
    </body>
</html>
second.jsp:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>second</title>
    </head>
    <body>
        <h1>这里是:second.jsp!</h1>
        <s:a href="first.jsp">点击这里转到first.jsp</s:a>
    </body>
</html>

在first.jsp中使用submit提交form表单的方式跳转到secont.jsp页面,而second.jsp页面使用超链接的方式跳转到了first.jsp页面。在上面的页面中,我们使用了struts2的标签。
这样的方式造成了页面之间的紧密耦合,当页面众多时,会造成非常复杂的耦合关系;如果涉及到数据层的话还会造成页面和数据层的紧密耦合,不符合分层原则。
下面我们使用strts2的结构进行页面跳转。首先我们创建一个struts.xml文件(当然应该先导入struts2框架所需的包,导入那些包网上搜一下即可):
<struts>
    <package name="default" extends="struts-default">
        <action name="second" class="action.myAction">
            <result name="msg">/second.jsp</result>
        </action>
        <action name="first" class="action.myAction">
            <result name="msg">/first.jsp</result>
        </action>
    </package>
</struts>

文件中主要的标签是:<action>,其name属性表示页面发出的请求“信号”,class属性表示控制中心接收到请求“信号”后应该作出的“动作”,其值为包名加类名;<action>的子标签<result>表示“动作”的“结果”,其属性name表示接收到的“动作”的“结果”,标签里的文本表明应跳转的“方向”。由此可以解读文件中的第一段内容:当接收到一个名为:“second”的信号后,执行“action”包中的“myAction”动作,当返回一个“msg”字符串时跳转到second.jsp页面。文件中的第二段内容以此类推。
但是谁会把“信号”送过来呢?答案是web.xml文件,我们在其中添加如下内容:
<filter>
        <filter-name>struts2</filter-name>        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
上面文本表示:系统中有一个名为struts2的过滤器,要对发出了“*.action”或“*.jsp”的请求,将此请求发送到struts.xml进行匹配,其中“*”为通配符。
接着我们创建一个包:action,在包中创建一个action类:myAction,代码如下:
package myaction;
public class myAction {   
    public String execute() throws Exception {
        return "msg";
    }
}

为了简单起见,不论什么情况一律返回一个“msg”字符串。运行一下项目,就会得到和原来一样的效果。但是怎么知道这样的跳转是经过了“控制”的呢?我们不妨将struts.xml中的语句:
<result name="msg">/second.jsp</result>
改为:
<result name="msg">/third.jsp</result>
于是当页面发出“second.jsp”请求时,经过“控制”后,到达了“third.jsp”。
完成了跳转的任务后,还有一个问题没有解决:数据传输,我们常常需要在页面跳转的时候进行数据的传输。下面我们看一下struts2怎么样进行数据的传输。
首先修改first.jsp:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>first</title>
    </head>
    <body>
        <s:form action="myaction.action">
            <s:textfield name="userName" label="姓名"/>
            <s:password name="userPassword" label="密码" />  
            <s:submit value="提交"/>
        </s:form>
    </body>
</html>

在这里我们将action属性的值按照通常的做法,写成和action类相近的名称,扩展名一律为:.action。
在action类中做如下修改:
package myaction;

import com.opensymphony.xwork2.ActionContext;

public class myAction {
    private String userName;
    private String userPassword;
    private String mymsg;
    public String execute() throws Exception {
        ActionContext.getContext().getSession().put("user", getUserName());
        ActionContext.getContext().getSession().put("pass", getUserPassword());
        mymsg="欢迎"+userName+"来访!";
        return "msg";
    }

   public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPassword() {
        return userPassword;
    }
    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }
    public String getMymsg() {
        return mymsg;
    }
}
action类通过其属性userName、userPassword、mymsg与页面进行数据交换,注意与页面的控件name的值一定相同。同时又可以通过action上下文的Session对象进行数据传输。
修改second.jsp以接收经过“控制”中心处理过的数据:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>second</title>
    </head>
    <body>
        <h1>欢迎,${sessionScope.user},您已经登录!${sessionScope.pass}</h1>
        <h2><s:property value="mymsg"/></h2>       
        <s:a href="first.jsp">点击这里转到first.jsp</s:a>
    </body>
</html>
jsp文件使用了两种方式接收来自action的数据。

 

分享到:
评论
1 楼 rdz09 2012-09-23  
解析得很详细,不错

相关推荐

    Photoshop从头学起

    教程名称:Photoshop从头学起课程目录:【】Photoshop从头学起第(1-10)【】Photoshop从头学起第(11-20)【】Photoshop从头学起第(21-30)【】Photoshop从头学起第(31-40)【】Photoshop从头学起第(41-50)【】Photoshop...

    语言程序设计资料:struts2基本配置使用手册.doc

    本文将引导读者从头开始使用 Struts 2.0,包括搭建开发和运行环境、将 Struts 2.0 lib 下的 jar 文件添加到工程的构建路径、修改 web.xml 文件、创建 struts.xml 文件等步骤。 首先,需要下载 Struts 2.0 包并将其...

    struts2_doc

    5. **结果类型(Result Types)**:Struts2允许定义不同的结果类型,如dispatcher(转发到一个JSP页面),stream(直接输出流,如文件下载),freemarker或velocity(模板引擎渲染)等,可以根据需求选择合适的输出...

    Struts 从头开始学习

    Struts 从头开始学习 基于Myeclipse 是一些网页形式的 另存为的

    struts2 Interceptor拦截器

    2. **如何实现**:Struts2提供了一个灵活的Interceptor框架,开发者可以通过实现Interceptor接口来自定义拦截器,也可以通过继承已有的拦截器实现来进行扩展。 3. **配置方式**:Interceptor的配置通过Struts2的配置...

    struts2的autocomplete控件 源代码 亲自写的 可用

    5. 自定义标签库:Struts2支持自定义标签,你可能能从源码中学习到如何创建和使用自定义标签实现autocomplete效果。 为了充分利用这个资源,你需要有一定的Java和Struts2基础,同时熟悉JSP、Servlet和JSON等Web开发...

    Photoshop从头学起42.flv

    Photoshop从头学起42.flv

    struts2框架详细搭建教程

    通过本教程的学习,你应该能够掌握如何从头开始搭建一个基本的Struts2项目,并了解如何配置和测试Struts2框架。这对于初学者来说是一个很好的起点,后续可以通过添加更多的功能和组件来进一步扩展和优化你的应用。...

    Struts 入门 程序注释详细 程序源代码

    4. **拦截器**:Struts 2引入了拦截器,这是一个强大的功能,允许在请求到达Action之前或之后执行额外的逻辑。 通过深入研究这些源代码和注释,你将能够逐步掌握Struts框架,并具备开发实际项目的能力。记得动手...

    Struts框架详解.doc

    - **提高开发效率**:Struts框架提供了一套预定义的架构,开发者可以快速构建应用,而无需从头开始编写基础架构代码。 - **代码复用**:通过MVC模式,Struts鼓励代码分离,使得模型、视图和控制器可以独立重用,降低...

    Struts培训教程讲义

    - **MVC设计模式**:Struts遵循模型-视图-控制器(Model-View-Controller, MVC)的设计模式,这有助于将业务逻辑、数据展示和用户交互分离,使得应用程序更加模块化和易于维护。 - **基于Servlet和JSP API**:Struts...

    一个配置好的Struts2的jar包

    2. **Interceptor配置**:Struts2的拦截器可以实现如权限检查、日志记录等功能。例如,添加一个验证拦截器: ```xml &lt;interceptor name="validation" class="org.apache.struts2.interceptor.validation....

    从头开始学Oracle11gRelease2视频教程(15集)

    教程名称:从头开始学Oracle 11g Release 2 视频教程(15集)课程目录:【】Oracle11gRelease2视频教程_1【】Oracle11gRelease2视频教程_2【】Oracle11gRelease2视频教程_3【】Oracle11gRelease2视频教程_4【】...

    struts-2.1.6 项目基础包

    1. **struts2-core.jar**:这是 Struts 2 的核心库,包含了框架的基本组件,如 Action、Result、Interceptor 等。 2. **xwork-core.jar**:XWork 框架是 Struts 2 的基础,提供了类型转换、数据绑定、异常处理等...

    Struts2教程

    Struts2并非从头开始创建的新框架,而是基于WebWork进行了进一步的发展和改进。因此,它的核心功能和设计思想深受WebWork的影响。Struts2的主要目标是简化Web应用的开发,并通过强大的拦截器机制和插件架构提供了...

    struts 2 基础2__继承ActionSupport完成输入校验

    在`Struts2Demo1`这个项目中,我们可以看到上述这些组件的实现,通过运行项目,可以了解Struts2如何处理输入校验和流程控制。这为开发者提供了一个良好的学习起点,有助于理解和掌握Struts2框架的输入验证机制。

    Struts in Action

    - **Struts实现Model2和MVC**:Struts采用了Model2设计模式,这是一种基于MVC的设计模式变体,其中控制器处理用户请求并调用业务逻辑,视图负责显示数据。Struts将这种模式应用于Web应用程序中,使得视图与业务逻辑...

    Struts:The Complete Reference

    1. **Struts框架概述**:解释了Struts的核心概念,包括它如何简化MVC架构的实现,以及如何通过配置文件(struts-config.xml)来定义应用程序的行为。 2. **控制器组件**:深入讨论了ActionServlet,它是Struts的...

    PhotoshopCS从头学起视频教程【84集】

    资源名称:Photoshop CS从头学起视频教程【84集】资源目录:【】PhotoshopCS视频教程1-10【】PhotoshopCS视频教程11-28【】PhotoshopCS视频教程29-40【】PhotoshopCS视频教程41-56【】PhotoshopCS视频教程57-70【】...

    struts快速入门

    1. **Struts**:Struts 是一种基于 Java 的开源框架,主要用于构建企业级的 Web 应用程序。 2. **Web框架**:Struts 作为一种 Web 框架,它提供了处理 HTTP 请求、响应的一整套机制,使得开发者能够更加专注于业务...

Global site tag (gtag.js) - Google Analytics