1. 程式人生 > 其它 >八、JSP(Java Server Pages)

八、JSP(Java Server Pages)

八、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){
}
  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;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;//當前
  3. 輸出頁面前增加的程式碼

      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();
  4. 以上這些物件我們可以在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標籤