Struts2

在Struts2的Model-View-Controller模式實現如下五個核心組件html

 

動做-Actionsjava

攔截器-Interceptorsweb

值棧/OGNLapache

結果/結果類型api

視圖技術瀏覽器

 

Struts 2和傳統的MVC框架有些不一樣,在該框架中的做用的模式,而不是控制器的做用略有不一樣,雖然有一些重疊。這是Struts的MVC模式的體系結構概述。tomcat

\

 

上圖描述了Struts2的高層體系結構模型,視圖和控制器。一個Struts2的調度Servlet過濾器和攔截器與控制器實現,該模型實現的動做和視圖的組合的結果類型和結果。值棧和OGNL提供了共同點,其餘部件之間的鏈接和集成。服務器

除了從上述組分中,將有一個特定的信息,涉及到配置。爲Web應用程序的配置,以及配置的行動,攔截器,結果等。app

 

基於上述數據圖,能夠解釋用戶的請求的生命週期在Struts 2以下所示:框架

Hello World,

Hello World From Struts2


 
    1. 用戶的請求發送到服務器,用於請求某些資源(即頁面)。

      該過濾器調度的要求和肯定適當的動做。

      配置攔截器的功能適用於如驗證,文件上傳等。

      選擇的動做執行,執行所請求的操做。

      一樣,配置攔截器作任何後期處理,若是須要的話。

      最後的結果是由視圖準備,而且將結果返回給用戶。

      1. 下載而且解壓struts以後能夠把lib目錄下的一下文件複製到咱們的項目WEB-INFlib 目錄. 要作到這一點,你能夠簡單地將降低到WEB-INFlib文件夾中的全部下列文件。(下面是最小依賴集)

         

        commons-fileupload-x.y.z.jar

        commons-io-x.y.z.jar

        commons-lang-x.y.jar

        commons-logging-x.y.z.jar

        commons-logging-api-x.y.jar

        freemarker-x.y.z.jar

        javassist-.xy.z.GA

        ognl-x.y.z.jar

        struts2-core-x.y.z.jar

        xwork-core.x.y.z.jar


         

         

        建立動做類(Action Class):

        • Action類是Struts 2的應用程序的關鍵,咱們實現了大部分的Action類中的業務邏輯。Action類來響應用戶的操做,當用戶點擊一個URL。 Action類中的一個或多個方法被執行,並返回一個字符串結果。基於結果的值,一個特定的JSP頁面的呈現方式。

           

           

          package com.tutorialspoint.struts2;
          
          public class HelloWorldAction{
             private String name;
          
             public String execute() throws Exception {
                return success;
             }
             
             public String getName() {
                return name;
             }
          
             public void setName(String name) {
                this.name = name;
             }
          }

          Struts2框架的HelloWorldAction類將建立一個對象並調用execute方法來響應用戶的操做。執行業務邏輯裏面的execute方法,並最終返回字符串常量。簡單地說,爲每一個URL你必須執行一個動做類,或者能夠直接使用這個類的名稱做爲操做名,也能夠映射到一些其餘的名稱使用struts.xml文件,以下圖所示。

           

           

          建立視圖(View)

           

          咱們須要一個JSP提交最後的消息,這個頁面會使用在Struts 2框架中預約義的動做時,這將會發生在struts.xml文件中定義的映射。

          <%@ page contentType=text/html; charset=UTF-8 %>
          <%@ taglib prefix=s uri=/struts-tags %>
          

          taglib指令告訴Servlet容器中,這個頁面將使用Struts2標籤,這些標籤以前,將經過s。s:property標籤顯示動做類‘name’的屬性值,是調用HelloWorldAction 類的方法getName()。

          接下來建立一個主頁面:

          咱們還須要在WebContent文件夾中建立index.jsp頁面文件。該文件將做爲初始動做URL,用戶能夠直接點擊告訴Struts2框架調用的HelloWorldAction類定義的方法並渲染HelloWorld.jsp視圖。

          這裏可能會遇到一個問題:

           

          web項目沒法部署到eclipse配置的本地tomcat

          1、發現問題

          在eclipse中新建Dynamic Web Project,配置好本地的tomcat並寫好代碼後選擇Run on Server,但運行後發如今tomcat的安裝目錄下的webapps並無出現所創建的工程名字。

          2、驗證

          很明顯項目並無自動部署到Tomcat的Webapps中而是部署在了別的容器中。在內置瀏覽器中輸入https://localhost:8080/webDemo/login.jsp可正常打開。但在外部瀏覽器上打開https://localhost:8080時確沒有出現所指望的小貓畫面。

          3、緣由

          eclipse不像MyEclipse默認將項目部署到tomcat安裝目錄下的webapps中,而默認部署到工做目錄下

          的.metadata.pluginsorg.eclipse.wst.server.core mp1wtpwebapps中,tmp1文件夾裏面存放着該項目的信息。

          4、修改

          爲了使項目默認部署到tomcat安裝目錄下的webapps中,show view—>servers—>找到須要修改的tomcat—>右擊 ①中止eclipse內的Tomcat服務器(stop) ②刪除該容器中部署的項目(add and remove) ③清除該容器相關數據(clean) ④打開tomcat的修改界面(open)

          ⑤找到servers location,選擇第二個(User tomcat Installation) ⑥修改deploy path爲webapps ⑦保存關閉

          須要說明的是①②③必須操做,不然下面的步驟會被置灰沒法操做。


           

          還會遇到另外一個錯誤就是在jsp的開始會有JavaWeb:報錯信息The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path

           

          原來Javaweb工程類中沒有添加Tomcat運行時相關類致使。 下面是具體的解決方法: 一、右擊web工程-》屬性或Build Path-》Java Build Path->Libraries-> Add Libray...->Server Runtime -》Tomcat Server 二、切換到Java Build Path界面中的Orader and Export,選擇Tomcat。

           

          主頁面的代碼以下(index.jsp):

           

          <%@ page language=java contentType=text/html; charset=ISO-8859-1
             pageEncoding=ISO-8859-1%>
          <%@ taglib prefix=s uri=/struts-tags%>
             
          

          hello動做定義在上面的視圖文件將被映射到HelloWorldAction類和它的執行方法使用struts.xml文件。當用戶點擊「提交」按鈕,它會致使Struts2框架運行的執行方法定義在其中,HelloWorldAction類和方法的返回值的基礎上,將相應的視圖選擇和呈現的一個響應。

           

           

          配置文件

           

          咱們須要一個映射,以配合URL,HelloWorldAction類(模型),HelloWorld.jsp(視圖)。映射告訴Struts 2框架的類將如何響應用戶的操做(URL),這一類的方法將被執行,在該方法返回的基礎上選擇什麼視圖來顯示字符串結果。

           

                  
                  
                  
                  
          
          
          
             
               
                
                      /Hello.jsp
                
             
          

          在這裏,咱們設置struts.devMode爲true,由於咱們正在努力開發環境,咱們須要看到一些有用的日誌消息。而後,咱們定義了一個包叫作 helloworld. 當你想要將動做類放入其中時建立一個包是有用的。在咱們的例子中,咱們的action命名爲「hello」,這是相應的URL是/hello.action和備份爲HelloWorldAction.class.HelloWorldAction.class中execute方法是時運行的URL的方法/hello.action被調用. 若是execute方法返回success, 而後咱們把用戶引到HelloWorld.jsp.

           

          下一步是建立一個web.xml文件這是任何請求發送到Struts2的一個切入點。Struts2的應用程序的入口點,將是一個部署描述符(web.xml)中定義的過濾器。

          在web.xm文件中,咱們定義一個過濾器org.apache.struts2.dispatcher.FilterDispatcher. web.xml文件須要建立WEB-INF文件夾下的WebContent。 Eclipse在建立項目時已經建立了一個web.xml文件。因此,讓咱們只須要修改以下:

                  
                  
                  
                  
          
             
             Struts 2
             
                index.jsp
             
             
                struts2
                
                   org.apache.struts2.dispatcher.FilterDispatcher
                
             
          
             
                struts2
                /*
             
          

          咱們已經指定index.jsp是咱們主頁的文件。咱們已經配置Struts2的過濾器上運行的全部URL (i.e, any url that match the pattern /*)

           

          啓用詳細的日誌:

           

          您能夠啓用完整的日誌記錄功能,經過建立工做和Struts2同時建立logging.properties文件在 WEB-INF/classes 文件,在屬性文件中,請注意如下兩行:

           

          org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
          org.apache.catalina.core.ContainerBase.[Catalina].handlers = 
                                        java.util.logging.ConsoleHandler

          默認logging.properties指定ConsoleHandler的路由記錄到stdout和也的FileHandler。一個處理程序的日誌級別閾值能夠設置使用SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST或ALL。
          就是這樣。咱們已經準備好來運行咱們的Hello World應用程序使用Struts 2框架。

           

          下面還有幾個須要注意的信息,最主要的是,出錯之後要看出錯信息,找到緣由。如今遇到的問題歸結爲兩個緣由:

          1)配置文件中的書寫錯誤。

          2)導包不全面,按照錯誤提示的導包就行。

相關文章
相關標籤/搜索