在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,
用戶的請求發送到服務器,用於請求某些資源(即頁面)。
該過濾器調度的要求和肯定適當的動做。
配置攔截器的功能適用於如驗證,文件上傳等。
選擇的動做執行,執行所請求的操做。
一樣,配置攔截器作任何後期處理,若是須要的話。
最後的結果是由視圖準備,而且將結果返回給用戶。
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
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; } }
咱們須要一個JSP提交最後的消息,這個頁面會使用在Struts 2框架中預約義的動做時,這將會發生在struts.xml文件中定義的映射。
<%@ page contentType=text/html; charset=UTF-8 %> <%@ taglib prefix=s uri=/struts-tags %>
接下來建立一個主頁面:
咱們還須要在WebContent文件夾中建立index.jsp頁面文件。該文件將做爲初始動做URL,用戶能夠直接點擊告訴Struts2框架調用的HelloWorldAction類定義的方法並渲染HelloWorld.jsp視圖。
這裏可能會遇到一個問題:
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%>
咱們須要一個映射,以配合URL,HelloWorldAction類(模型),HelloWorld.jsp(視圖)。映射告訴Struts 2框架的類將如何響應用戶的操做(URL),這一類的方法將被執行,在該方法返回的基礎上選擇什麼視圖來顯示字符串結果。
/Hello.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 /*
您能夠啓用完整的日誌記錄功能,經過建立工做和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
下面還有幾個須要注意的信息,最主要的是,出錯之後要看出錯信息,找到緣由。如今遇到的問題歸結爲兩個緣由:
1)配置文件中的書寫錯誤。
2)導包不全面,按照錯誤提示的導包就行。