JavaWEB之Jsp基礎知識總結_慕課手記

理論
第一章 javaWEB基礎
一、桌面應用程序通常分爲兩種
B/S(Browser/Server)客戶端瀏覽器和服務器
C/S(Client/Server)客戶端和服務器端
二、WEB開發指的是
開發部署在遠程服務器上的應用程序,該應用程序能夠用瀏覽器訪問
WEB應用是基於HTTP(Hyper text transfer protcol ,超文本傳輸協議)的
而HTTP又是基於TCP/IP協議。客戶端瀏覽器發送相關請求(request)道遠程web服務器,又
遠程服務器效應而後返回請求(response)響應並傳輸給客戶端瀏覽器
三、HTTP請求的方法主要有
請求行(request line)
請求頭(request header)
請求體 (request body)
get:直接由瀏覽器地址發送url(能夠包含查詢字符串,查詢字符串有長度限制(64kb))
post:把由原來能夠經過查詢字符串發送到服務器上的數據改成http請求主體部分
(沒有數據大小限制,而且相對來講更安全,適用於提交form表單)
用的較少的有put和delete
表單中action表示web服務器端用於接收此表單數據的頁面
method採用哪種http請求方法

四、JSP WEB服務器(又叫作WEB容器):用於存儲html,jsp,servlet和其餘一些web組件html

五、Tomcat目錄結構
bin:用於存放一些Tomcat提供的命令
conf:Tomcat server的一些默認配置
logs:用於存放一些日誌文件的目錄
webapps:用於存儲web應用(WEB應用部署的目錄)
work:web引用的臨時目錄
七、如何部署jspWEB應用
在webapps目錄下建立一個文件夾,該文件夾是用於存儲jsp頁面的,而後再該目錄下建立
jsp頁面,並建立WEB-INF目錄,而後在WEB-INF目錄下建立web.xml應用描述文件
<welcome-file-list>
<welcome-file></welcome-file>
<welcome-file></welcome-file>
<welcome-file-list>
而後在conf目錄下的server.xml文件中b的<host>標籤內添加<context>標籤
<context path="項目名" docBase="項目名" debug="0" reloadable="true">
</context>
1)、path表示url訪問時所指定的應用名稱:
2)、docBase指明整個應用文件的位置(備註:該位置相對與webapps這麼目錄)
3)、debug表示調試等級
4)、reloadable表示重啓tomcat是是否從新加載
八、如何手動打包一個WAR包,並部署
建立一個web項目,進入到該目錄下,使用java -cvf 項目名.war 生成一個包含有web.xml和WEB-INF目錄的war包
九、jsp的執行過程
一、browser發送request請求
二、jsp頁面由JSP parser轉換成Servlet.java文件
在_jspService方法由out.write方法輸出JSP頁面中的內容
三、由web容器和jdk吧Servlet.java文件編譯成.class字節碼文件
四、執行.class字節碼文件生成response響應並傳輸給browser(瀏覽器)
第二章 JspServlet
一、Servlet的優勢有
一、移植性好
二、功能強大
三、性能好
四、可靠安全
二、Servlet包結構
javax.Servlet.
提供了基本的servlet基本庫,抽象類和接口
javax.Servlet.http.擴展和繼承了javax.Servlet.中的一些類和接口
如何插件一個咱們本身的servlet:

public abstract interface Servelt{
//獲得ServletConfig的初始化信息和啓動參數
ServlettConfig getServletConfig();
//被servlet容器調用,並根據初始化信息來建立一個servlet實例
void init(ServletConfig servletConfig)throwsException;
//接收用戶請求並返回用戶信息
void service(ServletRequest servletRequest ,ServletResponse servletResponse)
//返回Servlet相關信息,包括做者,版本,版權等
String getServletInfo()
//被Servlet容器調用,當該servlet不用的時候釋放掉所佔有的全部資源
void destroy()
}
總結:
一、Servlet接口只定義了servlet和客戶端聯繫的方法並無具體的實現
二、Servlet開始接收客戶請求前由servlet容器調用init()方法對其初始化並將該實例放到了服務器中
三、Service()方法被servlet容器調用接受客戶的請求處理
1)、ServletRequest類:包含客戶端的請求信息
2)、ServletResponse類:包含例客戶端作出的相應
該方法會拋出ServletException和IOException兩個異常
四、當Servlet實例長期不用,將被servlet容器經過垃圾處理器回收,並釋放其所佔的資源
三、javax.servlet.Servlet接口的派生類
//該類實現了Servlet接口並實現了部分方法,當建立普通的和HTTP無關的操做是能夠經過是能夠經過繼承該類來建立新的servlet
javax.servlet.GenericServlet
該類繼承了GenericServlet,並新增了HTTP有關的幾種操做
javax.servlet.http.HttpServlet
//用來處理Http get請求
doGet(HttpServletRequest request, HttpServletResponse response);
//用來處理Http post請求
doPost(HttpServletRequest request, HttpServletResponse response);
// 用來處理Http請求的,能夠處理get, post,delete
service(HttpServletRequest request, HttpServletResponse response);
四、如何建立及配置Servlet
一、新建Java類,繼承javax.Servlet.http.HttpServlet
二、實現service(HttpServletRequest servletRequest ,HttpServletResponse
servletResponse)throwservletException,IOException;
三、進入WEB-INF目錄,更新web.xml文件,增長Servlet描述信息,告訴web容器已經建立了一些Servlet
四、servlet說明:
<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
<servlet>
五、servlet url匹配:
<servlet-mapping>
<servlet-name><servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
五、Servlet生命週期
1)、在web容器啓動時,調用initial(ServletConfig)方法初始化Servlet
2) 、由響應的Http請求方法或者service()方法處理請求並返回響應
3)、當servlet使用時,web容器調用destroy()方法銷燬servlet
六、jsp的工做原理是什麼?
答:在一個jsp文件第一次被請求時,jsp引擎把該jsp文件轉換成servlet,而servlet則是一個java原文件,若是轉換時發現jsp文件有語法錯誤轉換過程將中斷
並向服務端或者客戶端發出錯誤信息不然則轉換成功,jsp引擎用javac把該java文件編譯成相應的class文件,而後經過構造方法建立一個servlet實例該實例的jspinit方法被執行
jspinit在整個servlet的生命週期只被執行一次。而後jspService方法被調用來執行客戶端瀏覽器的請求。對於每個請求jsp引擎都會建立一個新的線程來處理該請求因爲servlet
始終駐留在內存中因此須要是很是快的。若是.jsp文件被修改,服務器根據設置決定是否將該文件從新編譯,若是須要從新編譯,則將編譯結果取代內存中的servlet,並繼續上述處理過程。雖然JSP效率很高,但在第一次調用時因爲須要轉換和編譯而有一些輕微的延遲。此外,若是在任什麼時候候若是因爲系統資源不足的緣由,JSP引擎將以某種不肯定的方式將servlet從內存中移去。當這種狀況發生時jspDestroy()方法首先被調用, 而後servlet實例便被標記加入"垃圾收集"處理。 jspInit()及jspDestory()格式以下:可在jspInit()中進行一些初始化工做,如創建與數據庫的鏈接,或創建網絡鏈接,從配置文件中取一些參數等,在jspDestory()中釋放相應的資源java

七、三層WEB結構是哪三層?並解釋每一層的做用?
答:分別是:數據層,表示層,業務層
數據層:用於與數據打交道
表示層:用戶顯示的表示層
業務層,表示層與業務層的橋樑
三層的好處在於表示明確,擴展性好,邏輯性好,當要加開發成本
八、在IE地址欄中輸入http://localhost:8080/ServletExample/HelloServlet去訪問servlet,那麼請問該請求會去調用servlet的那個方法?爲何?
答:首先又客戶端ie瀏覽器發送請求,那麼服務器會調用相對的servlet程序去處理請求而servlet先會建立一個實例又實例去而後調用實例的init初始化方法,經過調用service方法去建立線程處理一個個客戶端的請求
九、請描述一下HttpServletReuqest和HttpServletResponse的做用
HttpServletRequest是專門用於Http協議的ServletRequest的子接口他用於封裝HTTP請求同HttpServletResponse同樣在servic()方法內部調用HttpServletRequest對象的各類方法請求,來獲取請求信息,web客戶端發送給web服務器的消息分爲請求行,請求消息頭,消息正文。
獲取請求行的相關信息有以下一些getMethod方法返回HTTP請求消息中的請求方式。
getRequestURI方法返回請求行中的資源名部分。
getQueryString 方法返回請求行中的參數部分。
getProtocol方法返回請求行中的協議名和版本。
getContextPath方法返回請求資源所屬於的WEB應用程序的路徑。
getPathInfo方法返回請求URL中的額外路徑信息。額外路徑信息是請求URL中的位於Servlet的路徑以後和查詢參數以前的內容,它以「/」開頭。
getPathTranslated方法返回URL中的額外路徑信息所對應的資源的真實路徑。
getServletPath方法返回Servlet的名稱或Servlet所映射的路徑。
獲取網絡鏈接信息的主要方法有以下一些:
getRemoteAddr方法返回發出請求的客戶機的IP地址,其格式爲「192.168.0.3」這種形式的字符文本。
getRemoteHost方法返回發出請求的客戶機的完整主機名,即「pc1.it315.org」這種格式。
getRemotePort方法返回發出請求的客戶機所使用的網絡接口的端口號。
getLocalAddr方法返回WEB服務器上接收當前請求的網絡接口的IP地址。
getLocalName方法返回WEB服務器上接收當前請求的網絡接口的IP地址所對應的主機名。
getLocalPort方法返回WEB服務器上接收當前請求的網絡接口的端口號。
getServerName方法返回當前請求所指向的主機名。
getServerPort方法返回當前請求所鏈接的服務器端口號。
getScheme方法返回請求的協議名,例如http、https或ftp。
getRequestURL方法返回客戶端發出請求時的完整URL。
至於獲取請求頭方法基本上就是get加上相應請求頭的名字。
第三章 JSP動做指令
一、指令標籤
<%@page %> page指令標籤:申明當前jsp頁面的編碼格式,文本類型,編寫語言和須要導入的類文件
import屬性爲導入相關類文件的權限定名,每一個類文件用","號隔開
errorPage屬性指明當頁面出現java異常時跳轉到某個頁面,errorPage="errorPage.jsp";
session="true/false"表示當前jsp頁面是否可使用Session會話對象
<%@ include file=""%>
表示動態的引用一個文件,若是是純html,則copy到主頁面中
若是其中還包含有java代碼,加載到主頁中後java代碼會被編譯
被包含的頁面中不須要出現主頁面中已經有的不重複出現的html標籤,只須要寫放在body標籤內的內容web

二、Java程序判斷
<%%>不能在程序片斷內定義方法,包含在此標籤內部的代碼最終會被放在由JSP引擎轉換成的Servlet java文件的_JspServlet方法內部
因此此處不能定義方法,定義的變量爲局部變量
<%!%>變量和方法定義的標籤,變量在多個線程間共享,變量和方法只在當前頁面有效,最好使用<%%>變量做爲Servlet的成員變量,方法爲成員方法
三、如何對變量進行輸出
1)、使用out.write()或者out.print()方法
2)、使用<%=變量名或方法%>也能夠直接對集合類型進行輸出,不須要加分號
四、JSP動做指令
<jsp:include>表示動態的包含另外的一個文件,而且可使用<jsp:param>給包含的文件傳遞參數在被包含的文件中使用request.getParamenter()方法獲取傳遞過來的參數
<jsp:include>指令每次都動態的加載頁面,因此頁面有修改,也能及時被從新編譯在
<jsp:forword>指令用於在web容器內部進行Jsp頁面的轉發,由一個jsp轉發到另一個jsp頁面而且可使用jsp:param指令傳遞參數給轉發到的頁面,在轉發的頁面中經過 request.getParamenter()方法獲取傳遞過來的參數;
<jsp:plugin>運用運行applet小應用程序,也可使用jsp:param傳遞參數
<jsp:useBean>能夠引用Bean對象
1)、<jsp:uesBean id="" class=""/>id表示Bean對象的名稱,在setProperty和getProperty中id用來表示Bean對象
2)、<jsp:setProperty name="" property="" value=""/>name表示哪一個Bean對象,引用uesBean裏的id,Property表示bean對象中某個屬性的名稱,value即爲該對對象 指定Property的值
3)、<jsp:getProperty name="" property=""/>而且setProperty和getProperty能夠不在uesBean使用uesBean所產生的對象放在PageContext頁面上下文中sql

五、請求狀態響應
1)、正常響應status code(狀態碼):200
2)、重定向一個頁面:302
3)、內部服務器錯誤(java代碼異常):500 如何處理此錯誤? 使用page指令的errorPage屬性
4)、請求的資源不存在:404
六、include指令與include動做比較數據庫

include指令           jsp:include動做

語法格式 <%@include file=".."%> <jsp:include page="">
發生做用時間 頁面轉換期間 請求期間
包含的內容 文件的實際內容 頁面的輸出
轉換成的servlet 一個servlet 兩個servlet
編譯時間 較慢 較快
執行時間 稍快 較慢數組

第四章 九大內置對象
session.setMaxInactiveInterval(10); // 用來設置session會話保持的最長時間,以秒爲單位
response.setIntHeader("Refresh", 5); // 每隔5秒刷新本頁面
response.setHeader("Refresh", "10;URL=http://www.baidu.com"); // 10秒後轉到指定頁面
out.print("body in bytes: " + request.getContentLength() + "<br />"); // 獲取請求體部分的內容的長度,以byte爲單位
out.print("content type: " + request.getContentType() + "<br />"); // 獲取請求的內容類型
out.print("context path: " + request.getContextPath() + "<br />"); // 獲取應用的路徑信息
out.print("server ip: " + request.getLocalAddr() + "<br />"); // 服務器端IP
out.print("client" + request.getRemoteAddr() + "<br />"); // 獲取瀏覽器端IP地址
out.print("http method: " + request.getMethod() + "<br />"); // 獲取請求方法
out.print("query string: " + request.getQueryString() + "<br />"); // 獲取查詢字符串
out.print("request uri: " + request.getRequestURI() + "<br />"); // 獲取URI(統一資源標識符)
out.print("request url: " + request.getRequestURL() + "<br />"); // 獲取URL(統一資源定位符)
out.print("session id: " + request.getRequestedSessionId() + "<br />"); // 返回 客戶端對應的session id
HttpSession sess = request.getSession(); // 由request獲取HttpSession會話對象
out.print("session id:" + sess.getId());
out.getBufferSize()//緩衝區大小
out.getRemaining()//緩衝區剩餘大小
out.isAutoFlush() //是否自動清空緩衝區
一、out隱含對象(輸出對象)
直接用於在JSP頁面輸出內容
Javax.servlet.jsp.JspWriter(抽象類)繼承製java.io.Writer
Jsp中的out對象最終被轉換成servlet中的jspWriter對象
二、request隱含對象(請求對象)
用於獲取Http請求相關信息,好比查詢字符串,表單數據
javax.servlet.http.HttpServletRequest
三、page對象(頁面對象)
表示對應單個JSP頁面,servlet中聲明以下:
final java.lang.Object page=this//page表示當前對象
四、PageContext(頁面上下文)
finaljavax.servlet.jsp.pageContext pageContext;
頁面上下文可使用setAttribute(String,String)設置當前頁面所存儲的信息,頁面間不共享數據使用getAttribute(String)方法獲取在頁面上下文中設置的屬性
五、session對象(會話對象)
會話對象能夠保存用戶的基本信息,如一個用戶登陸到一個網站,該網站能夠記錄此用戶的信息,而且用戶信息在網站的全部頁面間共享會話信息存儲在服務器端(數據庫,
文件系統,web容器自己實現的session存儲)在A頁面中使用session對象的setAttribute(String,String)方法存儲數據,在其餘頁面中直接使用session.getAttribute (String)方法獲取數據
javax.servlet.http.HttpSession session=null;
對Tomcatweb容器來講,一個會話的持有時間爲30分鐘(會話超時時間,單位爲分鐘)
在conf目錄的web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
六、application對象(應用程序對象)
整個應用都能使用,不限於某個用戶,全部用戶都能訪問的數據應該放在application對象中一樣有setAttribute(String String)和getAttribute(String)方法
final javax.servlet.ServletContext application
七、response對象(響應對象)
response、sendRedirect("url")重定向到某個頁面
八、config對象(Servlet配置信息)
final javax.servlet.servletConfig config;爲jsp頁面配置Servlet
<servlet>
<servlet-name>configServlet</servlet-name>
<jsp-file>/config.jsp</jsp-file><!-- 由哪一個JSP頁面轉化成的servlet -->
<init-param> <!-- servlet初始化參數 -->
<param-name>configName</param-name>
<param-value>myValue</param-value>
</init-param>
<load-on-startup>1</load-on-startup><!-- 在web容器啓動時被初始化 -->
</servlet>
<servlet-mapping>
<servlet-name>configServlet</servlet-name>
<url-pattern>/config</url-pattern>
</servlet-mapping>
在config.jsp頁面中由config對象的getInitParameter()獲取初始化參數
九、exception對象(異常對象)
java.lang.Throwable exception =
若是想要使用exception對象,則使用該對象的頁面(錯誤處理頁)必須在page指令中聲明isErrorPage="true"瀏覽器

十、隱含對象的做用範圍
一、pageScope 只能做用於頁面 page ,out,pageContext
二、reqyestScope 做用於Http請求,到了另一個頁面,request失效 request由頁面A轉發到頁面B,則request同時做用於頁面A和頁面B
三、SessionScope session做用域,用於全部頁面 session
四、applicationScope 應用程序做用域,做用於整個應用程序的所用用戶的所用頁面 application
十一、重定向和轉發的區別
轉發:
web容器內部由一個JAP轉發到另一個JSP頁面,客戶端地址欄URL不會改變request.getReauestDispatcher("url").forWord(request,response);轉發時指定的URL前能夠 加 "/"轉發中url至關於ContextPath,轉發能夠用request的setAttribute給目標頁面傳遞參數,目標頁面也能夠經過request.getAttribute()方法獲取傳遞過來的參數
重定向:
實際是告訴瀏覽器由一個頁面跳轉到另外的一個頁面,客戶端瀏覽器地址欄會發生改變,顯示出目標地址HTTP Response status Code:狀態碼爲302response.sendRedirect ("url")重定向中,URL相對於ContextPath來重定向,因此不須要再URL前加"/"。
十二、Cookie
保存網站信息到客戶端瀏覽器, 這個數據能夠輕易地被獲取到
JSP中,經過Cookie對象保存信息,key-value
經過response.addCookie(Cookie)添加cookie到瀏覽器端
經過request.getCookies()方法獲取由客戶端發送過來的Cookie對象數組,若是沒有cookie,則返回 null
因此服務端須要進行null判斷
1)cookie信息是在瀏覽器中的,但並非全部的瀏覽器都支持cookie功能;
2)cookie對象不能單獨使用,必須和request對象或response對象結合使用;
3)不一樣的瀏覽器中存儲的cookie不是通用的。例如:IE存儲的cookie只有IE本身使用;
4)存儲在瀏覽器中的cookie對任何Web服務器都是開放的,因此寫入的cookie可能被其它網頁讀取或覆蓋掉tomcat

第五章 JavaBean
一、什麼是JavaBean
JavaBean是一個普通的Java類,封裝了get,set方法,而且能夠增長一些通用的邏輯,增長了代碼的重用性
1)、javabean是一個公開的(public)類
2)、javabean類必須有一個無參的構造方法
3)、javabean中變量一般稱爲屬性
4)、取得或設定屬性是,必須使用getXXX()和setXXX()方法。(java技術規範)安全

複習:
變量:
成員變量:
類變量:在類裏面用static關鍵字修飾的變量,經過類或對象來 訪問,一般使用類來訪問,實例方法不能訪問靜態變量
實例變量:在類裏面未用static關鍵字修飾的變量,只能經過對象來訪問
局部變量:
在方法裏定義的變量,必須進行初始化,只做用於該方法內部,若是方法內部有局部內部類使用方法裏的某個變量,則該變量必須聲明爲final變量
方法:
成員方法:
靜態方法
實例方法
構造方法:
2:jsp:uesBean
uesBean指定的id==>session.setAttribute("user",com.gs.bean.User user);
因此可使用removeAttribute方法移除page,request,session,application對應的java Bean組件
jsp:setProperty jsp:getProperty的自省機制
表單裏的name與setProperty和getProperty所指定的bean對象的屬性名稱一致
在使用setProperty的時候,可使用*號匹配全部的屬性
找到eclipse內置的tomcat的目錄服務器

第六章 數據源和鏈接池
一、JNDI java Naming and Directory Interface(JAVA命名和目錄服務接口)
經過一個指定的字符串就能找到指定的資源JNDI規範一般提供一個lookup方法經過資源字符串查找所指定的資源
二、DataSource 經過必定的配置信息告訴WEB容器,應用鏈接到哪個數據源
三、配置數據源和數據鏈接池
1)、在tomcat的conf目錄下的context.xml文件中添加資源描述標記
<Resource name="jndi/datasource" 數據鏈接池資源的名稱
auth="Container"認證類型,由容器提供認證
type="javax.sql.DataSource"表示此資源的類型是什麼,javax.sql.Datasource表示爲jdbc的數據源類型
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=db_name"
username="user_name"
password="user_password"
maxTotal="20"最大鏈接數
maxIdle="5"最大空閒鏈接數
maxWaitMillis="10000"最大等待時間
/>
備註:對於tomcat的來講版本有差別,能夠參考<ResourceParams>標記信息
對於6.0及以上的tomcat,只須要使用<Resource>標記,把相關的參數配置直接放在該標記的屬性部分
對於5.0 6.0 7.0 來講最大鏈接數是maxActive,最大等待時間是maxWillis
2)、在應用的web.xml文件中聲明引用了哪一個資源
<resource-ref>
<description>JNDI JDBC DataSource</description>
<res-ref-name>jndi/datasource<res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<resource-ref>
3)、使用Context去獲取配置的jndi資源
javax.naming.Context context = new javax.naming.InitialContext();
Object obj =context.lookup("javax:comp/env/jndi/datasource");
javax.sql.DataSource ds=(javax.sql.DataSource)obj;
javax.sql.Connection conn=ds.getConnection();
四、數據庫鏈接池對數據庫相關對象的關閉操做
rs.close(); conn.close();
以上的關閉操做,是交由Tomcat容器來作的,conn.close並無真正的把創建好的數據庫鏈接關閉,而是把此數據庫鏈接放回到數

第七章 過濾器和監聽器
一、什麼是過濾器?
過濾器是在某個URL以前所須要作的事情,URL多是某個servlet所對應的,也有多是jsp頁面
特色:
聲明式的 動態的 靈活的 模塊化的 可移植的 可重用的 透明的
用處:
統一認證處理
對用戶的請求作檢查,作更精確的記錄
監聽或對用戶所傳遞的參數作前置處理,如防止數據隱藏碼攻擊
改變圖像文件的格式
對響應作編碼的動做
對響應作壓縮處理
對呀XML的輸出使用xslt來轉換
二、過濾器的寫法
1)、自定義類,實現javax.servlet.Filter接口
2)、分別實現init(FilterConfig)doFilter(ServletRequest ,ServletResponse,FilterChain) destroy()
3)、在web.xml中配置該filter 告訴web容器存在這麼一個filter,可使用<init-param>配置filter的初始化參數,在Filter代碼中 用FilterConfigd對象來獲取初始化參數
<filter>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>
告訴web容器此filter對那個URL進行過濾
<fliter-mapping>
<filter-name></filter-name>
<serlvet-name></servlet-name>
<url-pattern></url-pattern>
<filter-mapping>
三、Filter的-生命週期
*1)、init(FilterConfig)在tomcat容器啓動時就會對過濾器進行初始化
2)、在執行其過濾的url時,先初始化該URL所對應的servlet

據庫鏈接池
備註:若是想讓eclipse直接使用數據鏈接池的方式運行應用,則把context.xml文件copy到WebContent目錄下的META-INF目錄



相關文章
相關標籤/搜索