JSP入門

weixin_34075551發表於2019-01-08

參考文獻:http://www.runoob.com/jsp/jsp-tutorial.html

eclipse執行JSP

  • 先配置環境


    5035860-9723db6be7755b51.png
  • 建立一個動態專案File-->New-->Dynamic Web Project

    5035860-b9bbec75a3b8acf5.png

  • WebContent資料夾下新建一個index.jsp
    在<body>標籤內新增

<%
    out.println("Hello World!");
%>
  • Window-->Web Browser修改為1預設瀏覽器
  • run as執行即可

JSP處理過程

  • 瀏覽器傳送一個 HTTP 請求給伺服器。
  • Web 伺服器識別出這是一個對 JSP 網頁的請求,並且將該請求傳遞給JSP 引擎。通過使用 URL或者 .jsp檔案來完成。
  • JSP 引擎從磁碟中載入 JSP 檔案,然後將它們轉化為Servlet。這種轉化只是簡單地將所有模板文字改用println()語句,並且將所有的JSP 元素轉化成Java 程式碼
  • JSP 引擎Servlet編譯成可執行類,並且將原始請求傳遞給Servlet 引擎
  • Web 伺服器的某元件將會呼叫Servlet 引擎,然後載入並執行Servlet 類。在執行過程中,Servlet 產生HTML 格式的輸出並將其內嵌於HTTP response中上交給 Web 伺服器。
  • Web 伺服器以靜態 HTML 網頁的形式將HTTP response返回到瀏覽器中。
  • 最終,Web 瀏覽器處理HTTP response中動態產生的HTML網頁,就好像在處理靜態網頁一樣。

JSP語法

  • 指令碼程式:<% 程式碼片段 %>
  • JSP宣告:<%! declaration; [ declaration; ]+ ... %>(<%! int a, b, c; %> )
  • JSP表示式:<%= 表示式 %>
  • JSP註釋:<%-- 註釋 --%> ,``
  • JSP指令:<%@ directive attribute="value" %>
<%@ page ... %>  #定義頁面的依賴屬性,比如指令碼語言、error頁面、快取需求
<%@ include ... %>  #包含其他檔案
<%@ taglib ... %>  #引入標籤庫的定義,可以是自定義標籤
  • JSP行為:<jsp:action_name attribute="value" />
jsp:include  #用於在當前頁面中包含靜態或動態資源
jsp:useBean #尋找和初始化一個JavaBean元件
jsp:setProperty #設定 JavaBean元件的值
jsp:getProperty #將 JavaBean元件的值插入到 output中
jsp:forward #從一個JSP檔案向另一個檔案傳遞一個包含使用者請求的request物件
jsp:plugin      #用於在生成的HTML頁面中包含Applet和JavaBean物件
jsp:element #動態建立一個XML元素
jsp:attribute   #定義動態建立的XML元素的屬性
jsp:body    #定義動態建立的XML元素的主體
jsp:text    #用於封裝模板資料
  • JSP隱含物件
request   #HttpServletRequest類的例項
response       #HttpServletResponse類的例項
out          #PrintWriter類的例項,用於把結果輸出至網頁上
session  #HttpSession類的例項
application #ServletContext類的例項,與應用上下文有關
config      #ServletConfig類的例項
pageContext  #PageContext類的例項,提供對JSP頁面所有物件以及名稱空間的訪問
page      #類似於Java類中的this關鍵字
Exception   #Exception類的物件,代表發生錯誤的JSP頁面中對應的異常物件

JSP例項

生命週期例項

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%! 
  private int initVar=0;
  private int serviceVar=0;
  private int destroyVar=0;
%>
<%!
  public void jspInit(){
    initVar++;
    System.out.println("jspInit(): JSP被初始化了"+initVar+"次");
  }
  public void jspDestroy(){
    destroyVar++;
    System.out.println("jspDestroy(): JSP被銷燬了"+destroyVar+"次");
  }
%>
<%
  serviceVar++;
  System.out.println("_jspService(): JSP共響應了"+serviceVar+"次請求");
  String content1="初始化次數 : "+initVar;
  String content2="響應客戶請求次數 : "+serviceVar;
  String content3="銷燬次數 : "+destroyVar;
%>
<h1>JSP 測試例項</h1>
<p><%=content1 %></p>
<p><%=content2 %></p>
<p><%=content3 %></p>
</body>
</html>
  • 訪問http://localhost:8080/test/Life.jsp得到
    5035860-3bcce9f85170d2db.png
jsp連線資料庫

查詢資料

  • index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head></head>
<body>
<sql:setDataSource var="snapshot" driver="com.mysql.cj.jdbc.Driver"
     url="jdbc:mysql://localhost:3306/jsp?serverTimezone=GMT%2B8"
     user="root"  password="root"/>
 
<sql:query dataSource="${snapshot}" var="result">
SELECT * from websites;
</sql:query>
<h1>JSP 資料庫例項</h1>
<table border="1" width="100%">
<tr>
   <th>ID</th>
   <th>站點名</th>
   <th>站點地址</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
   <td><c:out value="${row.id}"/></td>
   <td><c:out value="${row.name}"/></td>
   <td><c:out value="${row.url}"/></td>
</tr>
</c:forEach>
</table>
</body>
</html>

PS:需匯入jar包:mysql-connector-java-8.0.11.jarjstl-1.2.jar(放在專案的lib目錄),一定要注意jar包的版本,不同的版本語法不一樣

插入資料

<sql:update dataSource="${snapshot}" var="result">
INSERT INTO websites (name,url,alexa,country) VALUES ('百度', 'http://www.baidu.com', 5093, 'CN');
</sql:update>

刪除資料

<sql:update dataSource="${snapshot}" var="count">
  DELETE FROM websites WHERE Id = ?
  <sql:param value="${11}" />
</sql:update>

修改資料

<c:set var="SiteId" value="3"/>
<sql:update dataSource="${snapshot}" var="count">
  UPDATE websites SET name = '谷歌' WHERE Id = ?
  <sql:param value="${SiteId}" />
</sql:update>

相關文章