天天看點

JSP學習筆記-基礎知識

B/S     全名     Browser/Server

C/S     全名     Client/Server

JSP     全名    Java Server Pages

JNDI    全名    Java Naming Directory Interface

1.URL的組成包括三部分

    1.協定    2.主機名(端口号)    3.資源路徑

2.Web容器處理JSP檔案的三個步驟

    1,翻譯階段    2,編譯階段    3,執行階段

3.JSP頁面的組成部分

    1,靜态内容    

    2.指令    <%@ %>

    3.腳本元素(小腳本<% %>,表達式<%= %>,聲明<%! %)    

    4,标準動作

        1.<jsp:forward page=""></jsp:forward>            //執行頁面轉換.将請求的處理轉發到下一個頁面

        2.<jsp:include></jsp:include>                //用于動态引入一個JSP頁面

        3.<jsp:param name="" value=""></jsp:param>        //用于傳遞參數.必須與其他支援參數的标簽一起使用

        4.<jsp:plugin></jsp:plugin>                //用于下載下傳JavaBean或Applet到用戶端執行

        5.<jsp:useBean id="name" classname="classname" scope=""></jsp:useBean>                //用于建立一個javaBean的執行個體

        6.<jsp:setProperty name="" property="" value=""></jsp:setProperty>            //用來設定JavaBean執行個體的屬性

        7.<jsp:getProperty name="" property=""></jsp:getProperty>            //用來獲得JavaBean執行個體的屬性

    5,注釋(1.HTML注釋<!-- 注釋内容--> 2.JSP注釋<%-- 注釋的内容--%> 3.腳本内的java注釋 單行注釋// 多行注釋 )

4.JSP的指令元素

    <%@ language="java" import="java.util.*,java.sql.*"% contentType="text/html;charset=UTF-8" pageEncoding="utf-8" errorPage="error.jsp" isErrorPage="true" %>

    //language目前JSP的編寫語言

    //import需要導入的包

    //contentType傳回到客戶界面的顯示方式和編碼方式

    //pageEncoding目前JSP頁面的編碼方式

    //errorPage通過指定頁面來顯示錯誤的資訊

    //isErrorPage    通過設定true或false來設定是否顯示錯誤的頁面能否調用Exception對象來顯示錯誤的資訊

5.JSP内置對象

    1.out     out.print();    用于向用戶端輸出資料

    2.request        用于處理用戶端的請求資訊

        1.String     getParameter(String name);        根據頁面表單獲得頁面送出的資料

        2.String[]     getParameterValues(String name);    擷取一個頁面表單元件對應多個值時的使用者的請求資料

        3.void         setCharacterEncoding(String charset);    指定每個請求的編碼,用于解決編碼亂碼的的問題

        4.Object     request.getRequestDispatcher(String path);    傳回一個javax.servlet.RequestDispatcher對象,該對象的forward(request,response)方法用于轉發請求

        5.String     getMethod();                傳回目前頁面表單的送出方式

        6.String     getContextPath();            傳回目前Web應用的程式名

        7.String     getRequsetURI();            傳回應用程式後面的檔案路徑

        8.String     getRequestURL();            傳回應用程式的完整檔案路徑

        9.String    getQueryString();            獲得位址?後面的參數内容,隻對get方式的表單送出有效

        10.String    getHeader("referer")             獲得跳轉到目前Servlet的路徑

    3.response        用于響應用戶端的請求并向用戶端輸出資訊

        1.void        addCookie(Cookie cookie);            在用戶端添加Cookie

        2.void        setContentType(String type);            設定Http響應的contentType類型

        3.void        setCharacterEncoding(String charset);        設定相應所采取的編碼類型

        4.void        sendRedirect(String path);            将請求重新定位到一個不同的URL        

    4.session        用來存儲有關使用者回話的資訊

        1.void        setMaxInactiveInterval(int interval);        設定session的非活動時間

        2.int        getMaxInactiveInterval();            獲得session的有效活動事件.以秒為機關

        3.void        setAttribute(String key,Object object);        以key/value的形式來儲存對象值

        4.Object    getAttribute(String key);            通過key來擷取對象值

        5.vioid     removieAttribute(String key);            移除key值

        6.String    getId();                    擷取session的Id

        7.void         invalidate();                    設定session對象失效

        8.boolean    isNew();                    檢測是否為新會話對象

    5.application        用來實作使用者之間的資料共享

        1.void        setAttribute(String key,Object object);        以key/value的形式來儲存對象值

        2.Object    getAttribute(String key);            通過key來擷取對象值

        3.String     getRealPath();                    傳回相對路徑的真實路徑

    6.page

    7.config

    8.exception

    9.pageContext

 6.JSP外置對象

    1.Cookie    

        1.void         setMaxAge(int time);                設定Cookie的有效期.以秒為機關

        2.int          getMaxAge();                    獲得Cookie的有效期,以秒為機關

        3.void         setValue(String value);                在Cookie建立後,為Cookie賦予新的值

        4.String     getValue();                    擷取Cookie的值

        4.String      getName();                    擷取Cookie的名稱

7.資料庫連接配接池

    1.JNDI    全名    Java Naming Directory Interface

    2.Environment的屬性設定    <Environment name="news" value="hello word" type="java.lang.String" />

    3.context.xml的Resource屬性設定    <Resource

                    name="news"                //資料源名字

                    auth="Container"            //資料源管理方式

                    type="javax.sql.DataSource"        //資料源類型

                    maxActive="100"                //資料源最大通路

                    maxIdle="30"                //資料源空閑設定

                    maxWait="10000"                //最大等待時間

                    username="scott"            //登入使用者名

                    password="13717013727"            //登入密碼

                    driverClassName="oracle.jdbc.driver.OracleDriver"    //驅動包名

                    url="jdbc:oracle:thin:@lovalhost:1521:orcl"        //資料庫連接配接路徑

                />

    4.web.xml        <resource-ref>

                    <description>news</description>        //對所引用資源的說明

                    <res-ref-name>news</res-ref-name>    //資源引用的JNDI名字

                    <res-type>javax.sql.DataSource</res-type>    //引用資源的類名字

                    <res-auth>Container</res-auth>            //引用的資源的管理方式

                </resource-ref>

    5.JNDI獲得資料源對象的步驟

            1.配置context.xml檔案

            2.配置web.xml檔案

            3.添加驅動到/lib目錄下

            4.進行代碼編寫,使用lookup()方法獲得資料源對象

                Context context=new InitialContext();

                DataSoure ds=(dDataSource)context.lookup("java:comp/env/news");

                Connection con=ds.getConnection();

    6.JavaBean    是java中可以跨平台的重要元件

            在應用中主要負責封裝資料和封裝業務層處理

            javaBean的定義要遵守一定的規則    公有類,并提供無參的共有的構造函數

                            屬性私有    具有公有的通路屬性的set和get方法

8.分頁查詢

    1.計算總頁數    總頁數=(總記錄數-1)/每頁顯示數量+1;

    2.分頁查詢的SQL語句    select * from (select rownum as r,t.* from tables t ) where r between pageSize*(pageIndex-1)+1 and pageSize*pageIndex;

9.檔案上傳下載下傳

    1.File類的常用方法

        1.void saveAs(String destFilePathName);            将檔案儲存,參數destFilePathName是儲存的檔案名

        2.void saveAs(String destFilePathName,int optionSaveAs);将檔案儲存,參數destFilePathName是儲存的檔案名,optionSaveAs表示儲存的選項

        3.boolean isMissing();                    判斷使用者是否選擇了檔案.即對應的表單項是否為空

        4.String getFieldName();                擷取目前表單中上傳檔案所對應的表單項的名稱name值

        5.String getFileName();                    擷取上傳檔案的名稱,不包含路徑

        6.String getFilePathName();                擷取上傳檔案的名稱,包含檔案的路徑

        7.String getFileExt();                    擷取檔案的擴充名

        8.String getContentString();                擷取檔案的内容.傳回值為字元串類型

        9.int     getSize();                    擷取上傳檔案的大小.機關為位元組

    2.Files類的常用方法

        1.int     getCount();                    獲得檔案上傳的數目

        2.File     getFile(int index);                獲得指定位置的File檔案對象

        3.long     getSize();                    獲得上傳檔案的總長度

        4.Collection getCollection();                将上傳的所有檔案對象以Collection的形式傳回

    3.SmartUpload類的常用方法        out.clear();    out=pageContext.pushBody();    //實作檔案的下載下傳功能

        1.void     initialize(PageContext pagecontext);        執行上傳和下載下傳的初始化工作

        2.void     upload();                    實作檔案的上傳

        3.void     downloadFile(String str1,String str2,....);    實作檔案的下載下傳

        4.int     save(String pathName);                将指定檔案儲存到指定的目錄下面,并傳回儲存的檔案的個數

        5.void  setAllowedFileList(String exeList1,String exeList2,...);允許上傳的檔案的類型

        6.void    setDeniedFilesList(String exeList1,String exeList2,...);不允許上傳檔案的類型

        7.void  setMaxFileSize(long size);                設定每個上傳檔案的最大長度

        8.void  setTotalMaxFileSize(long size);                設定上傳檔案的總長度

    4.擷取表單的資料

        1.getParameter();                        擷取SmartUpload包裝的Request對象

        2.getParameter(String name);                    擷取指定參數的值

        3.getParameterValues(String name);                擷取一個頁面表單對應多個應用值的請求

    5.實作檔案的上傳

        SmartUpload su=new SmartUpload();

        su.initialize(pageContext);            //初始化su對象

        su.setCharset("utf-8");                //設定編碼

        su.setAllowedFilesList("jpg,gif");        //設定允許上傳對象

        su.setDeniedFilesList("doc,txt");        //設定禁止上傳對象

        su.setMaxFileSize(1000);            //設定單個檔案的大小

        su.setTotalMaxFileSize(10000);            //設定上傳檔案的總長度

        su.upload();

        File file=su.getFiles().getFile(0);

        if(!file.isMissing()){

            file.saveAs("/upload/"+file.getFileName(),SmartUpload.SAVE_VIRTUAL);

        }

    6.實作檔案的下載下傳

        SmartUpload su=new SmartUpload();

            su.initialize(pageContext);

            su.setCharset("utf-8");

            su.setContentDisposition(null);

            su.downloadFile("/upload/hehe.txt");

            out.clear();

            out=pageContext.pushBody();

10.使用分層實作業務處理

    1.分層開發中最常用的三層架構

        1.表現層        用于使用者展示和互動

        2.業務邏輯層        提供業務邏輯處理的封裝

        3.資料通路層        提供對資料的讀取操作和儲存

    2.分層開發應該遵循的原則

        1.上層依賴其下層,依賴關系不跨層

        2.下一層不能調用上一層

        3.下一層不依賴于上一層

        4.在上一層中不能出現下一層的概念

    3.分層開發的優勢

        1.職責劃厘清晰

        2.無損替換

        3.代碼複用

        4.降低了系統内部的耦合性

11.EL和JSTL

    1.EL    Expression Language    表達式語言

        1.EL表達式的特點    自動轉換類型    使用簡單

        2.EL的文法${表達式}    

        3.EL隐式對象

            1.作用域通路對象

                1.pageScope        與頁面作用域(page)中的屬性相關聯的Map類

                2.requestScope        與請求作用域(request)中的屬性相關聯的Map類

                3.sessionScope        與會話作用域(session)相關聯的Map類

                4.applicationScope    與應用程式作用域(application)相關聯的Map類

            2.參數通路對象

                1.param            按照參數名稱通路單一請求值的Map對象

                2.paramValues        按照參數名稱通路數組請求值的Map對象

            3.JSP隐式對象

                1.pageContext        提供對頁面資訊和内置對像的通路

    2.JSTL    Java Server Pages Standard Tag Library    JSP标準标簽庫

        1.JSTL的标簽庫        <%@ taglib uri="http://java.sun.com/jsp/jstl/code" prefix="c" %>

            1.核心标簽庫

                1.通用标簽

                    1.<c:set></c:set>    用于定義變量,并将變量儲存在JSP範圍内或者javaBean屬性中

                        1.<c:set var="variable" value="v" scope="scope"></c:set>           将value值存儲在範圍為scope的變量variable中

                            var屬性的值是設定的變量名

                            value屬性設定的值是賦予變量的值

                            scope屬性設定的是變量的作用域 可選值有page,request,session和application

                        2.<c:set target="target" value="v" property="property"></c:set>       将value值存儲在對象的屬性中

                            target設定要操作的對象,可以使用EL表達式表示

                            value屬性是賦予對象屬性的值

                            property屬性對應對象的屬性名

                    2.<c:out></c:out>    用來顯示資料的内容,類似與JSP的<%= %>

                        1.<c:out value="v"></c:out>                        不指定預設值

                        2.<c:out value="v" default="default"></c:out>                指定預設值

                    3.<c:remove></c:remove>    用于移除指定範圍内的變量

                        1.<c:remove var="v" scope="scope"></c:remove>

                            value屬性用來隻待删除的名稱

                            scope屬性是指删除變量所在的範圍   可以指定的屬性有page request session和application 預設為page

                2.條件标簽

                    1.<c:if test="condition" var="varName" scope="scope"></c:if>

                        test屬性是此條件标簽的判斷條件

                        var屬性定義變量,該變量存放判斷以後的結果,該屬性可以省略

                        scope屬性是指var變量的存儲範圍,該屬性可以省略

                    2. <c:choose>                        //多項選擇标簽.相當于switch/case

                            <c:when test="${age>11 }">小孩</c:when>

                            <c:when test="${age>15 }">未成年孩</c:when>

                            <c:when test="${age>18 }">成年</c:when>

                            <c:otherwise>中年人</c:otherwise>

                        </c:choose>    

                3.疊代标簽

                    1.<c:forEach var="varName" items="collectionName"vatStatus="varStatusName" begin="beginIndex" end="endIndex" step="step" ></c:forEach>            周遊集合對象的成員

                        var屬性是對目前成員的引用

                        items是指被疊代的集合對象

                        varStatus屬性用英語存放var引用的成員的相關資訊,如索引

                        begin屬性表示開始的位置.預設為0,該屬性可以省略

                        end屬性表示結束的位置,該屬性可以省略

                        step屬性表示循環的步長,預設為1,可以省略

                    2.<c:forEach var="varName" varStatus="varStatusName" begin="beginIndex" end="endIndex" step="step"></c:forEach>    指定語句的循環次數

                        var屬性是對目前成員的引用

                        varStatus屬性用英語存放var引用的成員的相關資訊,如索引

                            .index            //相對于集合的下标

                            .count            //相對于查詢結果而言,查詢目前記錄的數

                            .first            

                            .last

                        begin屬性表示開始的位置.預設為0,該屬性可以省略  不能小于0

                        end屬性表示結束的位置,該屬性可以省略          不能小于0

                        step屬性表示循環的步長,預設為1,可以省略    

                    3.<c:forTokens items="" delims=",;:" var="" begin="" end="" step="" varStatus=""></c:forTokens>    通過分割字元來截取字元串

                        var屬性是對目前成員的引用

                        varStatus屬性用英語存放var引用的成員的相關資訊,如索引

                            .index

                            .count            //相對于查詢結果而言,查詢目前記錄的數

                            .first

                            .last

                        begin屬性表示開始的位置.預設為0,該屬性可以省略  不能小于0

                        end屬性表示結束的位置,該屬性可以省略          不能小于0

                        step屬性表示循環的步長,預設為1,可以省略                    

            2.格式化與國際化标簽庫

            3.sql标簽庫

            4.XML标簽庫

            5.标簽函數庫

                <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

                1.${fn:contains(name, searchString)}            //查詢是否包含該位元組

                2.${fn:containsIgnoreCase(name, searchString)}        //包含忽略大小寫

                3.${fn:endsWith(filename, ".txt")}            //查詢該檔案的名字是否以指定的字尾結尾

                4.${fn:escapeXml(param:info)}

                5.${fn:indexOf(name, "-")}                //查詢該字元出現的起始位置

                6.${fn:join(array, ";")}                //通過指定字元串拼接某數組和集合

                7.${fn:length(str)}                    //查詢某指定字元或數組集合的長度

                8.${fn:replace(text, "-", "&#149;")}            //用指定字元替換該字元串中的指定内容

                9.${fn:split(customerNames, ";")}            //用指定字元分割該字元串

                10.${fn:startsWith(product.id, "100-")}            //ervlet查詢該内容是否以該字元開頭

                11.${fn:substring(zip, 6, -1)}                //提取該内容中指定長度的位元組  .當end為-數,則截取起始位置後面的所有部分

                12.${fn:substringAfter(zip, "-")}            //提取該内容指定字元之後的内容

                13.${fn:substringBefore(zip, "-")}            //提取該内容指定位元組之前的内容

                14.${fn:toLowerCase(product.name)}            //将指定内容轉換為小寫

                15.${fn:toUpperCase(product.name)}            //将指定内容轉換為大寫

                16.${fn:trim(name)}                    //忽略大小寫

12.自定義servlet

        1.實作Servlet

        2.繼承GenericServlet

        3.繼承HttpServlet

        4.web.xml    

            1.初始化參數的設定

                <init-param>

                        <param-name>helloname</param-name>

                        <param-value>hellovalue</param-value>

                   </init-param>

            2.全局參數的設定

                <context-param>

                    <param-name>contextparamname</param-name>

                    <param-value>contextparamvalue</param-value>

                </context-param>

        5.Servlet分為三大類

            1.标準的servlet

            2.過濾器

            3.監聽器

        6.什麼是Servlet            Servlet是一個符合特定規範的Java程式,在伺服器端運作,主要用來處理用戶端的請求并做出響應

        7.servlet的生命周期

            1.加載和執行個體化                    吃執行個體由servlet容器進行建立

            2.初始化        init();

            3.服務            service();        内部實作doGet()和doPost();

            4.銷毀            destory();        指明那些資源可以被系統回收.而不是由該方法進行回收

        8.Servlet接口        定義了所有Servlet需要實作的方法

            1.init();        初始化Servlet

            2.service();        Servlet服務

            3.destory();        銷毀servlet

            4.getServletInfo();    用于獲得Servlet的資訊

            5.getServletConfig();    傳回ServletConfig對象

        9.GenericServlet        實作了Servlet接口和ServletConfig接口

            1.void  init(ServletConfig config);        調用Servlet接口中的init()方法...該方法裡面的參數可以省略

            2.String getInitParameter(String name);        傳回名稱為name的初始化參數

            3.ServletContext getServletContext();        傳回ServletContext對象的引用

        10.HttpServlet            繼承了GenericServlet類

            1.void service(ServletRequest request,ServletResponse response);    調用GenericServlet類中的service()方法的實作

            2.void doXXX(ServletRequest request,ServletResponse response);        根據請求的方式的不同.調用不同的doGet().doPost()方法

        11.Servlet的web.xml檔案的配置

            <servlet>

                <servlet-name>LoginServlet</servlet-name>

                <servlet-class>cn.servlet.LoginServlet</servlet-name>

                <load-on-startup>1</load-on-startup>

            </servlet>

            <servlet-mapping>

                <servlet-name>LoginServlet</servlet-name>

                <url-pattern>/LoginServlet</url-pattern>

            </servlet-mapping>

        12.Servlet初始化參數

            1.局部參數            獲得用this.getInitParameter("initName");

            <servlet>

                <init-param>

                    <param-name>initName</param-name>

                    <param-value>initValue</param-value>

                </init-param>

            </servlet>

            2.上下文參數            獲得用this.getServletContext().getInitParameter("contextName");

            <servlet>

                <context-param>

                    <param-name>initName</param-name>

                    <param-value>initValue</param-value>

                </context-param>

            </servlet>