jsp:java server pages
使用java語言開發的運行在伺服器端得頁面
html+javaScript---運行在用戶端的頁面
用戶端----》html---->Servlet--->DAO--->DB
servlet的優缺點:
處理商務邏輯
展現頁面 out.println("<javaScript><css><html>");
編寫時沒有文法檢測
調試時依賴於web容器
===》Java代碼中嵌套了Html+JavaScript
解決:
在Html+JavaScript代碼中嵌入java代碼===jsp
jsp本質上就是servlet
jsp的運行調用流程:
1 用戶端首次訪問時,由web容器把jsp翻譯為Servlet,同時編譯,然後調用其中方法
_jspService。在_jspService方法中內容主要都是out.write("靜態資訊");
2 第一次訪問之後,只要頁面內容沒有發生改變,則web容器直接調用_jspService方法
3 第一次訪問之後,頁面中內容發生改變,則web容器則先編譯後調用_jspService方法
注意:
開發過程中,只要是頁面(html/jsp),改變內容之後,只需重新整理頁面即可
java代碼如何嵌入到html中的文法:<%%>
聲明 <%! %>
被翻譯為servlet中的成員變數
聲明中的代碼必須以;結尾
同一個jsp頁面中的聲明變數,不能重名
注釋 <%-- --%> 標準的jsp注釋
只存在於jsp的原始碼中,給jsp程式員調試使用
<!-- --> 標準的html注釋
被翻譯為out.write()中的靜態資訊,原封不動發給用戶端瀏覽器解析
<% // /* */ /****/ %> 純java注釋
被翻譯為_jspService方法內部的注釋,用戶端源碼中沒有該注釋
運算式 <%= %>
將運算式的運算結果在頁面中替換當前標籤顯示
運算式中的內容結尾必須不能寫;
程式碼片段 <% %>
被翻譯為_jspService方法中的資訊
結尾必須寫分號
============================
上述jsp文法結構不能嵌套書寫
============================
package com;
import java... --指令
public class Test{
//
int i = 100; --聲明
public void show(){
int i = 20;
//對i進行計算 --注釋
i+= 30; --運算式
System.out.println(i); --程式碼片段
}
}
class A{
}
練習:
在jsp頁面中使用jsp文法結構顯示99乘法表
jsp--->servlet--->dao--->db
jsp文法---指令:<%@ %>
page指令:<%@page 屬性名稱=屬性值...%>
*1)contentType="text/html;charset=gbk"
===>
response.setContentType("text/html;charset=gbk");
2)pageEncoding="gbk"
==>setCharacterEncoding("gbk");
3) language = "java"
預設可以不寫,為了相容以後出現的其他語言所預留的介面
4) session = "true/false"
設定訪問當前jsp頁面,該頁面是否建立session
預設值為true
5) buffer
設定當前頁面輸出資訊時緩衝區的大小,預設為8k
如果設定為none,則表示不適用緩衝區,直接輸出每條資訊給用戶端頁面
6) autoFlush
設定緩衝區滿了之後是否自動重新整理資訊到用戶端頁面上
預設值為true,即自動重新整理
7) isThreadSafe = "true/false"
設定當前頁面是否經過安全執行緒控制
預設為true,即安全執行緒
如果設定為false,則用戶端多線程必須順序訪問該頁面
*8) import
給當前頁面引入lang包以外的其他類路徑
*9) errorPage
指定當前jsp頁面如果出現異常,則跳轉的頁面路徑
===》
try{
}catch(Exception e){
....
//resp.sendRedirect("error.jsp");
req.setAttribute("exception",e);
req.getRequestDispatcher("error.jsp").forward(req,resp);
}
*10 isErrorPage
指定當前error.jsp頁面,是一個特殊用於處理異常的專屬頁面
在本頁面中可以擷取異常跳轉之前頁面中的異常對象資訊
==>
Exception e = req.getAttribute("exception");
include指令:<%@include file=""%>
引入其他jsp頁面中的資訊
靜態引入:
所有的頁面先合并源碼,統一編譯執行
動作:<jsp:標籤名></jsp:標籤名>
include動作:<jsp:include page=""></jsp:include>
動態引入:
先編譯擷取每個頁面的執行結果,然後合并結果顯示
param動作:依賴於include動作存在
<jsp:include page="foot.jsp">
<jsp:param name="copyName" value="@_@"></jsp:param>
</jsp:include>
擷取參數:
<%=request.getparameter("copyName")%>
forward動作:
<jsp:forward page="">
jsp內建對象
request ---javax.servlet.http.HttpServletRequest
response ---javax.servlet.http.HttpServletResponse
exception ---java.lang.Throwable
out ---javax.servlet.jsp.JspWriter
session ---javax.servlet.http.HttpSession
application ---javax.servlet.ServletContext
web項目中的中文亂碼:
1 jsp必須頭部設定指令<%@page contentType="text/html;charset=gbk"%>
2 添加CharacterEncodingFilter
http://localhost:8088/myJsp/include/static/content.jsp
==>../../basic/date.jsp
http://localhost:8088/myJsp/basic/date.jsp
===========================
注意:
在jsp頁面中注釋代碼
資訊,必須使用<%-- --%>
===========================