JSP
什么是JSP?
Java Server pages:java服務器端頁面,和Servlet一樣,用于動態web技術
最大的特點:
- 寫jsp就像在寫HTML
- 區別:
- HTML只能提供靜態資料,
- JSP頁面可以嵌入java代碼,為用戶提供動態資料
JSP原理
瀏覽器向服務器發送請求,不管訪問什么資源,其實都是在訪問servlet
專案中jsp檔案在本機下載tomcat目錄(或idea的tomcat目錄中) work目錄下檔案中的jsp檔案
-
JSP最侄訓被轉為java類
-
JSP本質就是一個servlet
-
例如一個jsp檔案中的“”一行在最終轉換的java檔案可能被轉換為“out.write("\n")”,當然這只是該java檔案中的一小部分,但是至少反映了jsp的作用:減少程式員的代碼量,減少繁瑣的程序
-
servlet(jsp轉換的java檔案)中關于jsp的方法:!
-
jsp最終轉換的java檔案中的步驟:
-
判斷請求
-
內置物件
-
- 輸出頁面前相關設定
以上物件我們可以在寫jsp時直接用
- 輸出我們寫的頁面
原理圖:
在jsp中:只要是java代碼就會原封不動,html格式out.write(html代碼)進行轉換
JSP基礎語法和指令
JSP基礎語法
學習前我們需要在pom.xml中匯入四個依賴:
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<!--jsp-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!-- jstl運算式依賴-->
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!--Standard標簽庫-->
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
- JSP運算式:
<%--jsp運算式:將程式的輸出,輸出到客戶端--%>
<%-- 格式:<%=java變數或者運算式%> --%>
<%= new java.util.Date()%>
- JSP腳本片段:
<%--JSP腳本片段:可以寫多行,多個腳本片段可以理解為再一個函式中可以相互呼叫-%>
<%
int sum=0;
for (int i = 0; i < 100; i++) {
sum+=i;
}
out.print("<h1>sum="+sum+"</h1>");
%>
<%
out.print("<h1>sum="+sum+"</h1>");
%>
- 腳本片段的再實作:
<%
for (int i = 0; i < 5; i++) {
%>
<h1>
Hello World
</h1>
<%
}
%>
html和jsp腳本片段可以來回嵌套
- JSP宣告
<%!
static {
System.out.println("Hello World");
}
private int a = 0;
public void Method(){
System.out.println("進入方法方法");
}
%>
JSP宣告會被編譯到jsp生成的java類中!而其他的會被生成到一個其中_jspService方法中
所以,jsp的層級會相比其他高一些
JSP指令
-
三種指令標簽:
- <%@ page ... %>:定義網頁依賴屬性,比如腳本語言、error頁面、快取需求等等
- <%@ include ... %> :包含其他檔案
- <%@ taglib ... %>:引入標簽庫的定義
-
page:相關屬性
例如:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--匯入包--%>
<%@ page import="java.util.Date" %>
<%--定制錯誤頁面:當發生錯誤如500定向到定制錯誤頁面--%>
<%@page errorPage="error.jsp" %>
<%--宣告這是一個錯誤頁面--%>
<%@page isErrorPage="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%=1/0%>
</body>
</html>
另外還有可以再web.xml中定制錯誤頁面:
<error-page>
發生404錯誤時
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
發生500錯誤時
<error-code>500</error-code>
<location>/error2.jsp</location>
</error-page>
-
include:通過include指令來包含其他檔案,被包含的檔案可以是JSP檔案、HTML檔案或文本檔案,包含的檔案就好像是該JSP檔案的一部分,會被同時編譯執行,
Include指令的語法格式如下:
<%@ include file="檔案相對 url 地址" %>
例子:
會將幾個頁面合二為一 <%@include file="/header.jsp"%> <h1>Hello World</h1> <%@include file="/footer.jsp"%>
jsp標簽:
拼接頁面,本質還是三個 <jsp:include page=""></jsp:include> <h1>Hello World</h1> <jsp:include page=""></jsp:include> 還有其他jsp標簽:例如 <jsp:body></jsp:body> <jsp:attribute name=""></jsp:attribute>
-
taglib:Taglib指令引入一個自定義標簽集合的定義,包括庫路徑、自定義標簽,語法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>
九大內置物件
-
request
-
response
-
pageContext
-
page
-
session
-
application [servletContext]
-
out
-
exception
-
config [servletConfig]
<%
// 下面四個 都可以存放資料和對應的取資料(getAttribute)(可以提供一種內置物件的get取得所有的)
pageContext.setAttribute("a",1);//只在這一個頁面有效
request.setAttribute("b",2);//在一次請求中有效,請求轉發會攜帶該資料
session.setAttribute("c",3);//一次會話中有效(打開到關閉瀏覽器)
application.setAttribute("d",4);//服務器中有效(打開到關閉服務器)
//尋找機制從底層到高層
int a = (int)pageContext.getAttribute("a");
int b = (int)pageContext.getAttribute("b");
int b = (int)request.getAttribute("b");
%>
request:客戶端向服務器發生請求,存盤用戶看完了就沒用的,比如新聞
session:客戶端向服務器發生請求,用戶看完一會還有用,如購物車
application::客戶端向服務器發生請求,產生的資料一個用戶用完了,其他用戶還需要用的,比如:聊天資料
EL運算式
四大作用:
- 獲取資料
- 執行運算
- 獲取web開發常用物件
- 呼叫java方法
<%
int a = 1;
%>
<h1>${a}</h1>
<form action="index.jsp" method="get">
<input type="text" name="username" value="https://www.cnblogs.com/rainaftersummert/archive/2023/06/29/${param.username}">
<input type="submit" value="https://www.cnblogs.com/rainaftersummert/archive/2023/06/29/登錄">
</form>
JSP標簽
<%--轉發:打開該頁面跳到error.jsp,但url不變--%>
<jsp:forward page="/error.jsp">
<%-- 傳遞引數--%>
<jsp:param name="name" value="https://www.cnblogs.com/rainaftersummert/archive/2023/06/29/lihua"/>
<jsp:param name="age" value="https://www.cnblogs.com/rainaftersummert/archive/2023/06/29/15"/>
</jsp:forward>
在error.jsp中得到傳遞的引數
<h1>名字:<%=request.getParameter("name")%></h1>
<h1>年齡:<%=request.getParameter("age")%></h1>
這只是一個例子:jsp還有很多,可以自行查閱
JSTL運算式
JSP標準標簽庫(JSTL)是一個JSP標簽集合,它封裝了JSP應用的通用核心功能,定義了許多標簽彌補一定html標簽的不足,
參考核心標簽庫的語法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
核心標簽有:
還有sql標簽,xml標簽等
可以參考JSP 標準標簽庫(JSTL) | 菜鳥教程 (runoob.com)
使用JSTL標簽步驟:
- 引入對應taglib
- 使用其中的方法
在匯入jstl核心標簽庫發現出錯,最終手動將D:\Maven\apache-maven-3.6.3-bin\apache-maven-3.6.3\maven-repo\javax\servlet\jstl\1.2中的jstl-1.2.jar包復制粘貼到tomcat中D:\tomcat\apache-tomcat-9.0.75-windows-x64\apache-tomcat-9.0.75\lib解決,可能是因為tomcat和maven的版本沖突
c:if例子:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="jsp.jsp" method="get">
<input type="text" name="username" value="https://www.cnblogs.com/rainaftersummert/archive/2023/06/29/${param.username}">
<input type="submit" value="https://www.cnblogs.com/rainaftersummert/archive/2023/06/29/登錄">
</form>
<%--判斷如果提交的用戶名是管理員,就登錄成功--%>
<%--var表示把判斷結果的真偽值賦給var中的引數--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
<c:out value="https://www.cnblogs.com/rainaftersummert/archive/2023/06/29/管理員歡迎你"></c:out>
</c:if>
<c:out value="https://www.cnblogs.com/rainaftersummert/archive/2023/06/29/${isAdmin}"></c:out>
</body>
</html>
結果:
<%--定義一個變數score值為85--%>
<c:set var="score" value="https://www.cnblogs.com/rainaftersummert/archive/2023/06/29/85"></c:set>
<%--判斷--%>
<c:choose>
<c:when test="${score>90}"></c:when>
<c:when test="${score>80}"></c:when>
</c:choose>
<%--for-each--%>
<c:forEach var="people" items="${list}">
<c:out value="https://www.cnblogs.com/rainaftersummert/archive/2023/06/29/${people}"></c:out>
<br>
</c:forEach>
<%--for-i--%>
<c:forEach begin="" end="" step=""></c:forEach>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/556298.html
標籤:其他
上一篇:【numpy基礎】--陣列過濾
下一篇:返回列表