J2EE,Documentum,GWT,EJB學習路程

          為了所愛的,和愛我的人努力

           

          J2EE總結--Servlet技術 我的所有隨筆屬于個人總結,有不足之處請回復指出

           

          Servlet技術:

          1.       什么是servlet?

          Servlet是一個java類,是一個提供基于協議請求和響應的java類;

          2.       它的生命周期

                1.       啟動服務器時就會實例化并加載servlet實例;

                2.       進行初始化:自動調用initServletConfig servletConfig)方法;

                3.       Servlet就緒:調用serviceHttpServletRequest request,HttpServletResponse response)方法(其   中     service   就是dopost()或doget()方法),這是客戶提交時,自動調用的;

                4.       Servlet銷毀:自動調用調用distory() ;

             注意:在實例化并加載servlet后,步驟二和四只調用一次,而步驟三,是在每次客戶端發出請求時都調用;

          3.       怎樣部署一個servlet

          Servlet類是必須在web.xml中注冊才能使用的,例如,我有一個MyServlet類:

          必須在web.xml中注冊:

          <web-app>

          //-----------------------Servlet聲明----------------------

                     <servlet>

                           <servlet-name>myServlet</servlet-name>

                           <servlet-class>servletPakage.MyServlet</servlet-class>

                </servlet>

          //------------------------Servlet注冊(鏡像)---------------

                     <servlet-mapping>

                           <servlet-name>myServlet</servlet-name>

                           <url-pattern>myServletURL</ url-pattern >

                </servlet-mapping>

          </web-app>

          這樣你在提交時的Url地址就是/myServletURL了;

          4.       什么是serviceHttpServletRequest request,HttpServletResponse response)方法?

          其中serviceHttpServletRequest request,HttpServletResponse response)方法包括兩種:

                1.       dogetHttpServletRequest request,HttpServletResponse response)方法:

                這種方法被稱為顯式提交方法,主要原因是它的得到的參數放在url中,可以被看到,所以稱為顯示提      交;

                例如:有個表單:

                <form action=”/myServletURL?name=todd” method=”get”>

                </form>

                這種方法其request獲得的參數就是你看到的name=todd;

                例如:String s=request.getParameter(“name”);

                      其結果s=”todd”;

                2.       dopostHttpServletRequest requestHttpServletResponse response)方法:

                   這種方法被稱為隱式提交方法,它的參數不會在url里得到,而是在請求數據體得到參數;

                   例如:有個表單:

                      <form action=”/myServletURL” method=”post”>

                               <input type=”text” name=”name” value=”todd”>

                   </form>

                這種方法其request獲得的參數就是表單體的name=todd;

                      例如:String s=request.getParameter(“name”);

                      其結果s=”todd”;

          5.       什么是ServletContext?

                   ServletContext是一個接口,是WebApplication的視圖,它的作用域時Application,它能訪問Application中的初始化參數和屬性,它不局限域一個Servlet,它屬于整個Application;

          ServletContext的初始化參數:

          web.xml中:

          <web-app>

              <context-param>

          <param-name>myBlog</param-name>

          <param-value>www.aygfsteel.com/todd841026</param-value>

          </context-param>

          </web-app>

           這樣在application中任意一個Servlet中可以得到這個參數,

          例如:ServletContext sc = getServletContext ();

                    String s = sc.getInitParameter(“myBlog”);

          那么結果s就是”www.aygfsteel.com/todd841026”

          6.       什么是ServletConfig?

          是單獨的Servlet初始化配置;

          例如:在web.xml

          <web-app>

                      <servlet>

                           <servlet-name>myServlet</servlet-name>

                           <servlet-class>servletPakage.MyServlet</servlet-class>

                </servlet>

                <init-param>

                      <param-name>cache</param-name>

                      <param-value>off</param-value>

          </init-param>

          </web-app>

          在這個Servlet中:ServletConfig sc = getServletConfig();

                                      String s = sc.getInitParameter(“cache”);

          那么結果s就是off”;

          7.       Servlet怎樣處理多線程

          在默認的情況下,單個Servlet實例是可以處理多個并發請求的,所以要考慮到多線程的共享同一對象的問題,例如:

          //做個Servlet中產生了多少個object對象一個變量的例子

          Private int count = 0 ;

          Public void dopost(HttpServletRequest request,HttpServletResponse response){

                     Object object = new Object() ;

                     count++ ;

                     System.out.println(“count = ” + count) ;

          }

          當有5個用戶提交數據時,因為Servlet是處理多線程的,所以可能出現,第四個用戶的程序已經執行了count++,而第五個用戶剛執行完Object object = new Object() ,就會出現數據不一致性,因為當前有5object對象,但是count卻是4;

          解決方案一:

          Private boolean flag = false

          Private int count = 0 ;

          Public void dopost(HttpServletRequest request,HttpServletResponse response){

                     synchronized(flag){

                              Object object = new Object() ;

                              count++ ;

          }                

                     System.out.println(“count = ” + count) ;

          }

          用同步程序塊解決多線程的問題,這樣在同一時刻就只能有一個訪問該程序塊了;

          解決方案二:

          Private int count = 0 ;

          Public void dopost(HttpServletRequest request,HttpServletResponse response)

          Implements SingleThreadModel{

                     Object object = new Object() ;

                     count++ ;

                     System.out.println(“count = ” + count) ;

          }

          實現SingleThreadModel接口,可以解決多線程問題;

          8.       什么是servlet過濾器?

          也是一個java類,只是它實現了Filter這個接口;

          9.       servlet過濾器的生命周期;

          初始化:自動調用init(FilterConfig config)方法

          執行:自動調用doFilter()方法;

          銷毀:自動調用destory()方法;

          10.   servlet過濾器有什么用途?

                個人認為目前自己用到的Servlet過濾器的主要用途:是安全性檢查

                   當然過濾器在Servlet之前也可以修改請求,要是在Servlet之后,也可以修改響應; 

          11.   servlet過濾器怎樣部署?

          web.xml中:

          <web-app>

              <filter>

                <filter-name>myFilter</filter-name>

                <filter-class>filterPage.MyFilter</filter-class>

          </filter>

          <filter-mapping>

                <filter-name>myFilter</filter-name>

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

          </filter-mapping>

          </web-app>

          這樣就是說要訪問WEB-INF下的Todd包下的jspServlet的話,就必須要先通過myFilter這個類;

          posted on 2007-04-08 13:31 田亮 閱讀(4456) 評論(6)  編輯  收藏 所屬分類: J2EE總結

          評論

          # re: J2EE總結--Servlet技術 2007-04-08 15:38 山風小子

          好久沒有復習基礎知識了,借此溫故而知新,謝啦:)  回復  更多評論   

          # re: J2EE總結--Servlet技術 2007-04-08 17:51 good

          非常好,寫出自己見解!  回復  更多評論   

          # re: J2EE總結--Servlet技術 我的所有隨筆屬于個人總結,有不足之處請回復指出 2007-04-09 10:39 BeanSoft

          不錯, 高手就是一步步學出來的!  回復  更多評論   

          # re: J2EE總結--Servlet技術 我的所有隨筆屬于個人總結,有不足之處請回復指出 2007-04-13 17:35 fox

          寫得非常好呀  回復  更多評論   

          # re: J2EE總結--Servlet技術 我的所有隨筆屬于個人總結,有不足之處請回復指出 2007-04-18 11:23 sunnt

          寫得很詳細呀,嘻嘻!  回復  更多評論   

          # re: J2EE總結--Servlet技術 我的所有隨筆屬于個人總結,有不足之處請回復指出 2007-09-02 22:40 dsfdf

          大哥,你寫錯拉一個地方啊。
          <url-pattern>myServletURL</ url-pattern >應為:
          <url-pattern>/myServletURL</ url-pattern >
          你少了一個“/”

            回復  更多評論   

          導航

          統計

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          MyHome

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 铁岭县| 正定县| 瑞金市| 清苑县| 柳江县| 涟源市| 平遥县| 常宁市| 平乡县| 来凤县| 剑河县| 佳木斯市| 凌海市| 胶州市| 垦利县| 九寨沟县| 鸡西市| 凉城县| 诸暨市| 泸定县| 泽州县| 新乐市| 雷州市| 吉安县| 固镇县| SHOW| 宜良县| 庆安县| 龙陵县| 松原市| 凌云县| 镇赉县| 兴山县| 普格县| 彭水| 章丘市| 梅州市| 八宿县| 芒康县| 兴安盟| 循化|