structs 2.x 框架的初步学习

一、使用 NetBeans 8.0.2 建立 struct2.x 框架环境

新建Java web项目,在框架选择的时候,勾选structs2。点击完成,即会生成名为 helloworld 的项目。

注意: NetBeans 8.0.2 中默认包含struct 1.3.10插件。要使用structs2框架,需要自己下载并安装structs2插件。

二、分析 struct2.x 框架

struct2.x 框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和业务逻辑组件。其中,核心控制器FilterDispatcher是由struct2.x 框架提供,而业务控制器和业务逻辑组件需要用户自己实现。3个部分的功能分别是:

核心控制器FilterDispatcher:负责拦截所有用户请求,如果用户的请求以action结尾,则该请求被转入 struct2.x 框架处理。

业务控制器:实现action类的实例,该类通常有一个能返回一个字符串形式的业务逻辑名的execute()方法,用于项目业务控制的实现。

业务逻辑组件:由 Javabean 或者 EJB 来实现,,用于项目业务逻辑的实现。

struct2.x 框架的工作流程:

当所有请求被核心控制器FilterDispatcher拦截的时候,FilterDispatcher会将请求转发给action代理,action代理会根据配置文件struct.xml决定转发给哪一个action。将请求转发给action的过程中,又会经过一些拦截器,这些拦截器负责将请求解析后转发给相应的action。接着,经过相应action中execute()处理后,即得到一个视图结果,根据该结果并结合相应模板就可以产生相应的输出流。输出流再经过一些拦截器之后,传送到了浏览器。

三、分析利用structs2框架生成的 helloworld 项目

helloworld.jsp 页面的内容:

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
    <head>
        <title><s:text name="HelloWorld.message"/></title>
    </head>

    <body>
        <h2><s:property value="message"/></h2>

        <h3>Languages</h3>
        <ul>
            <li>
                <s:url id="url" action="HelloWorld">
                    <s:param name="request_locale">en</s:param>
                </s:url>
                <s:a href="%{url}">English</s:a>
            </li>

            <li>
                <s:url id="url" action="HelloWorld">
                    <s:param name="request_locale">es</s:param>
                </s:url>

                <s:a href="%{url}">Espanol</s:a>

            </li>
        </ul>
    </body>
</html>

在上面代码中,元素<s:url>的 action 属性值必须是 struct.xml 配置过的请求名,即HelloWorld。

struct.xml 内容:

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
  <!--使用example.xml配置文件-->
  <include file="example.xml"/>
    <!-- Configuration for the default package. -->
    <package name="default" extends="struts-default">
    </package>
</struts>

example.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>
   <!--创建名为example的包,该包必须继承默认包-->
   <package name="example" namespace="/example" extends="struts-default">
        <!--配置helloworld请求action-->
        <action name="HelloWorld" class="example.HelloWorld">
            <result>/example/HelloWorld.jsp</result>
        </action>
    </package>
</struts>

元素<action>中属性name表示请求的名称(HelloWorld),class表示处理该请求的具体执行类(example.HelloWorld)。

HelloWorld.java 内容:

/*
 * $Id: HelloWorld.template,v 1.2 2008-03-27 05:47:21 ub3rsold4t Exp $
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package example;

import com.opensymphony.xwork2.ActionSupport;

/**
 * <code>Set welcome message.</code>
 */
public class HelloWorld extends ActionSupport {

    public String execute() throws Exception {
        setMessage(getText(MESSAGE));
        return SUCCESS;
    }

    /**
     * Provide default valuie for Message property.
     */
    public static final String MESSAGE = "HelloWorld.message";

    /**
     * Field for Message property.
     */
    private String message;

    /**
     * Return Message property.
     *
     * @return Message property
     */
    public String getMessage() {
        return message;
    }

    /**
     * Set Message property.
     *
     * @param message Text to display on HelloWorld page.
     */
    public void setMessage(String message) {
        this.message = message;
    }
}

HelloWorld.java文件就是对应名为 HelloWorld 的action。上面代码,实现了相应的业务逻辑组件。

注意:HelloWorld.message 定义在package.properties和package_es.properties两个文件中。

项目运行结果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 18:13:22

structs 2.x 框架的初步学习的相关文章

框架的初步学习

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn"> <head> <met

DXUT 初步学习 框架初识

初识DXUT 什么是DXUT 这个概念性的东西,不同的人不同的理解,总的来说还是比较简单的D3D小框架,对D3D的一个简单的封装,可以理解成一个类库.微软作用,可以更好的展示D3D的功能和新发布的特性:游戏开发者作用,可以更快更轻巧的展示模型结果,检验算法效果:学习者作用,可以是一个入门的精巧例子,由于D3D的例子大部分都是利用DXUT的,所以可以更快的学习D3D SDK中的例子,加速学习过程. 现在的DXUT 现在的DXUT主要有D3D9 D3D10和D3D11三个版本,可以看出来D3DX的版

LinQ的初步学习与总结

嘿嘿,说起来ORM和LinQ,就感觉离我好遥远的,在学校是没有学习的,所以总感觉学习了LinQ就是大神,现在嘛,终于也体会一点,感觉LinQ只是初步学习,没有太难,当然以后使用在项目中就没有这样的简单啦,下面就全面的总结一下LinQ的其中一部分,LinQ有三部分:LinQ TO Object:LinQ TO SQL ;LinQ TO XML.而在这里我先来总结一下LinQ TO Object的学习吧 一.初步认识LinQ to Object static void Main(string[] a

Java深度历险(三) Maven初步学习

这几天接触这个词,很多遍了,只是浅显的体会到它在GXPT中的好处,功能之强大,又通过网络查询了资料进一步的认识学习了,和大家分享. Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 在gxpt中的体现 1. 父子关系 一个多模块项目通过一个父POM 引用一个或多个子模块来定义. a. 在父目录中分别创建子项目 b. 父项目,通过以下配置,将子项目关联: 如下: <span style="font-size:18px;"

JavaScript模块加载框架sea.js 学习一

简单总结sea.js 学习 文件目录结构 /sea/sea.js      下载地址  http://seajs.org/docs/#downloads /sea/jquery-sea.js   下载地址 http://jquery.com/download/ /sea/sea_config.js /sea/home.jsdata.js /sea/data.js 1.html页面代码文件 <style> .ch{height:200px;width:200px;background:#ccc;

Node.js笔记(0003)---Express框架Router模块学习笔记

这段时间一直有在看Express框架的API,最近刚看到Router,以下是我认为需要注意的地方: Router模块中有一个param方法,刚开始看得有点模糊,官网大概是这么描述的: Map logic to route parameters. 大概意思就是路由参数的映射逻辑 这个可能一时半会也不明白其作用,尤其是不知道get和param的执行顺序 再看看源码里面的介绍: Map the given param placeholder `name`(s) to the given callbac

Jquery Easy UI初步学习(二)datagrid的使用

第一篇学的是做一个管理的外框,接着就是数据datagrid绑定了,这里我用asp.net mvc3来做的,主要就是熟悉属性.方法. 打开easyui的demo 就可以看到如下一段代码: 和上篇一样class="easyui-datagrid", data-options="...",这是一样的,其他我在网上查了查,并做了整理 DataGrid 属性 参数名 类型 描述 默认值 title string Datagrid面板的标题 null iconCls strin

初步学习C++:C++的基本概念

开始学习C++,先从最基本的概念开始,让自己有一个系统的知识概念. 1.对象: 在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体.对象可以认为是:数据+操作(对象所能完成的操作表示它的动态行为,也成为方法). 2.类: 在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,类是对具有相同数据结构和相同操作的一类对象的描述. 3.消息: 在面向对象程序设计中,一个对象向另一个对象发出的请求被称为"消息".当对象接收到发向它的

初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: 1 var fs = require('fs'); 2 var tel = [ 3 "1/2/4/6/a.tpl.html", 4 "1/2/4/7/9/c.tpl.html", 5 "1/3/5/8/b.tpl.html"]; 6 var demo = function (mulu)