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;@Overridepublic 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框架調用MessageStore 的getMessage方法,這個方法返回一個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
點擊 Hello World
代碼運行的過程:
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展示的過程在前面已經說了,不再重復。
轉載于:https://www.cnblogs.com/zhailzh/p/3988190.html
總結
以上是生活随笔為你收集整理的struct2(二) struct2的hello world 程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 进程、端口、IP、连接数等查
- 下一篇: OpenCv实现两幅图像的拼接