創建struts項目

1:搭建Struts工程的步驟

 

   A:加載Struts的jar包。通過struts-blank.war包中,拷貝最基礎運行的jar包。

 

   B:在web.xml中配置Strtuts的核心控制器

  

      <filter>

         <filter-name>struts2</filter-name>

         <filterclass>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

      </filter>

  

      <filter-mapping>

         <filter-name>struts2</filter-name>

         <url-pattern>/*</url-pattern>

      </filter-mapping> 

     

   C:在src目錄下,創建struts.xml框架的配置文件。


      <?xmlversion="1.0" encoding="UTF-8" ?>

      <!DOCTYPE struts PUBLIC

         "-//ApacheSoftware Foundation//DTD Struts Configuration 2.3//EN"

         "http://struts.apache.org/dtds/struts-2.3.dtd">

      <struts>

         <constantname="struts.enable.DynamicMethodInvocation" value="false"/>

         <constantname="struts.devMode" value="true" />

     

         <package name="default" namespace="/"extends="struts-default">

         </package>

      </struts>

     

   D: 創建Struts的Action類。並且添加一個名爲execute(只能命名爲execute)的方法。

  

      package com.action;

     

      public class FirstAction {

     

         public String execute() throwsException {

     

            return null;

         }

      }

     

   E:在Struts.xml中,對Action類做路徑的映射。

      WEB頁面訪問是URL路徑。

     

      <action name="xx"class="com.action.FirstAction"></action>

     

      對FirstAction的路徑命名爲xx

     

   F:頁面中訪問xx的請求路徑。

  

      <a href="${pageContext.request.contextPath}/xx">訪問FirstAction</a>

     

   G:設定Action執行完成之後,返回的Result結果。

     

      public String execute() throws Exception {

         System.out.println("FirstAction中的Execute方法被執行....");

         return "error";

      }

  

      <action name="xx"class="com.action.FirstAction">

         <result name="succ">/test_succ.jsp</result>

         <result name="error">/test_error.jsp</result>

      </action>

     

      根據execute方法中返回的字符串,對應Action配置中的result的名稱。

     

      如果匹配的話,那麼就會跳轉到相應的jsp頁面或者freemarker頁面。

     

 

2:Struts 2框架的大致處理流程如下:

 

   A:瀏覽器發送請求,例如請求/xx、等。

 

   B: Control中的核心控制器StrutsPrepareAndExecuteFilter根據請求路徑(/xx與struts.xml中配置的action的name

  

      進行匹配),調用相應的業務邏輯控制器(Action)。

 

   C:Struts2的攔截器棧自動對請求應用通用功能,如數據校驗和文件上傳等功能。

  

   D:回調Action中的execute()方法,並在方法體內調用業務邏輯組件來處理請求(Model)。

  

      既可以是將數據保存到數據庫,也可以從數據庫中檢索信息。

  

      實際上,因爲Action只是一個控制器,它會調用業務邏輯組件來處理用戶的請求。

 

   E:execute()方法將調用業務邏輯組件(Model)得到的數據返還並更新視圖層(View),

  

      此時支持的視圖技術非常多,既支持JSP,也支持FreeMarker等模板技術。

     

     

3:struts工程中可以運行Servlet

 

   3.1:Struts核心控制器,默認攔截/*的請求。(攔截的是無後綴名或者後綴名爲action的請求。)

  

      把servlet的後綴名,進行變更。

     

      <servlet>

         <servlet-name>FirstServlet</servlet-name>

         <servlet-class>com.servlet.FirstServlet</servlet-class>

      </servlet>

      <servlet-mapping>

         <servlet-name>FirstServlet</servlet-name>

         <url-pattern>/servlet/FirstServlet.svt</url-pattern>

      </servlet-mapping>

     

      那麼訪問路徑:

     

      <a href="${pageContext.request.contextPath}/servlet/FirstServlet.svt">2:運行FirstServlet</a>

     

    3.2:重寫Struts的過濾器,如果是SErvlet的請求路徑的話,則不進行處理。

 

      public class StrutsFilter extendsStrutsPrepareAndExecuteFilter {

     

         @Override

         public void doFilter(ServletRequest req, ServletResponse res,

                FilterChain chain) throwsIOException, ServletException {

            HttpServletRequest request =(HttpServletRequest) req;

     

            String requestURI =request.getRequestURI();

     

            if (requestURI.indexOf("/servlet") != -1) {

                /**

                 * 表示訪問的路徑是一個Servlet

                */

                chain.doFilter(req, res);

            } else {

                /**

                 * 調用Struts的核心控制器繼續處理

                 */

                super.doFilter(req, res, chain);

            }

     

         }

      }

     

      web.xml中重新配置。

      <filter>

         <filter-name>struts2</filter-name>

         <filter-class>com.filter.StrutsFilter</filter-class>

      </filter>

      <filter-mapping>

         <filter-name>struts2</filter-name>

         <url-pattern>/*</url-pattern>

      </filter-mapping>    

  

4:struts核心配置文件(struts.xml)

 

    4.1:constrant的配置,常量可以配置在以下的文件列表中。最後面的配置會覆蓋前面的配置。

  

      1.struts-default.xml  \WEB-INF\lib\struts2-core-2.3.28.jar\struts-default.xml。一般不進行配置。

      3.struts.xml       \src目錄下

         <constantname="struts.devMode" value="true" />

        

      4.struts.properties   \src目錄下,手工進行創建

     

            struts.devMode = false

           

      5.web.xml          \WEB-INF目錄下。

         <filter>

            <filter-name>struts2</filter-name>

            <filter-class>com.filter.StrutsFilter</filter-class>

            <init-param>

                <param-name>struts.devMode</param-name>

                <param-value>true</param-value>

            </init-param>

     

            <init-param>

                <param-name>struts.enable.DynamicMethodInvocation</param-name>

                <param-value>true</param-value>

            </init-param>

         </filter>   

     

   4.2:常用的常量配置。

  

      Struts中所有的常量定義:\struts2-core-2.3.28.jar\org.apache.struts2\default.properties

     

      struts.i18n.encoding=UTF-8                  //設定編碼

      struts.multipart.maxSize=2097152            //設定上傳文件的大小

      struts.action.extension=action,,            //設定Struts的後綴名

      struts.enable.DynamicMethodInvocation =false   //是否開啓Struts的動態方法調用

      struts.devMode = false                   //是否處於開發模式

      struts.ui.theme=xhtml                    //設定UI控件的主題

      struts.ognl.allowStaticMethodAccess=false   //是否允許ONGL表達式調用靜態方法。

 

    4.3:include配置。

      包含其他的配置文件,用於團隊項目。

     

      規則:不同的配置文件中,package與namespace的名稱不能重複。

     

      <package name="default" namespace="/"extends="struts-default">

     

      <include file="struts-user.xml"></include>

     

  

    4.4:package配置

   <package

      name=""            package的命名,不能重複。用於package之間的繼承。

      namespace=""       action訪問的命名空間。

     

     

      extends=""            繼承哪一個package,默認繼承struts-default

      abstract="true|false" true:表示是一個抽象包。抽象包中不能定義action

      ></package>

     

   完整的Action訪問路徑:

  

      命名空間 + action的名稱

     

      路徑中的訪問命名空間>=struts.xml中定義的命名空間。

     

      /aa/bb/cc/dd/ee/XXXAction     /aa/bb

     

    4.5:action的配置。

  

      <action name=""          action的名稱

            class=""        action類的路徑

            method=""       默認執行execute方法,

                                   但是可以通過method屬性來指定調用哪一個方法。

            ></action>

           

    4.6:result的配置。

     

         <result

        

            name=""         result的名稱

        

            type="">        result類型。

        

                請求轉發到Action : chain"

                請求轉發到頁面                 dispatcher"                    

               

                重定向到頁面:                     redirect"

                 重定向到Action       redirectAction"

                返回的result是一個流類型:用於文件下載:stream"

                            

        

         </result>   

  

         <result name="forward_jsp"type="dispatcher">/forward_jsp.jsp</result>

         <resultname="redirect_jsp" type="redirect">/redirect_jsp.jsp</result>

        

         <resultname="forward_action" type="chain">

            <param name="namespace">/</param>

            <paramname="actionName">xx</param>

            <paramname="methodName">execute</param>

         </result>

        

         <result name="redirect_action"type="redirectAction">

            <param name="namespace">/</param>

            <paramname="actionName">xx</param>

            <paramname="methodName">execute</param>

         </result>

發佈了24 篇原創文章 · 獲贊 2 · 訪問量 7978
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章