什麼是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
庫:拿來即用
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")%>