javaWeb之JSP學習

什麼是JSP

  • Java Service Page :Java服務器頁面。
    處理一些Java前後端交互的數據,主要用來顯示數據,不建議大量代碼寫在JSP頁面裏面;

  • 特點:簡單,和HTML差不多

  • 缺點:書寫頁面會很亂,HTML代碼和JAVA交錯;

JSP執行過程

  • 動態請求會被分發到Web容器(Web服務器)中。
    容器會去執行字節碼文件,就是 .class文件。
    Servlet是java類,可以直接編譯成class文件。
    問題?Jsp怎麼編譯成class文件。
    於是你會想,jsp是不是會被轉換成一個java類。

追究本質
Tomcat在工作的時候,將我們的Jsp頁面轉換成了java類
在這裏插入圖片描述
打開這個類分析:

他繼承一個類:HTTPJSPBase , 沒有直接繼承HttpServlet , 但是HTTPJSPBase繼承了HttpServlet,所以得出結論

JSP本身就是一個servlet的方式運行的

那他怎麼輸出頁面的呢?發現他是使用out對象輸出到瀏覽器
在這裏插入圖片描述
那這個out對象上去的方式是什麼呢?

發現,有一個_jspService可以執行操作我們的JSP,將他輸出到前端頁面在這裏插入圖片描述
繼續分析源碼,得到一些屬性;
在這裏插入圖片描述

MVC架構

在這裏插入圖片描述

JSP基礎語法

  • JSP基礎語法
    1.JSP 輸出 獲得變量的值 <%= 表達式或者變量值 %>【可以使用EL表達式注意區別】
    2.JSP定義**局部變量:**寫一段Java代碼 <% Java代碼 %>
    注意點:必須嚴格遵守Java規範
    3.JSP定義全局變量 <%! 全局變量或方法 %>

  • 簡化符:因爲HTML是標記語言,我們需要一些標記
    EL表達式和JSTL標籤

  • ${} == <%= %> 聯繫和區別
    兩者功能一樣都是用來輸出的;但是
    EL表達式一般用來輸出變量的值;而不能是一個對象;

  • tomcat會在jsp解析的時候將_jspService轉換成對應的doget。dopost,我們正常方式無法直接調用!
    <%–

  • //JSP內置對象:
    pageContext 作用域:
    application = pageContext.getServletContext(); 應用
    session = pageContext.getSession(); 會話
    request = 請求
    page = this; 頁面

    ===
    out.輸出
    

–%>

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

全局變量:
<%!
  int i = 0;

  public int add(int a,int b){
      return a+b;
  }

%>

局部變量:
<%
//Java代碼
String name = "qinjiang";
int age = 18;
int j = 0;
    Date date = new Date();

    out.write(
            (java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate
                    ("${name}", java.lang.String.class,
                            (javax.servlet.jsp.PageContext)_jspx_page_context,
                            name
                    )
    );

%>


<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>

  <h1>

日期:<%=new Date()%>
名字:<%=name%>
年齡:<%=age%>
i:<%=i++%>
j:<%=j++%>

  </h1>

  </body>
</html>

簡單擴展BootStarp

前端框架:BootStarp

中文官網:https://www.bootcss.com/

庫:拿來即用

Bootstrap 是全球最受歡迎的前端組件庫,用於開發響應式佈局、移動設備優先的 WEB 項目。

基於 jQuery 的強大的插件系統,能夠快速爲你的想法開發出原型或者構建整個 app 。

類似的還有layui之類的框架;

JSP使用

  • jsp代碼可以在不同的 <%%>中實現,但是,Java代碼必須保持完成,否則500;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>首頁</title>
  </head>
  <body>

  <%--在頁面輸出100個Hello,World--%>

  <%
      for (int i = 0; i < 100; i++) {
  %>
      <h1>Hello,World</h1>
  <%
      }
  %>

 
  </body>
</html>

MVC架構

爲了職責統一,每個人就幹每個人的事情;

解耦 : 低耦合,高內聚 , 類與類之間通過接口交互; 自己各司其職做自己的事情;
在這裏插入圖片描述

JSP指令

<%–
JSP指令只有三個
page、include、taglib (標籤)

公式:
<%@ 指定名 屬性名=屬性值;[屬性名=屬性值;屬性名=屬性值…] %>

page指令
autoFlush:自動刷新 (true,false:默認)
contentType:頁面文本類型 “text/html”
errorPage: 如果存在錯誤頁面,就跳轉至指定的頁面 【不推薦使用,推薦在XML中配置】
language:JSP中使用的語言,默認是java
pageEncoding:頁面編碼
import:因爲jsp本質上就是一個servlet,所以需要導入相關jar包才能使用。

include指令
導入其他頁面包含到本頁,網站中一般有一些公用的位置,我們可以提取出來,比如網站的頭部,和尾部
file屬性:【要導入頁面,一般都是不完整的網頁,只包含部分】

taglib:標籤庫
在jsp中有大量的java代碼十分痛苦,所以開發中我們可以使用一些現成的標籤庫,就相當於使用一些替代java代碼的標籤語言
out.print()-----> <c:out> : 這個c就是一個別人定義好的標籤庫,像這樣的庫有非常多,我們甚至可以自己定義;
我們之後學習的JSTL標籤就是這裏的標籤庫

–%>

需要掌握:

include指定:包含頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div>
    <h1>我是footer</h1>
</div>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div>
    <h1>我是header</h1>
</div>
<body>
  <%--使用include指定加載網頁其他部分--%>
  <%@include file="common/header.jsp"%>
  <h1>我是index頁面</h1>
  <%@include file="common/footer.jsp"%>
</body>

errorPage:錯誤頁面


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--如果網站中出現了404,就跳轉到指定的頁面-->
    <error-page>
        <error-code>404</error-code>
        <location>/error/404.jsp</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/error/500.jsp</location>
    </error-page>
    <error-page>
        <exception-type>java.lang.NullPointerException</exception-type>
        <location>/error/exception.jsp</location>
    </error-page>

</web-app>

JSP標籤

JSP標籤
語法:<jsp:XXX >

  • jsp:include:
    page屬性:要包含的頁面地址

    jsp:include 和 @include 區別
    @include 靜態包含 : 他會把包含進來的頁面和自己的頁面融合成爲一個servlet
    jsp:include 動態包含 :他不會把包含進來的頁面和自己的頁面融合成爲一個servlet 【推薦使用,容錯率更高】

  • jsp:forward
    page屬性:要轉發到的頁面,url不變,
    本質就是request的請求轉發,可以攜帶參數;可以通過request取出來這個攜帶的參數
    一般配合jsp:param使用

  • jsp:param
    一般配合jsp:forward使用,攜帶參數

<jsp:include page="common/header.jsp"/>
<h1>我是tag頁面</h1>
<jsp:include page="common/footer.jsp"/>

<jsp:forward page="index.jsp"/>

<jsp:forward page="index.jsp">
    <jsp:param name="username" value="kuangshen"/>
    <jsp:param name="age" value="18"/>
</jsp:forward>
index頁面的取出代碼

  名字:<%=request.getParameter("username")%>
  年齡:<%=request.getParameter("age")%>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章