一、什麼是JSP?
JSP全稱是Java Server Pages,它和servle技術一樣,都是SUN公司定義的一種用於開發動態web資源的技術。
JSP這門技術的最大的特點在於,寫jsp就像在寫html,但它相比html而言,html只能爲用戶提供靜態數據,而Jsp技術允許在頁面中嵌套java代碼,爲用戶提供動態數據。
二、JSP原理
Web服務器是如何調用並執行一個jsp頁面的?
瀏覽器向服務器發請求,不管訪問的是什麼資源,其實都是在訪問Servlet,所以當訪問一個jsp頁面時,其實也是在訪問一個Servlet,服務器在執行jsp的時候,首先把jsp翻譯成一個Servlet,所以我們訪問jsp時,其實不是在訪問jsp,而是在訪問jsp翻譯過後的那個Servlet
追究本質
【IDEA注意點】
idea的Tomcat work在他自己的空間中;
C:\Users>IntelliJIdea2018.1>{用戶}>IntelliJIdea2018.1>system>tomcat>Web項目>找JSP生成的Servlet
===
Tomcat在工作的時候,將我們的Jsp頁面轉換成了java類
打開這個類分析:
他繼承一個類:HTTPJSPBase , 沒有直接繼承HttpServlet , 但是HTTPJSPBase繼承了HttpServlet,所以得出結論
JSP本身就是一個servlet的方式運行的
那他怎麼輸出頁面的呢?發現他是使用out對象輸出到瀏覽器
那這個out對象上去的方式是什麼呢?
發現,有一個_jspService可以執行操作我們的JSP,將他輸出到前端頁面。
繼續分析源碼,得到一些屬性;
JSP基礎語法
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--
JSP基礎語法
1.JSP獲得變量的值 <%= 表達式或者變量值 %>
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.輸出
--%>
<%!
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>
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>