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展示的过程在前面已经说了,不再重复。

  • 相关阅读:
    生活的乐趣
    android加载webview白屏问题
    强极则辱
    向studio项目中复制集成其他代码,项目R文件丢失
    每一步都是最好的选择
    JQuery小插件,Selected插件1
    JSON进阶三JSON的几种调用形式
    JSON进阶四前后台交互之美
    .NET双样式分页控件
    JSON进阶五JS和WCF的交互
  • 原文地址:https://www.cnblogs.com/zhailzh/p/3988190.html
Copyright © 2011-2022 走看看