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, "-", "•")} //用指定字元替換該字元串中的指定内容
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>