八、JSP(Java Server Pages)
阿新 • • 發佈:2022-12-04
八、JSP(Java Server Pages)
8.1、什麼是jsp
Java Server Pages :Java伺服器端頁面,也和Servlet一樣,用於動態Web技術
最大的特點:
-
寫jsp就像寫HTML
-
區別:
-
HTMl只能給使用者提供靜態v的資料
-
JSP頁面可以嵌入Java程式碼,為使用者提供動態v資料:
-
8.2、JSP原理
思路:JSP到底怎麼樣執行的
-
程式碼層面沒有任何問題
-
伺服器內部工作
tomcat中有一個Work目錄
IDEA中使用Tomcat的會在IDEA的tomcat中產生一個work目錄
發現頁面轉換成了Java程式
瀏覽器向伺服器發出請求,不管訪問什麼資源,其實都是在訪問Servlet!
JSP最終也會變成一個Java類
JSP本質上就是一個Servlet
//初始化
public void _jspInit() {
}
//銷燬
public void _jspDestroy() {
}
//JSPService
public void _jspService(HttpServletRequest request,HttpServletResponse response){
}
-
判斷請求
-
內建一些物件
final javax.servlet.jsp.PageContext pageContext;//頁面上下文 javax.servlet.http.HttpSession session = null;//session final javax.servlet.ServletContext application;//applicationContext final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this;//當前
-
輸出頁面前增加的程式碼
response.setContentType("text/html;charset=UTF-8"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut();
-
以上這些物件我們可以在JSP頁面中可以直接使用
8.3、jsp基本語法
任何語言都有自己的語法,Java中有,jsp也有,作為Java技術的一種應用,它擁有一些自己擴充的語法(瞭解,知道即可),Java語言都支援
JSP表示式
<%--JSP表示式作用:用來將程式的輸出,輸出到客戶端--%>
<%= 變數或者表示式%>
<%= new java.util.Date()%>
JSP指令碼片段
<%--JSP指令碼片段--%>
<%
int sum=0;
for (int i = 0; i < 100; i++) {
sum+=i;
}
%>
JSP宣告
<%!
static {
System.out.println("Loading Servlet");
}
public void lyh(){
System.out.println("進入了方法lyh");
}
%>
JSP宣告:會被編譯到JSP生成的Java的類中,其他的,就會被生成到_jspService方法中
在JSP,嵌入Java程式碼即可
<% %> 寫Java程式碼的
<%= %> 在客戶端輸出一個Java的值
<%! %> 宣告在_jspService之外
8.4、9大內建物件
-
PageContext 存東西
-
Request 存東西
-
Response
-
Session 存東西
-
Application 【ServletContext】 存東西
-
config 【SerlvetConfig】
-
out
-
page(基本不用)
-
exception
//儲存的資料只在一個頁面中生效
pageContext.setAttribute("name1","李永輝1");
//儲存的資料只在一次請求中有效,請求轉發會攜帶這個資料
request.setAttribute("name2","李永輝2");
//儲存的資料只能再一次會話中有效,從開啟瀏覽器到關閉瀏覽器
session.setAttribute("name3","李永輝3");
//儲存的資料只在伺服器中有效,從開啟伺服器到關閉伺服器
application.setAttribute("name4","李永輝4");
8.5、JSP標籤,JSTL標籤,EL標籤
<!-- jstl表示式的依賴-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard標籤庫-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
EL表示式:${ }
-
獲取資料
-
執行運算
-
獲取web開發的常用物件
JSP標籤
<jsp:forward page="/jsptag2.jsp">
<jsp:param name="name" value="李永輝"/>
<jsp:param name="age" value="22"/>
</jsp:forward>
JSTL表示式:
JSTL標籤庫的使用就是為了彌補HTML標籤的不足,他自定義許多標籤,可以供我們使用,標籤的功能和Java程式碼嗎一樣
核心標籤
<%@ 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="coreif.jsp" method="get">
<%-- EL表示式獲取表單中的資料,${param.引數名}--%>
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登入" >
</form>
<%--判斷如果提交的使用者名稱是管理員,則登入成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
<c:out value="管理員歡迎你"></c:out>
</c:if>
<c:out value="${isAdmin}"></c:out>
</body>
</html>
<%@ 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>
<c:set var="score" value="80"/>
<c:choose>
<c:when test="${score>=90}">
優秀
</c:when>
<c:when test="${score>=80}">
一般
</c:when>
<c:when test="${score>=70}">
及格
</c:when>
<c:when test="${score<=60}">
不及格
</c:when>
</c:choose>
</body>
</html>
<%@ page import="java.util.ArrayList" %>
<%@ 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>
<%
ArrayList<String> people = new ArrayList<>();
people.add(0,"張三");
people.add(1,"李四");
people.add(2,"李永輝");
people.add(3,"趙六");
people.add(4,"清瘦");
people.add(5,"天六月");
request.setAttribute("list",people);
%>
<%--
var:每一次遍歷出來的變數
items:要遍歷的物件
begin:哪裡開始
end:到哪裡
step:步長
--%>
<c:forEach var="people" items="${list}">
<c:out value="${people}"></c:out>
<br>
</c:forEach>
</body>
</html>
格式化標籤
SQL標籤