I want to fly higher
          programming Explorer
          posts - 114,comments - 263,trackbacks - 0

              因為太長時間沒有做java web開發了,所以寫這邊隨筆用來簡單回顧一下jsp/java web的相關知識

          1.tomcat中server.xml,<Context>表示一個web應用上下文路徑;
           docBase:指明一個Web應用所在的物理文件夾名
            path:定義Web應用的上下文路徑名,上下文路徑第1個字符一般為“/”。
           reloadable:此屬性取值為“true”時,表示讓Catalina監控Web應用中WEB-INF\classes文件夾和WEB-INF\lib文件夾下文件的變化
          2.tomcat默認的虛擬主機是localhost,它默認的Web應用發布文件夾是webapps。在此文件夾下發布的Web應用通過URL即可直接訪問,不需要在<Context>中進行配置
          3.Servlet將java代碼與網頁設計混合寫在一起,不利于維護。JSP網頁版面的設計與維護,比Servlet要直觀和容易。JSP頁面最終會被JSP服務器編譯成一個Servlet程序來運行。
          4.JSP采用“先編譯后執行”的工作方式。一個JSP網頁首次被訪問時,Web服務器執行編譯操作.(多線程運行)
          5.<% 符合Java語言的Java語句 %>
          6.jsp執行過程:
                   servlet
          request->*.jsp->jsp parser->*.java->jsdk(servlet分析器)->*.class->執行->response
          7.html注釋<!-- --> jsp注釋<%-- --%>
           jsp聲明<%!...%>,聲明后的變量,方法或類都是jsp編譯后的Servlet的類內成員
          8.Tomcat把<%  %>標記內的Java代碼段放在Servlet實現類 _jspService()方法的try{}內,所以在<%%>內定義的變量屬于局部變量,并且作用范圍僅限于try{}內。如果有多個<%  %>標記,則按出現的先后順序轉譯到try{}內。
          9.jsp表達式<%= expression %>,編譯后Servlet為:out.println(expression);
          10.jsp指令元素<%@ 指令元素  屬性="值"  %>,主要包括三個:include、page和taglib;主要供JSP容器使用,為JSP容器提供相關的頁面屬性信息,用于指示JSP容器如何正確地翻譯代碼,或者執行特定的操作
           include:文件包含,是在JSP容器把JSP網頁翻譯成Servlet程序時,將指定文本文件的內容嵌入Servlet程序中,替換include指令
             <%@ include file="" %> 靜態綁定
           page:用于設置當前JSP頁面的屬性
            默認情況下已經被加入到當前JSP頁面的類,包括java.lang.*;、java.servlet.*;、java.servlet.jsp.*; java.servlet.http.*;
            isThreadSafe,表示生成的servlet是否是線程安全的;如果true的話,表示線程安全,JSP容器會以多線程方式運行JSP頁面
          11.jsp動作組件:JSP動作組件是一些XML語法格式的標記,被用來控制Web容器的行為
           <jsp:include>動態包含
           <jsp:forward>使程序從當前頁面跳轉到另一個目標頁面運行,瀏覽器地址欄不會發生任何變化;forward動作語句后的代碼不能執
           行(已經帶著request請求跳轉到其他頁面了)
           <jsp:param>,用來用于傳遞參數信息
           <jsp:plugin>,插入一個applet或Bean
           < jsp:setProperty>:設置JavaBean的屬性
           < jsp:getProperty>:輸出某個JavaBean的屬性
           < jsp:useBean>:尋找或者實例化一個JavaBean
          12 jsp隱含對象
           簡化程序設計,JSP規范定義了常用的8個隱含對象(implicit objects),這些隱含對象不需要在JSP頁面中用new關鍵字來創建,而是
           由Servlet容器來創建與管理,并傳遞給JSP頁面的Servlet實現類使用。
           out(JspWriter),requeset(HttpServletRequest),response(HttpServletResponse),session(HttpSession),application(ServletContext),
           exception(Throwable),config(ServletConfig),page(Object),pageContext(PageContext)

           out.print()/out.println();out.write()?PrintWriter?

           request.getParameter()/getParameterNames()/getParameterValues()/
           兩個JSP/Servlet程序間要交換數據時,可通過request作用范圍變量來實現(getAttribute/setAttribute)
           [forward方式跳轉,會傳遞request,超鏈接與在瀏覽器地址欄輸入該頁面地址的訪問方式一樣,都是重新發送一個請求到鏈接頁面]
           getRequestDispatcher("''),轉發器,獲得目標資源的轉發器,通過轉發器將當前Servlet程序的request和response對象轉發給目標資源,并跳轉至目標資源上運行程序,這樣,目標資源就可通過request對象讀取上一資源傳遞給它的request屬性
           removeAttribute()/setCharacterEncoding()/getProtocol/getRemoteAddr()/

           response.flushBuffer()/setBufferSize()/getWriter(PrintWriter)/setContentType()/setCharacterEncoding()/sendError()/setHeader()/sendRedirect("")/
           response通過文件輸出流實現下載

           application對象被同一個上下文(同一個web應用)中的所有jsp/servlet程序共享,tomcat服務器開啟的時候即被創建;
           application訪問web.xml中配置的<Context-param>/getInitParameter("")/attribute相關方法/log()/

           config常用于給一個Servlet程序傳送初始化參數

           exception,JSP頁面在運行時發生異常,系統會生成一個異常對象

           page對象表示“當前”Servlet程序對象,類似于Java中的“this”關鍵字

           pageContext獲取其他隱含對象/轉發跳轉或包含
          13 會話跟蹤-
           Cookie/response.addCookie()/request.getCookies()/
           URL重寫實現參數傳遞/隱藏表單域實現參數傳遞/

           HTTP協議是一種無狀態的協議,客戶端每次打開一個Web 頁面,它就會與服務器建立一個新的連接,發送一個新的請求到服務器,服務器處理客戶端的請求,返回響應到客戶端,并關閉與客戶端建立的連接。當客戶端發起新的請求,那么它重新與服務器建立連接,因此服務器并不記錄關于客戶的任何信息。

           session-session會話,通常把從登錄進入系統到注銷退出系統之間所經歷的時間,稱為一次session通信周期;jsp中的Session會話:一次會話由客戶打開一個瀏覽器開始到關閉瀏覽器或退出會話結束,用戶重新打開1個瀏覽器并重新輸入url,或訪問2個web應用都是開啟不同的會話;session隱含對象由Web服務器創建,并存儲在服務器端;一次會話會創建一個session對象,在一次會話期 間,web應用內的所有程序共享一個session對象
           attribute相關方法/isNew()/getId()/invalidate()/setMaxInactiveInterval()/
          14 Servlet/ServletConfig/->GenericServlet->HttpServlet
           servlet工作流程-(1)客戶機將請求發送到服務器。
              (2)服務器上的Web容器實例化Servlet。
              (3)Web容器將請求信息發送到 Servlet。
              (4)Servlet 創建一個響應,并將其返回到Web容器。
              (5)Web容器將響應發回客戶機。
              (6)服務器關閉或Servlet空閑時間超過一定限度時,調用destory()方法退出。
            生命周期-創建實例->init()->service()->destroy()
            init()-兩種方式init()/init(ServletConfig config){super.init(config)}
            sevice(HttpServletRequest req,HttpServletResponse resp)

            Servlet體系結構是建立在Java多線程機制之上的,當兩個或多個線程同時訪問同一個Servlet時,可能會發生多個線程同時訪問同一資源的情況,數據可能會變得不一致。對于Servet中成員變量,并發訪問時需要采取線程同步的措施確保線程安全

            destroy()-服務器刪除servlet實例調用,程序員可以覆寫它完成,關閉數據庫連接等清理工作
          15.Servlet API-javax.servlet和javax.servlet.http
           javax.servlet.GenericServlet--獨立于協議
           javax.servlet.HttpServlet,--嵌入了對Http協議的支持

           把數據傳遞給客戶端
            在Servlet中,可以通過直接向輸出流寫入數據來生成HTML頁面;使用PrintWriter把數據發送回客戶端
            PrinteWriter out=response.getWriter();out.println(“<HTML>Inside HTML</HTML>”);
            在開始進行任何輸出之前,必須使用setContentType()方法指定MIME類型
            response.setContentType(“text/html,charset=gb2312”);
          16.訪問servlet,需要在web.xml進行配置

          1<servlet>
          2   <servlet-name>First</servlet-name>
          3  <servlet-class>com.servlet.FirstServlet</servlet-class>
          4 </servlet>
          5 <servlet-mapping>
          6   <servlet-name>First</servlet-name>
          7  <url-pattern>/first</url-pattern>
          8 </servlet-mapping>
          9


           17.WEB-INF\classes目錄存放Servlet類文件
           WEB-INF\lib目錄存放Web應用程序所使用的Java庫文件(JAR文件)
          18.web.xml中<servlet>定義的<init-param>可以通過servlet的getInitParameter()方法或者getServletConfig().getInitParameter()方法
          19.過濾器Filter鏈式
           request->filter1->filter2....->目標資源
           response <-   ..filter<-

           javax.servlet.Filte接口
            init()

          1doFilter(ServletRequest request, ServletResponse response,FilterChain chain)過濾器的業務邏輯代碼在doFilter()方法內實現 
          2  {     程序段1
          3   chain.doFilter(request, response);
          4   程序段2
          5  }


            destroy()
           javax.servlet.FilterConfig接口
           javax.servlet. FilterChain接口
           
           web.xml配置

           1<filter>
           2  <filter-name>
           3  <filter-class>
           4  <init-param>
           5 </filter>
           6 <filter-mapping>
           7  <filter-name>
           8  <url-pattern>//需要過濾的url
           9  <dispatcher>//過濾請求類型
          10 </filter-mapping>

           

           過濾器的過濾執行次序與他在web.xml中定義的次序一致
          20 偵聽器主要偵聽Servlet容器中的事件,所偵聽的事件發生后,容器激活偵聽器,執行預定的操作。偵聽器偵聽的事件主要是JSP
          隱含對象application、session、request對象上發生的事件,主要有隱含對象的創建與銷毀事件,相關作用范圍變量的創建、修改和銷
          毀事件。
           web.xml:

          1<listener>
          2  <listener-class>
          3 </listener>

           

           javax.servlet.ServletRequestListener接口,主要偵聽request隱含對象的創建與銷毀事件
           ServletRequestAttributeListener接口,偵聽request屬性的變化
           javax.servlet.http.HttpSessionListener接口,偵聽上下文中session對象的創建與銷毀事件
           javax.servlet.http. HttpSessionAttributeListener接口,偵聽session屬性的變化
           javax.servlet.ServletContextListener接口,偵聽Web應用Sevlet上下文的初始化事件和銷毀事件
           javax.servlet.ServletContextAttributeListener接口 ,偵聽application屬性事件
          21.JavaBean
           javabean即pojo類,plain old java objects,簡單的java對象
           jsp中使用JavaBean
            1.<% %>內new
            2.jsp動作<jsp:useBean><jsp:setProperty><jsp:getProperty>
             注意userBean中class(找不到則創建新的)和type的區別,還有scope
           利用外部的javabean,文件上傳,email,poi等
          22.數據庫訪問-jdbc
           tomcat\conf\context.xml中配置數據庫連接池<Context>
           javax.sql.DataSource

          1java.sql.Blob blob = rs.getBlob("");
          2 byte[] bytes = blob.getBytes(,);


          23.MVC
           struts1.x
            controller-ActionServlet/Action
            struts-config.xml
            ActionServlet讀取Struts-config.xml中的ActionMapping對象,每個ActionMapping對象實現了一個請求到一個Action對象之間的映
            射。Action對象會調用javabean完成業務操作.
           流程:login.jsp->submit->login.do->web.xml->servlet(ActionServlet,struts自帶)->讀取struts-config.xml->action/actionform
           (表單bean)->execute()
          24.EL與JSTL
           EL表達式引入EL表達式語言目的之一是為JSP頁面計算;訪問和打印數據提供方便,盡可能減少JSP頁面中的Java代碼,使JSP頁
           面更簡潔、更易于開發和維護

           EL表達式語言的基本語法為: ${表達式}
           EL表達式通過“.”算符訪問JavaBean中的屬性,${JavaBean名.屬性名}

           JSTL的全稱是JSP標準標記庫(JSP Standard Tag Library,JSTL),它是SUN公司為簡化JSP頁面設計而提出的一種技術規范;

           *.properties文件稱為資源文件,在資源文件中,以“key=value”的形式存儲一個變量及它的值,一行寫一對“key=value”;方便消息的集中存儲和管理 ;方便消息的國際化

          posted on 2011-12-26 23:20 landon 閱讀(2731) 評論(4)  編輯  收藏 所屬分類: Program

          FeedBack:
          # re: jsp/java web基礎知識回顧
          2011-12-27 11:46 | lishl
          好,總結的很細。謝謝  回復  更多評論
            
          # re: jsp/java web基礎知識回顧
          2011-12-28 17:23 | landon
          皮毛而已,共同學習。@lishl
            回復  更多評論
            
          # re: jsp/java web基礎知識回顧
          2011-12-29 17:19 | 阿童沐
          很不錯的,有很多細節我竟然都不太清楚...轉了...  回復  更多評論
            
          # re: jsp/java web基礎知識回顧
          2012-01-10 16:17 | 開啟
          學習了 不錯的總結  回復  更多評論
            
          主站蜘蛛池模板: 五峰| 塔城市| 孟州市| 隆林| 翁牛特旗| 华阴市| 阿克陶县| 海安县| 洞头县| 梧州市| 延长县| 绩溪县| 利津县| 繁昌县| 潞城市| 介休市| 专栏| 和硕县| 金堂县| 洪湖市| 武穴市| 芜湖市| 特克斯县| 云梦县| 响水县| 六盘水市| 东山县| 临夏县| 龙井市| 边坝县| 交口县| 清远市| 巩留县| 鸡东县| 师宗县| 罗平县| 兰州市| 洛川县| 黔南| 鄯善县| 工布江达县|