javascript
JavaWeb(八)——JSP(Java服务器端页面)
文章目錄
- 1. JSP定義
- 2. JSP原理
- 3. JSP基礎語法
- 4. JSP指令
- 5. 九大內置對象
- 6. JSP標簽、JSTL標簽、EL表達式
1. JSP定義
Java Server Pages : Java服務器端頁面,也和Servlet一樣,用于動態Web技術!
最大特點:
-
寫JSP就像在寫HTML
-
區別:
- HTML只給用戶提供靜態的數據
- JSP頁面中可以嵌入JAVA代碼,為用戶提供動態數據;
2. JSP原理
思路:JSP到底怎么執行的!
- 代碼層面沒有任何問題
- 服務器內部工作
tomcat中有一個work目錄;
IDEA中使用Tomcat的話會在IDEA的tomcat中生產一個work目錄
博主電腦的地址如下圖:
發現頁面轉變成了Java程序!
瀏覽器向服務器發送請求,不管訪問什么資源,其實都是在訪問Servlet!
JSP最終也會被轉換成為一個Java類!
JSP 本質上就是一個Servlet
jspService:jsp服務有如下內容
(1)判斷請求
(2)內置一些對象
final javax.servlet.jsp.PageContext pageContext; //頁面上下文 javax.servlet.http.HttpSession session = null; //session final javax.servlet.ServletContext application; //applicationContext final javax.servlet.ServletConfig config; //config javax.servlet.jsp.JspWriter out = null; //out final java.lang.Object page = this; //page:當前 HttpServletRequest request //請求 HttpServletResponse response //響應(3)輸出頁面前增加的代碼
response.setContentType("text/html"); //設置響應的頁面類型 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(); _jspx_out = out;(4)以上的這些個對象我們可以在JSP頁面中直接使用!
在JSP頁面中;
只要是 JAVA代碼就會原封不動的輸出;
如果是HTML代碼,就會被轉換為:
這樣的格式,輸出到前端!
3. JSP基礎語法
任何語言都有自己的語法,JAVA中有, JSP 作為java技術的一種應用,它擁有一些自己擴充的語法(了解,知道即可!),Java所有語法都支持!
(1)JSP表達式
作用:用來將程序的輸出,輸出到客戶端
語法: <%= 變量或者表達式%>
(2)jsp腳本片段
<%--jsp腳本片段--%><%int sum = 0;for (int i = 1; i <=100 ; i++) {sum+=i;}out.println("<h1>Sum="+sum+"</h1>");%>(3)腳本片段的再實現
<%int x = 10;out.println(x);%><p>這是一個JSP文檔</p><% int y = 2;out.println(y);%><hr><%--在代碼嵌入HTML元素--%><%--EL表達式--%><% for (int i = 0; i < 5; i++) { %><h1>Hello,World</h1><% } %>(4)JSP聲明
<%!static {System.out.println("Loading Servlet!");}private int globalVar = 0;public void haha(){System.out.println("進入了方法haha!");}%>JSP聲明:會被編譯到JSP生成Java的類中!其他的就會被生成到_jspService方法中!
總結如下:
注意:JSP的注釋,不會在客戶端顯示,而HTML的注釋會在客戶端顯示!
測試訪問結果:
4. JSP指令
JSP指令用來設置整個JSP頁面相關的屬性,如網頁的編碼方式和腳本語言。
JSP中的三種指令標簽:
<%@ page … %> 定義網頁依賴屬性,比如腳本語言、error頁面、緩存需求等等 <%@ include … %> 包含其他文件 <%@ taglib … %> 引入標簽庫的定義- 定制錯誤頁面
文件夾創建情況
jsp2.jsp 文件的代碼如下:
錯誤之處:int x = 1/0; (分母不能為0)
404.jsp 和500.jsp 中的代碼如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body> <img src="../img/404.jpg" alt=""> </body> </html> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body><img src="../img/500.png" alt="500"></body> </html>測試訪問結果:
除以上的方法外,還可以在web.xml 中定制
web.xml 文件的代碼如下:
測試訪問結果:
隨意輸入一個不存在的頁面
訪問jsp2.jsp頁面
5. 九大內置對象
在JSP頁面中不需要創建,可直接使用對象。
- PageContext:當前頁面共享數據,還可以獲取其他八個內置對象
- Request:一次請求訪問的多個資源(轉發)
- Response:響應對象
- Session :一次會話的多個請求間
- Application : 所有用戶間共享數據
- config :Servlet的配置對象
- out : 輸出對象,數據輸出到頁面上
- page :不用了解 當前頁面(Servlet)的對象 this
- exception :異常對象
從底層到高層(作用域): page->request–>session–>application(從左到右依次增大)
創建文件pageContextDemo01.jsp,代碼如下:
測試訪問結果:
從另一個頁面pageContextDemo02.jsp測試取出上述的值:(取值代碼與前面一致)發現只取到后兩個值
應用場景:
request:客戶端向服務器發送請求,產生的數據,用戶看完就沒用了,比如:新聞,用戶看完沒用的!
session:客戶端向服務器發送請求,產生的數據,用戶用完一會還有用,比如:購物車;
application:客戶端向服務器發送請求,產生的數據,一個用戶用完了,其他用戶還可能使用,比如:聊天數據;
6. JSP標簽、JSTL標簽、EL表達式
首先pom.xml 中需要導包
<!-- 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標簽
創建文件jsptag.jsp,代碼如下:
創建文件jsptag2.jsp,代碼如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body> <h1>2</h1><%--取出參數--%>名字:<%=request.getParameter("name")%> 年齡:<%=request.getParameter("age")%></body> </html>測試訪問結果:訪問jsptag.jsp ,跳轉到jsptag2.jsp
JSTL表達式
JSTL標簽庫的使用就是為了彌補HTML標簽的不足;它自定義許多標簽,可以供我們使用,標簽的功能和Java代碼一樣!
核心標簽 (掌握部分)
JSTL標簽庫使用步驟
-
引入對應的 taglib
-
使用其中的方法
-
在Tomcat 也需要引入 jstl的包,否則會報錯:JSTL解析錯誤
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
(1)c:if
EL表達式獲取表單中的數據 ${param.參數名}創建文件coreif.jsp ,代碼如下:
<%@ 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><h4>if測試</h4><hr><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:if><%--自閉合標簽--%> <c:out value="${isAdmin}"/></body> </html>測試訪問后出現500 錯誤:
解決方法:
將External Libraries 中的jstl-api 和standard的jar包復制到Tomcat安裝包的lib 文件夾中
再次測試訪問就成功了!
(2)c:choose c:when
創建文件corewhen ,代碼如下:
測試訪問結果:
(3)c:forEach (重點)
創建文件coreforeach.jsp ,代碼如下:
測試訪問結果:
總結
以上是生活随笔為你收集整理的JavaWeb(八)——JSP(Java服务器端页面)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaWeb(七)——Cookie、S
- 下一篇: JavaWeb(九)——JavaBean