1. 程式人生 > >struts2的基本配置詳細流程解說

struts2的基本配置詳細流程解說

                    又到了微博時刻了。從一號到十五號的任務計劃算是告一段落了,完成的質量雖然不敬人意,但也是一個小小的進步!按計劃每個階段都會用微博的方式做一個技術總結,記錄和分享自己所學到的一些東西和理解!下面的所有內容都是關於struts2框架的技術。對,單單隻有struts2框架實現的一個簡單的登陸功能,沒有與任何框架整合,目的就是為了加深對struts2的理解!

        首先來說一下什麼是struts2!廢話就不說了,就簡單說幾句。struts2是一個基於MVC思想的web輕量級框架,從本質上看與servlet很想象,都是做檢視模型資料互動的!struts2以webWork為核心,採用攔截器的機制來處理使用者的請求。我的理解人為,struts2本身就是一個攔截器機制!具有很多豐富的攔截器功能!struts2不等於struts1,實際上卻等於webWork框架的更新產品。

      使用struts2的好處與不足(沒有一個框架是完美的,都是根據實際情況考慮選擇使用優勢最大的框架):http://blog.csdn.net/chenleixing/article/details/44572637(請訪問該頁面)再此就不敘述了。。。

說了這麼多,下面開始正式開始struts2的實踐了。

要用到的技術和工具:eclipse , mysql , dbcp  , struts2  , mvc

首先你的myqsl資料庫得有張表,我的表名是user ,欄位可以只設置3個,id(主鍵自增) ,username,password,給個初始值

然後在eclipse建立一個javaweb專案,自己去建一個。基本就這些,然後按步驟叫你配置struts2的環境

第一步:引入需要用到的jar包到專案的lib資料夾下、如圖:

有這些jar包就夠了

第二步:在erb.xml中配置struts2的核心攔截器:

應為只用到了struts2這一個框架,所以只用配置一個就行了(struts2的預設是filter(過濾器)配置)

第三步:建立struts.xml檔案和jdbc.properties檔案,直接放在src目錄下即可:

struts.xml檔案、; jdbc.propertise:

第四步:建立資料來源連線(這裡使用的是jdbc連線配置資料來源的):

這個類封裝了一個永久性的資料來源,只要程式啟動中,都可以通過getDataSource獲取到這個唯一的資料來源連線(也就是mysql連線)

第五步:MVC層次結構的實現,介面我就不貼了,我主要展示一下dao層的例項程式碼,是怎樣做增刪改查的操作的:

只是單純的做一個登陸功能,這一個方法足夠了,service可以根據這個方法的返回值判斷是否有這個使用者,然後確定是否具有登陸許可權,service的程式碼我也就不貼了

第六步:action層的登陸程式碼編寫和jsp登陸頁面的製作:

action程式碼:

這裡詳細解釋一下ActionContext的內容。ActionContext是被存放在當前執行緒的,獲取ActionContext也是從ThreadLocal中獲取的,所以在執行攔截器,action和result的過程中

可以任意時候在ThreadLocal中獲取ActionContext.

ActionContext中包含了很多資訊,比如Session,Application,Request,Locale,ValueStack,其中ValueStack可以解析ognl表示式,來動態獲取一些值,同時給表示式提供物件,值棧是建立在OGNL基礎上的。

HttpServletRequest等物件是如何與struts2的ActionContext互通的
是struts2重新實現了HttpServletRequest介面,就是類StrutsRequestWrapper,看下struts2的說明:
All Struts requests are wrapped with this class, which provides simple JSTL accessibility. This is because JSTL works with request attributes, so this class delegates to the value stack except for a few cases where required to prevent infinite loops. Namely, we don't let any attribute name with "#" in it delegate out to the value stack, as it could potentially cause an infinite loop. For example, an infinite loop would take place if you called: request.getAttribute("#attr.foo").
說明struts重新包裝了request介面,所以如果用request.getAttribute()的話,是執行了StrutsRequestWrapper類,在這個類裡面有訪問ActionContext的程式碼:
public class StrutsRequestWrapper extends HttpServletRequestWrapper {

    /**
     * The constructor
     * @param req The request
     */
    public StrutsRequestWrapper(HttpServletRequest req) {
        super(req);
    }

    /**
     * Gets the object, looking in the value stack if not found
     *
     * @param s The attribute key
     */
    public Object getAttribute(String s) {
        if (s != null && s.startsWith("javax.servlet")) {
            // don't bother with the standard javax.servlet attributes, we can short-circuit this
            // see WW-953 and the forums post linked in that issue for more info
            return super.getAttribute(s);
        }

        ActionContext ctx = ActionContext.getContext();
        Object attribute = super.getAttribute(s);
        ...

     }

}


在這裡實現了getAttribute方法,然而沒有實現全部,所以只有用
getAttribute方法才能獲取ActionContext中的資訊

但是它繼承了sun的HttpServletRequestWrapper類,所以其他的方法還是用的預設實現,也就是不能訪問到ActionContext中的資訊

jstl標籤會觸發request等的getAttribute方法,所以jstl也能獲取到ActionContext的資料,比如Struts2的Action中的屬性等等。

 ServletActionContext概述

  這個類直接繼承了ActionContext,當然也繼承了它父類的很多功能,比如:對OgnlValueStack、Action名字等的訪問。更重要的是,它還提供了直接訪問Servlet的相關物件的功能,它可以取得的物件有:

  • HttpServletRequest:請求物件

  • HttpServletResponse:響應物件

  • ServletContext:Servlet上下文資訊

  • PageContext:Http頁面上下文

基本使用

HttpServletRequest request = ServletActionContext.getRequest();HttpServletResponse response = ServletActionContext.getResponse(); ServletContext servletContext = ServletActionContext.getServletContext(); PageContext pageContext = ServletActionContext.getPageContext(); HttpSession session = ServletActionContext.getRequest().getSession(); 

jsp頁面: 此處使用了ognl標籤

第七步:配置攔截器和action訪問處理(struts.xml中的action處理)

struts2中有很多已經寫好了的攔截器。也可以自定義攔截器,下面寫一個自定義攔截器,來實現訪問其他頁面時判斷是否具有該使用者(該使用者是否在登陸狀態) 自定義攔截器必須在struts.xml配置檔案中宣告才能起效。 配置完這一步並不表示你就已經能使用攔截器了,接下來就是配置攔截器作用的action範圍和action與頁面互動的url配置了 啟動tomcat,若是本機,輸入localhost:8080/專案名/user/login 這就是一整套流程了,其它的功能比如分頁,檔案下載,日誌記錄等我都沒貼出來,等下次有時間在寫吧。光這些都寫了我一下午的時間。

相關推薦

struts2基本配置詳細流程解說

                    又到了微博時刻了。從一號到十五號的任務計劃算是告一段落了,完成的質量雖然不敬人意,但也是一個小小的進步!按計劃每個階段都會用微博的方式做一個技術總結,記錄和分享自己所學到的一些東西和理解!下面的所有內容都是關於struts2框架的技術

Struts2基本包作用詳

Struts2是的基本包有很多,我們只能記住常用的幾個包的用途,整理了常用的基本包用途詳解。 asm-3.3.jar 作用:操作java位元組碼的類庫 asm-commons-3.3.jar 作用:提供了基於事件的表現形式 asm-tree-3.3.jar

Struts2基礎配置流程

首先一個jsp頁面: 訪問localhost:8080/struts2/add.jsp  (以預設埠號8080為例,最好重新設定一下埠;專案名:struts2) 下面是struts.xml的配置: add.jsp提交之後,form表單中action為struts_a

SSM基本配置流程

只有開始配置的時候很麻煩。配置完後就好寫多了。 初始要匯入很多很多jar啊~~~ 1.web.xml 配置 DispatcherServlet <servlet> <servlet-name>springwebmvc<

Struts2基本配置

訪問HelloWorld應用的路徑的設定 HelloWorldAction檔案: package cn.itcast.primer; import com.opensymphony.xwork2.ActionSupport; public class H

Struts2基本配置和使用

setattr port execute utf 失敗 找到 t對象 request對象 col 1.首先在web.xml裏面配置一個Struts2的核心過濾器 這樣Struts2才能開始工作 <!-- 配置struts2的核心過濾器 --> <

Struts2學習第一天——struts2基本流程配置

文件版本 開發工具 測試平臺 工程名字 日期 作者 備註 V1.0 2016.06.12 lutianfei none

Struts2框架(二) Web.xml, Struts.xml, Action.Java 基本配置

str web.xml images ava img ima blog XML ges Struts2框架(二) Web.xml, Struts.xml, Action.Java 基本配置

struts2使用配置

doc jsp 特定 ext mes struts-2 system 瀏覽器 con struts2.xml的文件配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC

基於windows系統中visual studio2017的dlib庫詳細配置安裝流程

平臺 學習 mpi 好的 運行 安裝 說明文 完成 page dlib庫是一個非常強大的開源庫,有詳細的說明文檔和c++代碼,也提供了一些和python的接口,但是安裝和配置的過程略有些麻煩,網上有一些相關教程,但是大都零零星星不全面。筆者親自把所有的坑都踩了一遍,整理出了

VMWare虛擬機-Linux集群搭建詳細流程-2.登錄-分配動態ip-配置Xshell5.exe

ase 分享圖片 height eight sel idt class vertica img 如圖: VMWare虛擬機-Linux集群搭建詳細流程-2.登錄-分配動態ip-配置Xshell5.exe

Squid代理服務器的了基本配置(一)

使用 poll() 處理 nologin fec 隱藏 了解 情況下 chown 前言Squid(Squid cache,簡稱Squid)是Linux系統中最常用的一款開源代理服務軟件,可以很好地實現HTTP和FTP,以及DNS查詢、SSL等應用的緩存代理,功能十分強大。搭

LVS負載均衡群集的了基本配置(一)

企業 比例 請求 process 綜合 三層 多臺 nas 路由 前言:今天要給大家介紹的是LVS群集,在企業中應用非常廣泛,是為了實現負載均衡,提高服務器的工作效率,當其中有服務器發生故障的時候也不會影響客戶的訪問。 一、群集技術概述1、群集的含義來源於英文單詞‘Clus

華為NAT基本配置實例詳

步驟 pc2 quit ip nat add 設備互聯 ext roc 配置實例 實驗需求:PC-1/2 要 ping 通 PC-3 ; 實驗步驟:1.設備互聯、IP地址規劃、加電;2.設備配置#內網設備終端設備PC1:ip 192.168.10.1mask 255.255

Spring 基礎教程之四:JavaBean基本配置

一:xml 裝配JavaBean屬性含義: 1.id:指定該Bean 的唯一標識。 2.class:指定該Bean 的全限定名。 3.name:為該Bean 指定一到多個別名。多個別名可以用“,”和“;”分割。

spring配置檔案詳--真的蠻詳細

  spring配置檔案詳解--真的蠻詳細 轉自: http://book.51cto.com/art/201004/193743.htm 此處詳細的為我們講解了spring2.5的實現原理,感覺非常有用

Java程式設計師從笨鳥到菜鳥之(七十二)細談Spring(四)利用註解實現spring基本配置

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Security配置檔案的基本配置及引數名詳

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/sc

Security配置文件的基本配置及參數名詳

請求 靜態資源 el表達式 ans 創建 處理 one color log <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/

java環境變數 的配置與詳(全網最詳細教程)

筆者這學期開始學習java課程,學習java開發首先需要配置java執行環境變數。雖然上課老師也講了如何配置java環境變數,可是筆者的同學還是有好多都不會配置,所以筆者最近配置了特別多次java環境變數。如下筆者詳細解釋從JDK安裝到環境變數的裝配。 目錄