JSP

JSP基本原理

JSP本質是Servlet,使用JSP時,Web應用中的每個JSP頁面都會由Servlet容器生成對應的Servlet。
就Tomcat而言,JSP頁面生成的Servlet放在work路徑對應的web應用下。

JSP的4種基本語法

JSP註釋

<%-- --%>
不會出現在源碼中(HTML註釋<!-- -->

JSP聲明

<! 聲明部分 >
JSP聲明將會轉換成對應Servlet的成員變量或成員方法

輸出JSP表達式

<%= 表達式%>
表達式語法後不能有分號

JSP腳本

<% %>
JSP腳本將轉換成_jspService方法裏的可執行性代碼,所以JSP腳本里不能定義方法

JSP的三個編譯指令

`<%@ 編譯指令名 屬性名=“屬性值” %>’

page指令

屬性:language 當前JSP頁面的語言,默認Java,無需設置
extends 指定JSP頁面編譯所產生的Java類所繼承的父類,或所實現的接口
import 導入包,默認倒入的包有java.lang.*、
session 設定這個頁面是否需要HTTP Session
buffer 指定輸出緩衝區的大小
autoFlush 當輸出緩衝區即將溢出時,是否需要強制輸出緩衝區的內容
info 設置該JSP程序的信息,即說明。getServletInfo()方法獲取該值
errorPage 指定錯誤處理頁面
isErrorPage 設置本JSP頁面是否爲錯誤處理程序
contentType 用於設定生成網頁的文件格式和編碼字符集,即MIME類型和頁面字符集類型,默認text/html,ISO-8859-1
pageEncoding 指定生成網頁的編碼字符集

include指令

<%@ include file = "xxx.jsp"%>
將外部文件嵌入到當前JSP文件中,包含編譯指令

taglib指令

用於定義和訪問自定義標籤

JSP的7個動作指令

  • jsp:forward : 執行頁面轉向,將請求的處理轉發到下一個頁面
<jsp:forward page="{relativeURL|<%=expression%>}">
    {jsp:param.../}
</jsp:forward>
<jsp:forward page="xxx.jsp">
    {jsp:param name="age" value="18"/}
</jsp:forward>
  • jsp:param:用於傳遞參數

  • jsp:include:動態引入JSP頁面,只是頁面的body內容
    靜態導入是將導入頁面的代碼完全融合,合成一個整體Servlet;動態導入在Servlet中使用include方法

  • jsp:plugin:用於下載JavaBean或Applet到客戶端執行

  • jsp:usebean:創建一個JavaBean的實例

  • jsp:setProperty:設置JavaBean實例的屬性值
    jsp:輸出JavaBean實例的屬性值
    <jsp:useBean id="name" class="classname" scope="page|request|session|application"/>
    id:實例名 class:實現類 scope:指定實例的作用範圍
    page:在該頁面有效
    request:在該次請求有效
    session:在本次session有效
    application:在本應用內有效

<jsp:usebean id="p1" class="lee.Person" scope="page"/>
<jsp:setProperty name="p1" property="name" value="yyk"/>
<jsp:setProperty name="p1" property="age" value="18"/>
<jsp:getProperty name="p1" property="name"/>
<jsp:getProperty name="p1" property="age"/>

JSP腳本的9個內置對象

application

讓多個JSP、Servlet共享數據

application.setAttribute("id",1)
<!--jsp中-->
application.getAttribute("id")
<!--servlet中,servlet中沒有application對象-->
ServletContext sc = getServletConfig().getServletContext();
sc.getAttribute("id")

獲得Web應用配置參數

web.xml
<context-param>
     <param-name>driver</param-name>
     <param-value>com.mysql.jdbc.driver</param-value>
</context-param>

jsp
String driver = application.getInitParameter("driver")

config

exception

exception對象是Throwable的實例,代表JSP腳本中產生的錯誤和異常,是JSP頁面異常機制的一部分

<%@ page contentType="text/html; charset=GBK" language="java" isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title> 異常處理頁面 </title>
    <meta name="website" content="http://www.crazyit.org" />
</head>
<body>
異常類型是:<%=exception.getClass()%><br/>
異常信息是:<%=exception.getMessage()%><br/>
</body>
</html>

out

out對象代表一個頁面輸出流,通常用於在頁面上輸出變量值及常量。
<%= %>
out.write()

page

代表頁面本身,通常沒有太大用處。即Servlet中的this

pageContext

代表頁面上下文,用於訪問JSP之間的共享數據。使用pageContext可以訪問page,request,session,application範圍的變量

getAttribute(String name) (page)
getAttribute(String name, int scope)
scope
1、page      2request     3、session     4、application

request

每個request對象封裝着一次用戶請求,包括所有請求參數

response

代表服務器對客戶端的響應。
常使用的對象 out out是JspWriter的實例,JspWriter是writer的子類,writer是字符流
1、response響應生成非字符響應(圖片,PDF)
2、重定向(會丟失所有請求參數)
response.sendRedirect(String path)
3、增加Cookie(不設置生存期限,Cookic隨瀏覽器關閉而自動消失)

Cookie c = new Cookie("username" , name);
// 設置Cookie對象的生存期限
c.setMaxAge(24 * 3600);
// 向客戶端增加Cookie對象
response.addCookie(c);

session

代表一次用戶會話,從客戶頓瀏覽器連接服務器開始,到客戶端瀏覽器與服務器斷開
跟蹤用戶的會話信息
session裏的屬性值必須是可序列化的

配置JSP屬性

使用<jsp-property-group/>元素配置
<el-ignored/>是否允許使用表達式語言,默認false,允許
<scripting-invalid/>是否允許使用JSP腳本,默認false,允許
<page-encoding/>聲明JSP頁面的編碼
<include-prelude/>隱式包含,頁面頭
<include-coda/>隱式包含,頁面尾

<!-- 關於JSP的配置信息 -->
    <jsp-config>
        <jsp-property-group>
            <!-- 對哪些文件應用配置 -->
            <url-pattern>/noscript/*</url-pattern>
            <!-- 忽略表達式語言 -->
            <el-ignored>true</el-ignored>
            <!-- 頁面編碼的字符集 -->
            <page-encoding>GBK</page-encoding>
            <!-- 不允許使用Java腳本 -->
            <scripting-invalid>true</scripting-invalid>
            <!-- 隱式導入頁面頭  -->
            <include-prelude>/inc/top.jspf</include-prelude>
            <!-- 隱式導入頁面尾 -->
            <include-coda>/inc/bottom.jspf</include-coda>
        </jsp-property-group>
    </jsp-config>

表達式語言

語法格式:${ expression}
支持算術運算符和邏輯運算符

所有數值都當成浮點數處理

表達式語言的11內置對象

pageContext
pageScope
requestScope
sessionScope
applicationScope
param
paramValues
header
headerValues
initParam
cookie

${param.name}
${param["name"]}
${cookie["name"].value}

表達式語言的自定義函數

Tag File支持

自定義標籤的簡化用法,無需定義標籤處理類和標籤庫文件

5個編譯指令

taglib
include
tag:作用類似於JSP文件中的page指令
attribute:標籤屬性
variable:標籤變量
先導入標籤庫,再使用標籤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章