Java程式員從笨鳥到菜鳥之(三十五)細談struts2(一)自己實現struts2架構

來源:互聯網
上載者:User

本文來自:曹勝歡部落格專欄。轉載請註明出處:http://blog.csdn.net/csh624366188  

 

     Struts最早是作為Apache Jakarta項目的組成部分,項目的創立者希望通過對該項目的研究,改進和提高JavaServer Pages 、Servlet、標籤庫以及物件導向的技術水準。最初的struts1.x很快在企業開發中流行了起來,與此同時,當時還有一個非常的優秀的web開發架構誕生,那就是webwork,但webwork沒有像struts1那麼幸運,沒有得到流行,但webwork簡潔、靈活功能強大等優點絕不輸於當時流行的strut1.x。當然struts1開發人員不是也沒有意識到這一點。於是struts 和WebWork得到了結合,webwork算是利用struts的名氣來發展自己吧,於是struts2誕生了。

Struts2概述

    Struts 2是Struts的下一代產品,是在 struts 和WebWork的技術基礎上進行了合并的全新的Struts 2架構。其全新的Struts 2的體繫結構與Struts 1的體繫結構的差別巨大。Struts 2以WebWork為核心,採用攔截器的機制來處理使用者的請求,這樣的設計也使得商務邏輯控制器能夠與Servlet API完全脫離開,所以Struts 2可以理解為WebWork的更新產品。雖然從Struts 1到Struts 2有著太大的變化,但是相對於WebWork,Struts 2隻有很小的變化。由於struts1現在開發中很少在用到,所以我們直接進入struts2的學習,但以前的項目中還是大多數保留著struts1的應用。由於struts是基於mvc模式的架構,所以我們學習struts的第一步就是開發自己的基於MVC的架構

首先看一下一個MVC的流程圖的例子:

       就像圖中例子,在視圖層add。Jsp中寫一個提交兩個資料的表單,表單提交給控制器,在控制器中通過它所提交的uri獲得表單所要提交的action,然後把請求交給action,然後在action中調用商務邏輯的方法進行邏輯運算,獲得結果,把結果儲存起來,然後,把所有返回的介面作為返回結果返回給控制器,然後控制器根據返回的介面的字串選擇轉寄到該介面

下面我們就用程式,把這個流程實現出來:

1.首先要把表單介面寫出來:add.jsp

<form action="add.action" method="post"><div align="center"><font color="#8000ff">     </font><font size="5" color="#8000ff"><strong>加法器實現</strong></font><br/>     </div><table align="center">     <tr>     <td>第一個數:</td>     <td><input type="text" name="firstNmb"/></td>     </tr>     <tr>     <td>第二個數:</td>     <td><input type="text" name="secondNmb"/></td>     </tr>     <tr align="center">     <td colspan="2"><input type="submit" value=" 求和"/>    <input type="reset"/ value="重設"></td>     </tr>     </table>    </form>

2.建立控制器,其實這裡的控制器就是一個servlet,這裡我們給規定凡是請求尾碼是.action的都提交到這個控制器裡,controller.java:

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String path=request.getRequestURI();String realPath=path.substring(path.lastIndexOf("/")+1, path.lastIndexOf("."));Action action=null;String path2=null;if("add".equals(realPath)){action=new AddAction();path2=action.execute(request, response);}          .........         If(....){                 .......              }request.getRequestDispatcher(path2).forward(request, response);}

因為控制器是一個servlet,所以在web.xml中要對他進行配置:

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <servlet>    <servlet-name>Controller</servlet-name>    <servlet-class>zxj.struts2.servlet.Controller</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>Controller</servlet-name>    <url-pattern>*.action</url-pattern>  </servlet-mapping></web-app>

      下面來看一下action裡面應該寫的內容,由於一直以來都提倡面向介面編程,並且面向介面編程也能很好的體現java的可擴充性,所以我們對所有的action提供一個共同的介面:action.java:

public interface Action {public String result(HttpServletRequest request,HttpServletResponse response);}

      

下面是具體的action實現:addaction.java:其中具體的商務邏輯調用的add方法就是兩個數相加,這裡就不貼代碼了:

 

public String execute(HttpServletRequest request,HttpServletResponse response) {double i=Double.parseDouble(request.getAttribute("firstNmb").toString());double n=Double.parseDouble(request.getAttribute("secondNmb").toString());Calculator c=new Calculator();double result=c.add(i, n);request.setAttribute("result", result);return "add_result.jsp";}}

 

        這些就是我們自己寫的mvc的基本架構,當然這裡面有很多不足的地方,這裡只是為了示範基於mvc架構的基本架構,具體細節都可以細化和擴充性的實現,比如控制器裡面的選擇哪個action,這個可以用設定檔來實現的,基本思路:在控制器中獲得所請求action的首碼名,然後去解析所配置的檔案,在然後拿著這個首碼名去找設定檔中相符的action所對應的類,然後在利用反射執行對應類的方法,根據然後在執行完action後,獲得結果,然後從配置中獲得獲該結果對應的介面,這樣就可以很好的體現了這個程式的可擴充性了。

      到這裡我相信大家應該對基於mvc的架構的執行流程有一定的瞭解了,相信大家一定對學習struts2架構迫不接待了,那大家就等待著下一篇部落格:細談struts2之初識struts2架構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.