麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

MVC 構架學習之漸行漸進(三)

2019-11-18 12:44:16
字體:
來源:轉載
供稿:網友

  [b:9e5a30927b]操作Servlet[/b:9e5a30927b]  
    
  action  
  ActionServlet  
  
  
    
  action  
  *.do  
  
  
  部署信息把以.do結尾的URL映射到操作的servlet. jsp頁面在引用的方法為:  
    action="<%=response.encodeURL("actions.LoginAction.do")%>">  
  
  [b:9e5a30927b]用Servlet把URL映射到操作類[/b:9e5a30927b]  
  示例:ActionServlet類   /WEB-INF/classes/ ActionServlet  
  import javax.servlet.ServletException;  
  import javax.servlet.http.HttpServlet;  
  import javax.servlet.http.HttpServletRequest;  
  import javax.servlet.http.HttpServletResponse;  
  import actions.Action;  
  import actions.ActionRouter;  
  import actions.ActionFactory;  
  public class ActionServlet extends HttpServlet  
  {  
  PRivate ActionFactory factory=new ActionFactory();  
  public void init(ServletConfig config) throws ServletException  
  {  
    /*根據ActionRouter類導讀內容中對HttpServlet類的描述來看,HttpServlet規定了必須執行的方法,該時期調用了init()方法,當Servlet被Servlet引擎載入后,接下來就會執行init()這個方法,因此我們可以重載這個方法以做一些我們自己的初始化的工作。在Servlet的生命期中,init()方法僅在服務器裝入Servlet時被執行一次,此后無論有多少客戶機訪問這個Servlet,init()都不會被重復執行。*/  
  }  
  public void service(HttpServletRequest req, HttpServletResponse res)  
          throws java.io.IOException, ServletException  
      {  
       /*在Servlet被載入后,主要通過service()方法對外響應,該方法可以被同時、多次地呼叫。*/  
  try  
       {  
       Action action=factory.getAction(getClassname(req),getClass().getClassLoader());  
       ActionRouter router=action.perform(this,req,res);  
       router.route(this,req,res);  
       }  
       catch(Exception e)  
       {  
       throw new ServletException(e);  
       }  
      }  
      public String getClassname(HttpServletRequest req)  
      {  
       String Path=req.getServletPath();  
       int beginPos=Path.lastIndexOf("/");  
       int endPos=Path.lastIndexOf(".");  
       if (beginPos>-1 && endPos>beginPos)  
       {  
       Path=Path.substring(beginPos+1,endPos);  
       }  
       return Path;  
      }  
  }  
  該類的service方法實現了:從操作庫中獲取操作,然后調用接口的perform方法。由perform的實現返回一個操作路徑,最后由ActionRouter類的route方法進行重定向操作。達到頁面跳轉的作用。  
  導讀:getClassname(req)將獲取操作類名,過程如下:  
  由req.getServletPath()獲取servlet的路徑為/ actions.LoginAction.do通過截取得到類名:actions.LoginAction。  
  getClass().getClassLoader():getClass()方法是類的一個方法,主要用于返回一個類型為Class的對象。該例中返回為:class  ActionServlet  
  GetClassLoader()是Class類的一個方法,返回為ClassLoader對象。本例返回為:sun.misc.Launcher$AppClassLoader@92e78c。這說明加載ActionServlet類的類的加載者(classLoader的翻譯)為AppClassLoader.那么AppClassLoader又是什么呢?下面我們來解答該問題:  
  首先要明確java虛擬機上所有的類,必須要加載才能運行。JVM在運行時會產生三個ClassLoader, 它們分別是Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader:  
  ClassLoader                 作    用  
  Bootstrap ClassLoader 加載核心類庫static const char classpathFormat[] ="%/lib/rt.jar:""%/lib/i18n.jar:""%/lib/sunrsasign.jar:""%/lib/jsse.jar:""%/lib/jce.jar:""%/lib/charsets.jar:""%/classes";這里我們可看到為什么在classpath里為什么不加載這些類  
  Extension ClassLoader 加載擴展類,即/lib/ext中的類。  
  AppClassLoader 加載Classpath中指定的類。  
  從上面可以看出,所有web應用程序的類都是AppClassLoader來加載的,三者的關系為:AppClassLoader的Parent是ExtClassLoader,而ExtClassLoader的Parent為Bootstrap ClassLoader。加載一個類時,首先BootStrap先進行尋找,找不到再由ExtClassLoader尋找,最后才是AppClassLoader。ClassLoader這種加載類的模型被稱為是委托模型。  
  下面我們要了解的問題是動態加載類原基本原理?或者說為什么我們要這么做?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄色网址免费进入 | 色综合网在线观看 | 国产精品久久久久网站 | 中文字幕h | 草草影院地址 | 性感美女一级毛片 | 视频一区 日韩 | 久久久av影视 | 成人免费毛片在线观看 | 久久伊人精品热在75 | 久久免费视频一区二区三区 | 国产精品热 | 九九热这里只有精品8 | 欧美韩国日本在线 | 性爱视频在线免费 | 国产精品一区二区三区99 | 亚洲情av | 久久精品久久精品国产大片 | 黄色毛片a级 | 日韩毛片毛片久久精品 | 一级毛片看 | 久久国产精品小视频 | av国产在线被下药迷网站 | 玖玖视频精品 | 黄色片免费在线 | 一二区成人影院电影网 | 亚洲网站在线观看 | 99精品视频在线观看免费播放 | av免费在线播放网址 | 热re91久久精品国产99热 | 极品xxxx欧美一区二区 | 激情黄页 | 久久久久久久久久久影视 | 久久999精品久久久 国产噜噜噜噜久久久久久久久 | 92看片淫黄大片一级 | 一级免费在线视频 | 天天夜天天操 | 3344永久免费 | aa国产视频一区二区 | 久久精品国产一区二区电影 | 国产精品亚洲三区 |