天天看點

JSP

一、什麼是JSP

Java Server Pages:java伺服器端頁面,和Servlet一樣,開發動态web頁面的技術。

最大的特點:寫JSP就像在寫HTML         

差別:HTML隻給使用者提供靜态的資料 ,JSP頁面中可以嵌入JAVA代碼,為使用者提供動态資料。

二、JSP原理

伺服器内部工作  tomcat中有一個work目錄; 

我電腦的位址:  D:\Tomcat\apache-tomcat-9.0.45\work\Catalina\localhost\ROOT\org\apache\jsp

JSP

頁面轉變成了java程式。

浏覽器向 伺服器發送請求,不管通路什麼資源,其實都是在通路Servlet。

JSP最終也會被轉換成一個java類。

JSP本質就是一個Servlet。

public void _jspInit() {  }  //初始化

public void _jspDestroy() { }  //銷毀 

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)

throws java.io.IOException, javax.servlet.ServletException { }     //JSPService

1、判斷請求

2、内置一些對象

final javax.servlet.jsp.PageContext pageContext; //頁面上下文

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; charset=UTF-8");       //設定響應的頁面類型

pageContext = _jspxFactory.getPageContext(this, request, response,

null, false, 8192, true);

_jspx_page_context = pageContext;

application = pageContext.getServletContext();

config = pageContext.getServletConfig();

out = pageContext.getOut();

_jspx_out = out;

4、以上的這些對象可以在JSP頁面中直接使用。  

JSP頁面中

隻要是Java代碼就會原封不動的輸出

如果是HTML代碼,就會被轉換為  out.write("<html\r\n>")這樣的格式輸出到前端。

<%--JSP表達式
作用:用來将程式的輸出輸出到用戶端   <%= 變量或者表達式%>   --%>
<%=new java.util.Date()%>

JSP腳本片段      
<%--JSP腳本片段--%>
<%
    int sum = 0;
    for (int i = 0; i < 100; i++) {
        sum+=i;
    }
    out.println("<h1>Sum="+sum+"</h1>");
%>

<%
    int x = 10;
    out.println(x);
%>
<p>這是一個JSP文檔</p>
<%
    int y = 20;
    out.println(y);
%>      
<hr>

<%--在代碼中嵌入HTML元素--%>
<% for (int i = 0; i < 5; i++) {%>
<h1>HelloWorld   <%=i%> </h1>
<%
    }
%>      
JSP聲明      
<%!
   static {
       System.out.println("Loading Servlet");
   }
   private int globalVar = 0;
   public void drigon(){
       System.out.println("進入了方法drigon");
   }
%>

JSP聲明會被編譯到JSP生成的JAVA的類中,其他的會被生成到_jspServlet方法中。

<%%>/片段
<%=%>/表達式輸出的值
<%!%> //定義一些全局的方法      
JSP的注釋不會在用戶端顯示,HTML就會。

JSP指令
<%@page args...>
<%@include file=""%>

      
<%--@include會将兩個頁面合二為一--%>
<%@include file="common/header.jsp"%>

<h1>網頁主體</h1>

<%@include file="common/footer.jsp"%>

<hr>
<%--jsp:include 拼接頁面,本質還是三個--%>
<%--JSP标簽--%>
<jsp:include page="common/header.jsp"/>

<h1>網頁主體</h1>

<jsp:include page="common/header.jsp"/>      
9大内置對象
PageContext  存東西
Request 存東西
Response 
Session 存東西
Application[ServletContext] 存東西
config[ServletConfig]
out
page
exception(異常)


      
pageContext.setAttribute("name1","一号");//儲存的資料隻在一個頁面中有效
request.setAttribute("name2","二号");//儲存的資料隻在一次請求中有效,請求轉發會攜帶這個資料
session.setAttribute("name3","三号");//儲存的資料隻在一次會話中有效,從打開浏覽器到關閉浏覽器
application.setAttribute("name4","四号");//儲存的資料隻在伺服器中有效,從打開伺服器到關閉伺服器

request:用戶端向伺服器發送請求,産生的資料,使用者用完了就沒用了,比如:新聞,使用者看完就沒用了

session:用戶端向伺服器發送請求,産生的資料,使用者用完一會還有用,比如:購物車      
application:用戶端向伺服器發送請求,産生的資料,一個使用者用完了,其他使用者還能使用比如:聊天資料

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:include--%>

<jsp:forward page="/jsptag2.jsp">
    <jsp:param name="name" value="longge"/>
    <jsp:param name="age" value="12"/>
</jsp:forward>

JSTL表達式
JSTL标簽庫的使用就是為了彌補HTML标簽的不足。 它自定義了許多标簽,可以供我們使用,标簽的功能和代碼一樣。

核心标簽(掌握部分)      
文法:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>      
标簽 描述
<c:out> 用于在JSP中顯示資料,就像<%= ... >
<c:set> 用于儲存資料
<c:remove> 用于删除資料
<c:catch> 用來處理産生錯誤的異常狀況,并且将錯誤資訊儲存起來
<c:if> 與我們在一般程式中用的if一樣
<c:choose> 本身隻當做<c:when>和<c:otherwise>的父标簽
<c:when> <c:choose>的子标簽,用來判斷條件是否成立
<c:otherwise> <c:choose>的子标簽,接在<c:when>标簽後,當<c:when>标簽判斷為false時被執行
<c:import> 檢索一個絕對或相對 URL,然後将其内容暴露給頁面
<c:forEach> 基礎疊代标簽,接受多種集合類型
<c:forTokens> 根據指定的分隔符來分隔内容并疊代輸出
<c:param> 用來給包含或重定向的頁面傳遞參數
<c:redirect> 重定向至一個新的URL.
<c:url> 使用可選的查詢參數來創造一個URL
JSTL标簽庫使用步驟
引入對應的taglib   使用其中的方法   在Tomcat中也需要引入jstl的包,否則會報錯:JSTL解析錯誤

      
<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>

<%--判斷如果送出的使用者名是管理者,則登入成功--%>
<%--  Java代碼
    if(request.getParameter("username").equals("admin")){
        out.print("登入成功");
    }
--%>
<c:if test="${param.username=='admin'}" var="isAdmin" >
    <c:out value="管理者歡迎您!"></c:out>
</c:if>
<%--自閉合标簽--%>
<c:out value="${isAdmin}"></c:out>      
格式化标簽

SQL标簽

XML标簽