目錄
- 腳本
- 普通腳本
- 聲明腳本
- 輸出腳本
- JSP注釋
- 文法規則
- JSP指令
- page指令
- include指令
- taglib指令
- 動作标簽
- include
- useBean
- setProperty
- getProperty
- forward
- param
- 内置對象
- 四大域對象
腳本
腳本可以編寫Java語句、變量、方法或表達式。
普通腳本
文法:<% Java代碼 %>
<!--普通腳本-->
<%
int b = 456 ; //局部變量
out.println("我在普通腳本裡"); //可以直接輸出到頁面上
System.out.println("哈哈哈哈");//輸出到控制台上
%>
- 經驗:普通腳本可以使用所有Java文法,除了定義函數。
注意:
- 腳本與腳本之間不可嵌套,腳本與HTML标簽不可嵌套。
- 普通腳本裡面的變量為局部變量(_jspService方法裡面)。
聲明腳本
文法:<%! 定義變量、函數%>
<%! int i = 0; %>
<%! int a,b,c; %>
<%! Object object = new Object(); %>
<%!
int a = 123; //全局變量
//定義方法
public void m1(){
System.out.println("Hello World! , 你好!");
}
%>
注意:
- 聲明腳本聲明的變量是全局變量(轉為生成Servlet的成員變量)。
- 聲明腳本的内容可以在普通腳本<% %>中調用。
- 如果聲明腳本中的函數具有傳回值,可以直接使用輸出腳本調用<%=方法() %>
輸出腳本
文法:<%=Java表達式%>
<%= new java.util.Date()%>
注意:
- 輸出腳本可以輸出帶有傳回值的函數。
- 輸出腳本中不能加
号;
JSP注釋
JSP注釋主要有兩個作用:為腳本代碼作注釋以及作為HTML内容注釋。
文法規則
文法 | 描述 |
---|---|
<%--注釋--%> | JSP注釋,注釋内容不會被發送至浏覽器甚至不會被編譯 |
<!--注釋--> | HTML注釋,通過浏覽器檢視網頁源代碼時可以看見注釋内容 |
JSP指令
JSP指定用來設定與整個JSP頁面相關的屬性。
指令 | 描述 |
---|---|
<%@ page ... %> | 定義頁面的依賴屬性,比如腳本語言,error頁面,緩存需求等等 |
<%@ include ... %> | 包含其他檔案 |
<%@ taglib ... %> | 引入标簽庫的定義,可以是自定義标簽 |
page指令
- 文法:<%@ page attribute1="value1" attribute2="value2" %>
- Page指令為容器提供目前頁面的使用說明。一個JSP頁面可以包含多個page指令
屬性 | 描述 |
---|---|
contentType | 指定目前JSP頁面的MIME類型和知乎編碼格式 |
errorPage | 指定目前JSP頁面發生異常時需要轉向的錯誤處理頁面 |
isErrorPage | 指定目前頁面是否可以作為另一個JSP頁面的錯誤處理頁面 |
import | 導入要使用的Java類 |
language | 定義JSP頁面所用的腳本語言,預設是Java |
session | 指定JSP頁面是否使用session.預設為true立即建立,false為使用時建立 |
pageEncoding | 指定JSP頁面的編碼格式 |
<%@ page contentType="text/html;charset=UTF-8" language="java" session="false" errorPage="error.jsp" pageEncoding="utf-8" %>
<%@ page import="java.util.Date" %>
include指令
- 文法:<%@include file="被包含的SP路徑" %>
- 通過incdude指令來包含其他檔案。
- 被包含的檔案可以是JSP檔案、HTML檔案或文本檔案。包含的檔案就好像是目前JSP檔案的一部分,會被同時編譯執行(靜态包含)。
<%@ include file="header.jsp">
...
...
<%@ include file="footer.jsp">
注意:有可能會有重名的沖突問題,不建議使用。
taglib指令
- 文法:<%@ taglib uri="外部标簽庫路徑% prefix="字首" %>
- 引入JSP的标準标簽庫
<%@ taglib uri="http://java.sun.com/jsp/jstl/core prefix="c"%>
動作标簽
- 文法:<jsp:action_name attribute="value" />
include
- 文法:<jsp:include page="相對URL位址"/>
- jsp:include 動作元素會将外部檔案輸出結果包含在JSP中(動态包含)
<jsp:inculde page="index.jsp"/>
注意:
前面已經介紹過include指令,它是将外部檔案的輸出代碼複制到了目前JSP檔案中。而這裡的jsp:include動作不同,是将外部檔案的輸出結果引入到了目前JSP檔案中。
useBean
- 文法:<jsp:useBean id="name" class="package.className">
- jsp:useBean 動作用來加載一個将在JSP頁面中使用的JavaBean。
<jsp:useBean id="user" class="com.zjw.User"/>
- 在類載入後,我們可以通過jsp:setProperty和jsp:getProperty動作來修改和擷取bean的屬性。
setProperty
可以在jsp:useBean元素之後使用jsp:setProperty進行屬性的指派
屬性 | 描述 |
---|---|
name | name屬性是必須的。它表示要設定屬性的是哪個Bean。 |
property | property屬性是必須的。它表示要設定的是哪個屬性。 |
value | value屬性是可選的。該屬性用來指定Bean屬性的值。 |
<jsp:useBean id="user" class="com.zjw.bean.User"/>
<jsp:setProperty name="user" property="age" value="25"/>
<jsp:setProperty name="user" property="name" value="朱俊偉"/>
getProperty
jsp:getProperty動作提取指定Bean屬性的值,轉成字元串,然後輸出
屬性 | 描述 |
---|---|
name | 要檢索的Bean屬性名稱。Bean必須已定義。 |
property | 表示要提取Bean屬性的值。 |
<jsp:getProperty name="user" property="name"/>
<jsp:getProperty name="user" property="age"/>
forward
- 文法:<jsp:forward page="相對URL位址"/>
- jsp:forward動作把請求轉到另外的頁面。
<jsp:forward page="index.jsp">
param
- 文法:<jsp:param name="" value=""/>
- 在轉發動作内部使用,做參數傳遞
<%
request.setCharacterEncoding("UTF-8");
%>
<%--轉發--%>
<jsp:forward page="../index.jsp" >
<jsp:param name="name" value="朱俊偉"/>
</jsp:forward>
<%=request.getParameter("name")%>
内置對象
由JSP自動建立的對象,可以直接使用
對象名 | 類型 | 說明 |
---|---|---|
request | javax.servlet.http.HttpServletRequest | |
response | javax.servlet.http.HttpServletResponse | |
session | javax.servlet.http.HttpSession | 由session="true"開關 |
application | javax.servlet.http.ServletContext | |
config | javax.servlet.http.ServletConfig | |
exception | javax.lang.Throwable | 由isErrorPage="false"開關 |
out | javax.servlet.jsp.JspWriter | javax.servlet.jsp.JspWriter |
pageContext | javax.servlet.jsp.PageContext | |
page | javax.lang.Object目前對象的this | 目前servlet執行個體 |
四大域對象
JSP有四大作用域對象,存儲資料和擷取資料的方式一樣,不同的是取值的範圍有差别
- pageContext(javax.servlet.jsp.PageContext)目前JSP頁面範圍
- request(javax.servlet.http.HttpServletRequest)一次請求有效
- session (javax.servlet.http.HttpSession) 一次會話有效(關閉浏覽器失效)
- application(javax.servlet.ServletContext)整個Web應用有效(伺服器重新開機或關閉失效)
package com.zjw.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/scope")
public class Scope extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("request","request值");
req.getSession().setAttribute("session","session值");
req.getServletContext().setAttribute("application","servletContext值");
System.out.println("servlet....");
resp.sendRedirect(req.getContextPath()+"/scope/scope.jsp");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
pageContext.setAttribute("pageContext","pageContext值");
%>
<%=pageContext.getAttribute("pageContext")%><br>
<%=request.getAttribute("req")%><br>
<%=session.getAttribute("session")%><br>
<%=application.getAttribute("application")%><br>
</body>
</html>