目錄
一、基礎知識
1、JSP簡介
JSP(全稱Java Server Pages)是與PHP、ASP等語言類似的運行在服務端的語言,在一個JSP頁面中可以包括指令標識、HTML代碼、JavaScript代碼、嵌入的Java、JSP動作標識等。
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="./jquery/jquery-3.4.1.js"></script>
<script type="text/javascript"> //javascript代碼
$(function(){
$("input").click(function(){
alert("按鈕事件");
});
})
</script>
</head>
<body>
<input type="button" value="按鈕"/> <!--html代碼 -->
<%
out.println("hello world");//嵌入的Java代碼
%>
</body>
2、JSP的作用
網頁開發者們通過結合HTML代碼、XHTML代碼、XML元素以及嵌入JSP操作和命令來編寫JSP。JSP通過網頁表單獲取用戶輸入數據、訪問數據庫及其他數據源,然後動態地創建網頁。JSP可以訪問數據庫、記錄用戶選擇信息、訪問JavaBeans組件等,還可以在不同的網頁中傳遞控制信息和共享信息。
3、開發環境的安裝
參考之前的博客:https://blog.csdn.net/kenjianqi1647/article/details/105000777
4、JSP原理
JSP是Servlet的一種特殊形式,每個JSP頁面就是一個Servlet實例,Web應用中的每個JSP頁面都會由Servlet容器生成對應的Servlet。
網絡服務器上有JSP容器,JSP 容器與 Web 服務器協同合作,爲JSP的正常運行提供必要的運行環境和其他服務,並且能夠正確識別專屬於 JSP 網頁的特殊元素。
Web服務器使用JSP創建網頁的步驟如下:
- 瀏覽器發送一個HTTP請求給Web服務器,服務器識別出是JSP請求,將該請求傳遞給JSP引擎。
- JSP引擎從磁盤中載入JSP文件,轉化爲Servlet,並編譯成Servlet類
- Servlet引擎載入並執行Servlet類,產生HTML網頁
- Web服務器將網頁傳給客戶端
二、JSP語法
1、指令標識(JSP指令)
指令標識用於設定JSP頁面範圍內的相關屬性,被服務器解釋並執行,並不會產生任何內容輸出到網頁中。
語法格式:
<%@ 指令名 屬性="屬性值" %>
- 指令名:用於指定指令的名稱,JSP中包括page,include,taglib三條指令。
(1)page指令應用:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
(2)include指令應用
通過該指令可以在一個JSP頁面中包含另一個JSP頁面,使用include指令可以提高代碼的重用性。
<%@ include file="path">
爲了使整個頁面的層次結構不發生衝突,應將被包含的頁面中將html、body等標記刪除。
2、腳本標識
腳本標識用於生成頁面中的動態內容。包括三部分:JSP表達式、聲明標識和腳本程序。
(1)腳本程序
腳本程序就是在JSP頁面中嵌入的java代碼。可以包含任意java語句、變量、方法或表達式。
語法格式:
<% Java代碼 %>
(2)聲明標識(JSP聲明)
聲明標識用於在JSP頁面中定義全局的變量或方法。通過定義可以被整個JSP頁面訪問。
語法格式:
<%! 聲明變量或方法的代碼 %>
應用舉例:
<%!
int number=0;//聲明全局變量
int count(){ //聲明全局方法
number++;
return number;
}
%>
(3)JSP表達式
JSP表達式用於向頁面輸出信息。
語法格式:
<%= 表達式 %>
3、JSP註釋
JSP註釋主要爲代碼做註釋或將某段代碼註釋掉。
JSP特有的註釋方式爲隱藏註釋,使用瀏覽器查看HTML源碼時,用戶也看不到註釋,安全性比較高。
語法格式:
<%-- 註釋內容 --%>
4、動作標識(JSP行爲)
動作標識利用XML語法格式的標記來控制Servlet引擎的行爲。利用JSP動作可以動態地插入文件、重用JavaBean組件、把用戶重定向到另外的頁面、爲Java插件生成HTML代碼。動作標識與指令標識不同,動作標識在請求階段起作用。
常用的動作標識如下:
(1)包含文件標識<jsp:include>
<jsp:include>動作標識用於向當前頁面中包含其他的文件。注意它與include指令標識的區別如下:
- include指令標識是在編譯級別完成的包含(JSP文件被轉換成Servlet的時候),即把當前JSP和被包含的JSP合併成一個JSP,然後再編譯成一個Servlet。
- include動作標識是在運行級別完成的包含(插入文件的時候是在頁面被請求的時候),即當前JSP和被包含的JSP都會各自生成Servlet,然後在執行當前JSP的Servlet時完成包含另一個JSP的Servlet。
語法格式如下:
<jsp:include page="url" flush="false|true">
- page:爲指定被包含文件的相對路徑。
- flush:設置是否刷新緩衝區。
(2)請求轉發標識<jsp:forward>
請求轉發標識可以將請求轉發到其他的Web資源,例如另一個JSP頁面、HTML頁面,Servlet等,請求轉發後,當前頁面不再被執行,而去執行目標頁面。
語法格式如下:
<jsp:forward page="url"/>
page:爲請求轉發的目標頁面。
(3)傳遞參數標識<jsp:param>
該標識用於爲其他標識傳遞參數。
<jsp:param name="參數名" value="參數值"/>
name:用於指定參數的名稱。
value:用於設置對應的參數值。
三、JSP內置對象(JSP隱含對象)
JSP的內置對象用來實現JSP應用,在JSP中一共定義了9個JSP內置對象。
1.request對象
通過request對象提供的相應方法可處理客戶端瀏覽器提交的HTTP請求中的各項參數。
應用舉例:
WebContent下新建NewFile.jsp和deal.jsp文件
NewFile.jsp下:
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="./jquery/jquery-3.4.1.js"></script>
<script type="text/javascript"> //javascript代碼
</script>
</head>
<body>
<a href="deal.jsp?id=1&user=">處理頁</a> <!-- id爲傳遞參數 -->
</body>
deal.jsp下:
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="utf-8"%>
<%
String id=request.getParameter("id"); //獲取id參數的值
String user=request.getParameter("user");//獲取user參數的值
String pwd=request.getParameter("pwd");//獲取pwd參數值
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>處理頁</title>
</head>
<body>
id參數的值爲:<%=id %><br>
user參數的值爲:<%=user %><br>
pwd參數的值爲:<%=pwd %>
</body>
</html>
測試結果:
2.response對象
response對象用於響應客戶請求,向客戶端輸出信息。
3.session對象
session對象用來跟蹤在各個客戶端請求間的會話。通過session可以在應用程序的web頁面間進行跳轉時,保存用戶的狀態,使整個會話一直存在下去,直到瀏覽器關閉。
4.application對象
application對象用於保存所有應用程序中的公有數據。
5.out對象
out對象用於在Web瀏覽器內輸出信息,並管理應用服務器上的輸出緩存區。
四、JavaBean
1、JavaBean簡介
JavaBean可以將JSP中HTML代碼和Java代碼相分離,將Java代碼單獨封裝成一個處理某種業務邏輯的類,然後在JSP頁面中調用此類,降低了HTML代碼和Java代碼之間的耦合度,簡化了JSP頁面,提高了Java代碼的重用性。
2、JavaBean規則
- 要有無參的構造函數
- 成員屬性私有化
- 封裝的屬性如果需要被外所操作,必須寫爲public類型setter、getter方法
3、應用舉例
編寫一個郵件地址驗證程序
(1)Java Resources目錄下添加Email類
Email.java文件內容如下:
package com.lyq.bean;
import java.io.Serializable;
/**
* 郵件對象JavaBean
*/
public class Email implements Serializable {
// serialVersionUID 值
private static final long serialVersionUID = 1L;
// Email地址
private String mailAdd;
// 是否是一個標準的Email地址
private boolean eamil;
/**
* 默認無參的構造方法
*/
public Email() {
}
/**
* 構造方法
* @param mailAdd Email地址
*/
public Email(String mailAdd) {
this.mailAdd = mailAdd;
}
/**
* 是否是一個標準的Email地址
* @return 布爾值
*/
public boolean isEamil() {
// 正則表達式,定義郵箱格式
String regex = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
// matches()方法可判斷字符串是否與正則表達式匹配
if (mailAdd.matches(regex)) {
// eamil爲真
eamil = true;
}
// 返回eamil
return eamil;
}
public String getMailAdd() {
return mailAdd;
}
public void setMailAdd(String mailAdd) {
this.mailAdd = mailAdd;
}
}
(2)WebContent目錄下添加index.jsp文件
index.jsp代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="result.jsp" method="post">
<table align="center" width="300" border="1" height="150">
<tr>
<td colspan="2" align="center">
<b>郵箱認證系統</b>
</td>
</tr>
<tr>
<td align="right">郵箱地址:</td>
<td><input type="text" name="mailAdd"/></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" />
</td>
</tr>
</table>
</form>
</body>
</html>
(3)WebContent目錄下添加result.jsp文件
result.jsp代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="com.lyq.bean.Email"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<%
// 獲取郵箱地址
String mailAdd = request.getParameter("mailAdd");
// 實例化Email,並對mailAdd賦值
Email email = new Email(mailAdd);
// 判斷是否是標準的郵箱地址
if(email.isEamil()){
out.print(mailAdd + " <br>是一個標準的郵箱地址!<br>");
}else{
out.print(mailAdd + " <br>不是一個標準的郵箱地址!<br>");
}
%>
<a href="index.jsp">返回</a>
</div>
</body>
</html>
測試結果如下:
參考文獻: