一、jsp學習
1、jsp原理圖
Jsp的訪問原理流程
瀏覽器發(fā)起請求,請求jsp,請求被Tomcat服務器接收,執(zhí)行JspServlet將請求的jsp文件轉譯成為對應的java文件(也是Servlet),然后執(zhí)行轉譯好的Java文件
注意:
jsp中可以書寫java代碼,但是Java代碼會被原樣轉譯到其他對應的java文件中執(zhí)行

2、jsp指令代碼
<%@page language="java"%><%--聲明轉譯語言 --%>
<%@page import="java.util.*,java.lang.*"%><%-- 聲明轉譯時導入的Java包文件--%>
<%@page pageEncoding="utf-8"%><%--設置數(shù)據(jù)的響應編碼格式 --%>
<%@page contentType="text/html;charset=utf-8"%><%--設置響應編碼格式 --%>
<%@page session="true"%><%--默認fasle true表示開啟exception異常對象的使用
默認true是開啟的,false是關閉的 --%>
<%@page errorPage="error.jsp"%><%--設置當jsp運行時出現(xiàn)異常錯誤時跳轉到指定頁面--%>
<%
// int i=5/0;
%><%--
page指令的作用:設置jsp轉譯的時候的一些配置信息
--%>
3、jsp的局部代碼塊和全局代碼塊和腳本段語句
? ? ? ? ? ? ? ? 局部代碼塊
聲明方式:<% java代碼%>
<%
int i=123;
System.out.println(i);
test();
%>
全局代碼塊
聲明方式<%!聲明全局Java代碼 %>
特點:
全局代碼塊中聲明的java代碼,在轉譯時,
? ? ? ? ? ? ? 會被轉譯成jsp對應的java文件的全局代碼。
作用:
聲明方法的全局量等
注意:
使用全局代碼塊聲明方法,使用局部代碼塊調用方法
<%!
int n=456;
public void test(){
System.out.print(n);
}
%>
? java腳本段、表達式
? 聲明方法:
? <%=變量名或者方法名()%>
? 作用:
? 將java代碼的運算結果數(shù)據(jù)或者其他數(shù)據(jù)響應給瀏覽器
? 注意:
? 在該表達式中不能使用分紅結尾
<i><%=i%></i>
4、jsp注釋

5.jsp的靜態(tài)引入與動態(tài)引入
1.靜態(tài)引入和動態(tài)引入的標簽
靜態(tài)引入: <%@include? file=”要引入的資源的相對路徑”>
動態(tài)引入: <jsp:include page=" 要引入的資源的相對路徑"></jsp:include>
2.靜態(tài)引入和動態(tài)引入的
靜態(tài)引入特點:
被引入的jsp文件和原有jsp文件被轉譯成一個java文件 使用。
注意:靜態(tài)引入的相關jsp文件中不能聲明同名變量。
動態(tài)引入特點:
被引入的jsp文件會被單獨轉譯,原有的jsp文件會調用被引入的jsp文件。
注意:動態(tài)引入的相關jsp文件中可以聲明同名變量。
6.jsp的forward標簽
<jsp:forward page="login.jsp"></jsp:forward> //請求轉發(fā)(開始標簽和結束標簽之間不能有空格,否則報下面的500錯誤)
7.內置對象
resqueset 封存了請求相關數(shù)據(jù),由服務器創(chuàng)建
response 響應對象,設置編碼格式
session 解決了同一用戶一個不同請求之間的數(shù)據(jù)共享問題
pageContext 頁面上下文對象,此對象封裝其他八個對象
out 響應數(shù)據(jù)的對象,交于response對象,out對象底層使用了緩沖區(qū)
config ServletConfig對象,使用此對象完成資源的初始化
page 代表當前被執(zhí)行的jsp轉譯的java文件的對象,this
application ServletContext對象,解訣了不同用戶之間的數(shù)據(jù)共享問題
exception jsp頁面的異常對象,封存了異常信息
8 .jsp中的四個作用域對象
1.pageContext:當前頁面作用域
pageContext相當于Java中的this,它代表著當前頁面作用域。在這個作用域中存放的屬性值,只能在當前頁面中取出。request:從請求創(chuàng)建到請求消亡這段時間
瀏覽器從發(fā)起請求開始,到服務器處理完成,返回響應的這段時間。
2.request作用域可以跨越多個頁面 。
另外,還可以使用<jsp:forward>和<jsp:include>兩個方法轉向或包含另一個頁面, 這個時候request對象中保存的信息對另一個頁面也是有效的
3.session:一段客戶端和服務器持續(xù)連接的時間
當客戶端瀏覽器第一次向服務器發(fā)出請求,服務器會為這個客戶端分配一定的內存空間,這個客戶端能在其中存取數(shù)據(jù),任何客戶端都不能操作其他客戶端的內存空間中的數(shù)據(jù),這塊內存空間就稱為session,它也是JSP的九大內置對象之一。
存放于session中的對象,將屬于session作用域,或者叫會話作用域
4.application:服務器開始到服務器關閉為止
當服務器開啟時,會創(chuàng)建一個公共內存區(qū)域,任何客戶端都可以在這個公共內存區(qū)域存取值,這個公共內存區(qū)域,就稱為applicatio
9.jsp和Servlet的職責
JSP 負責頁面展現(xiàn),Servlet 負責業(yè)務邏輯處理。
10.資源路徑總結
1.Servlet中請求轉發(fā)和重定向路徑中第一個斜杠的含義
請求轉發(fā)第一個斜杠:表示項目根目錄
重定向路徑第一個斜杠:表示服務器根目錄
2.jsp中的路徑的第一個斜杠的含義
jsp中的路徑的第一個斜杠表示服務器根目錄
3.jsp中的basePath設置的作用
在myeclipse中設置basePath時會默認給每個資源路徑加上項目根路徑(在寫相對路徑時其實寫的是絕對路徑,注意不能在設置basePath不能寫絕對路徑,否則報404錯誤)
<% String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
//basePath值為項目根路徑 <base href="<%=basePath%>">//給每個資源路徑加上項目根路徑