zoukankan      html  css  js  c++  java
  • struct2(二) struct2的hello world 程序

    在struct2 的web应用程序中,当你点击一个超链接或者提交一个HTML页面的时候,并不是直接的转向一个另一个的页面,而是转到你提供的一个Java 类。这个过程被称为一个action,一个action执行完毕之后,选择一个资源进行响应数据,(就是返回数据,选择页面展示数据)。结果常常是一个页面,也可能是一个PDF文见,一个Excel单据,或者一个Java应用程序。

    假设你想创建一个简单的用来展示欢迎信息的hello world程序,建好一个空的基础的struct2的web应用程序以后,接着创建一个hello world的例子,你需要做以下四件事情。

    1. 首先创建一个类来保存欢迎信息(这个就是展示的数据,模型,model)。

    2. 创建一个页面来展示数据(一般是一个html或者jsp文件,view)。

    3. 创建一个action,来控制用户,模型,展示之间的交互。

    4. 在structs.Xml中创建一个在action和view之间的交互。

    通过这些组件,我们正在把工作分为不同的部分,符合非常有名的MVC模型,这样的分离原则使复杂的应用变得更加的简单,下面我们利用在struct2(一)中的基本的struct2的工程,编码实现上面所说的。

    编码实现:

    我们把基本的structTest 增加一个model 类来存储我们的欢迎信息,一个展示页面来展示我们的信息。一个action作为controller,一个配置信息把一切结合起来。

    第一步:创建model Class  MessageStore.java

    package org.apache.struts.helloworld.model;
     
    public class MessageStore {
         
        private String message;
         
        public MessageStore() {
             
            setMessage("Hello Struts User");
        }
     
        public String getMessage() {
     
            return message;
        }
     
        public void setMessage(String message) {
     
            this.message = message;
        }
     
    }

    在上面的model Class中的get/set方法,提供对类私有成员message的操作方法。在struct2框架中要求view(jsp或者html页面)的展示的数据必须遵循  JavaBean-style conventions.原则。

    第二部: 创建action 类: HelloWorldAction.java

    我们需要一个action class 来作为controller。这个action类用来响应用户的操作(在这个例子中就是点击html页面的一个超链接,发送给servlet 容器一个特殊的URL),然后action 类中执行完毕以后,会返回一个String类型的信息,在这个结果行的信息的基础上,一个特殊的展示页面(在这个例子中为HelloWorld.jsp)响应了。

    具体的代码:

    package org.apache.struts.helloworld.action;
     
    import org.apache.struts.helloworld.model.MessageStore;
    import com.opensymphony.xwork2.ActionSupport;
     
    public class HelloWorldAction extends ActionSupport {
     
        private static final long serialVersionUID = 1L;
     
        private MessageStore messageStore;
       
        @Override
        public String execute() throws Exception {
             
            messageStore = new MessageStore() ;
            return SUCCESS;
        }
     
       
        public MessageStore getMessageStore() {
            return messageStore;
        }
     
        public void setMessageStore(MessageStore messageStore) {
            this.messageStore = messageStore;
        }
     
    }

    struct2 框架将会创建一个HelloWorldAction 类的实例,调用其中的execute 方法,来响应用户的操作(在这个例子中就是点击html页面的一个超链接,发送给servlet 容器一个特殊的URL)。

    在这个例子中,执行的方法将会创建MessageStore实例,然后返回SUCCESS 这个常量字符串。

    MessageStore实例的get/set 方法提供访问类私有成员的途径,所以我们可以知道在展示页面(HelloWorld.jsp)对MessageStore实例是可见的,当然我们需要MessageStore符合 JavaBean-style 规范。

    第三步:创建展示页面 HelloWorld.jsp

    我们需要一个页面来展示model  MessageStore中存储的信息。

    HelloWorld.jsp 可以放在WebRootFile 文件下,源码:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Hello World!</title>
      </head>
     
      <body>
        <h2><s:property value="messageStore.message" /></h2>
      </body>
    </html>

    标签指令告诉servlet容器,这个页面使用Struct2 标签库,这些标签会在前面放上一个s

    <s:property>  标签展示的是:HelloWorldAction 的方法getMessageStore 返回的 MessageStore 实例,.maessge 的意思是告诉 Struct2框架调用MessageStoregetMessage方法,这个方法返回一个String类型的欢迎数据,将会被展示。

    第四步:在strcuts.xml 中创建Struct 的配置信息

    我们需要有一个映射,把URL 和 HelloWorldAction,以及HelloWorld.jsp 关联在一起。

    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>
     
      <constant name="struts.devMode" value="true" />
     
      <package name="basicstruts2" extends="struts-default">
        <action name="index">
          <result>/index.jsp</result>
        </action>
             
        <action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
          <result name="success">/HelloWorld.jsp</result>
        </action>
      </package>
    </struts>

    第五步:创建URL action

    既是创建对应Action的URL,也就是创建用户操作的入口。此例中我们使用我们原来的index.jsp,

    在其中加入超链接。

    index.jsp 源码:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Basic Struts 2 Application - Welcome</title>
    </head>
    <body>
    <h1>Welcome To Struts 2!</h1>
    <p><a href="<s:url action='hello'/>">Hello World</a></p>
    </body>
    </html>

     

    Struts url 标签创建了一个Hello Action的URL 这个Action 会映射到 HelloWorldAction  类上面以及他的执行方法。当用户点击这个URL的时候,Struct2的框架就会执行HelloWorldAction 的execute方法,得到相应的返回值,view页面(HelloWorld.jsp)展示出来响应的信息。

    第六步:测试(Build the WAR File and Run The Application)

    我们使用的是Jetty 所以和使用Tomcat,以及mvn打包的不同,直接debug JettyStarter 启动监听127.0.0.1:12345,在浏览器中输入:127.0.0.1:12345/struct2test/index.action

    image

    点击 Hello World

    image

    代码运行的过程:

    1. 浏览器向服务器发送URL:http://127.0.0.1:12345/struct2test/hello.action

    2. servlet 容器接受到hello.action的请求,根据web.xml的设置,容器会把这个请求交给

    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    StructsPrepareAndExecuteFilter 是整个框架的入口。

    3.框架会寻找一个与hello相对应的Action,这个在structs.xml中已有设置,这个Action对应的类也会找到:HelloWorldAction 然后会实例化HelloWorldAction,并调用它的execute方法。

    4. excutor执行,创建MessageStore 实例,并且返回SUCCESS框架会检查映射,看看SuCCESS会被返回到那个表现页面,框架会告诉容器把信息作为返回的数据提供给HelloWorld.jsp.

    5. HelloWorld.jsp展示的过程在前面已经说了,不再重复。

  • 相关阅读:
    PDF文件中的Form保存问题
    Understanding IP Fragmentation
    tcp ip guide IPsec IKE
    Windows安全事件日志中的事件编号与描述
    Cisco PIX fix up and Juniper firewall FTP ALG
    很好的IPSec介绍,详细解释了IKE协商的2个阶段的作用
    virtualbox 下运行Ubuntu 8.10的分辨率和guest additions的问题。
    Fixing the ‘Do you want to display nonsecure items’ message
    windows xp 开始菜单里面所有项目右键不起作用。
    HP backup and recovery manager
  • 原文地址:https://www.cnblogs.com/zhailzh/p/3988190.html
Copyright © 2011-2022 走看看