Java匹馬行天下之JavaWeb核心技術——JSP

JSP動態網頁技術

1、JavaWeb簡介

1、什麼是JavaWeb?

  •  JavaWeb是用Java技術來解決相關web互聯網領域的技術總稱。
  •  須要在特定的web服務器上運行,分爲web服務器和web客戶端兩部分
  •  跨平臺,可以在多個平臺下部署和運行

2、靜態網頁和動態網頁

  • 靜態網頁:網頁中的內容是固定的,不會更新。
  • 所用技術爲html、css;
  • 動態網頁:網頁中的內容經過程序動態顯示的,自動更新。
  • 所用技術爲html、css、數據庫、至少一門高級語言(Java、C#,PHP),JavaScript,XML等,主流的動態網頁腳本技術(jsp/Asp.net/php)

3、Tomcat服務器目錄介紹

 

 

WEB-INF是Java的Web應用的安全目錄。所謂安全就是客戶端沒法訪問,只有服務端能夠訪問的目錄。php

web.xml文件是項目的部署文件css

classes文件夾,用於放置*.class文件html

lib文件夾,用於存放須要的jar包java

如圖:web

 

 

4、修改Tomcat服務器默認端口

在Tomcat的安裝目錄下,找到conf-->server.xml文件數據庫

 

 

找到Connector標籤編程

 

 

修改port屬性的值便可,端口修改完成後要記得保存,而且重啓Tomcat服務器。瀏覽器

 

 

2、JSP基礎學習

1、JSP簡介

JSP全名爲Java Server Pages,其根本是一個簡化的Servlet設計,他實現了再Java當中使用HTML標籤。JSP是一種動態網頁技術標準也是JavaEE的標準。JSP與Servlet同樣,是在服務器端執行的。緩存

 

JSP實際上就是Servlet。JSP這門技術的最大的特色在於:寫jsp就像在寫html,但它相比html而言,html只能爲用戶提供靜態數據,而Jsp技術容許在頁面中嵌套java代碼,爲用戶提供動態數據。安全

2、JSP的做用

  • Servlet:服務器端的小應用程序。適合編寫Java邏輯代碼,若是編寫網頁內容------->費時費力,太苦

缺點:不適合設置HTML響應體,須要大量的

response.getWriter().print("<html>");

優勢:動態資源,能夠編程。

  • HTML:靜態內容

缺點:HTML是靜態頁面,不能包含動態信息;

優勢:不用爲輸出html標籤而發愁。

  • jspjava server pages):適合編寫輸出動態內容,但不適合編寫Java邏輯

優勢:在原有HTML的基礎上添加java腳本,構成jsp頁面。

 

3、JSP和Servlet的分工

  • JSP

做爲請求發起頁面,例如顯示錶單、超連接。

做爲請求結束頁面,例如顯示數據。

  • Servlet

做爲請求中處理數據的環節

 

4、JSP的組成

 

 

jsp=html+java腳本+jsp標籤(指令)

jsp中無需建立便可使用的對象一共有9個,稱爲九大內置對象。

3種java腳本:

  • <%……%> java代碼片斷(經常使用),用於定義0-N條java語句,方法內寫什麼就能夠在這裏寫什麼,不能聲明方法和類;
  • <%=……%> java表達式,用於輸出(經常使用),用於輸出一條表達式(或變量)的結束,print()括號中參數能夠放什麼,這裏就能放什麼;
  • <%!……%> 聲明,用來建立類的成員變量和成員方法(基本不用),class A{ } 類體中能夠放什麼,這裏就能夠放什麼。

5、JSP的執行流程及原理

 

 

 

jsp實際上是一種特殊的Servlet

  • 當jsp頁面第一次被訪問時,服務器會把jsp編譯成java文件(這個java實際上是一個Servlet類);
  • 而後再把java編譯成.class;
  • 而後建立該類對象;
  • 最後調用它的service()方法;
  • 第二次請求同一jsp時,直接調用service()方法。
  • 在Tomcat的work目錄下能夠找到jsp對應的.java源代碼。

 

一、IE瀏覽器在訪問JSP頁面時,Web服務器是如何調用並執行一個jsp頁面的?(Servlet)

  •   第一次:轉譯(翻譯) --> 編譯 --> 執行
  •   第二次:執行

二、Web服務器在執行jsp頁面時,是如何把Jsp頁面中的html排版標籤發送到客戶端的?

  •   out.print("<......>"); 或者 out.write("<......>");

三、Jsp頁面中的java代碼服務器是如何執行的?

  •   服務器 --> .java文件 --> .class文件 --> 結果out回客戶端

四、Web服務器在調用jsp時,會給jsp提供一些什麼java對象(內置對象)?

  •   HttpSession、ServletConfig、ServletContent、request、response、out等等。

 

6、JSP的基本語法

  •   Servlet:控制器。重點編寫java代碼邏輯。(獲取表單數據、處理業務邏輯、分發轉向)
  •   JSP:代碼顯示模板。重點在於顯示數據。(爲何顯示數據不直接用.html文件呢?由於.jsp文件中能夠插入java代碼顯示回顯消息,簡言之,jsp功能更強大)

 一、JSP的模版元素:簡言之就是網頁的靜態內容

    例如:html標籤和普通文本。

 二、JSP的腳本     

  • <%……%> java代碼片斷(經常使用),用於定義0-N條java語句,方法內寫什麼就能夠在這裏寫什麼,不能聲明方法和類;
  • <%=……%> java表達式,用於輸出(經常使用),用於輸出一條表達式(或變量)的結束,print()括號中參數能夠放什麼,這裏就能放什麼;

        <%= 2 + 3 %> 等價於out.print(2 + 3);

  • <%!……%> 聲明,用來建立類的成員變量和成員方法(基本不用),class A{ } 類體中能夠放什麼,這裏就能夠放什麼。

 

 

    三、註釋

    JSP註釋:<%-- 被註釋的內容 --%> 特色:安全,省流量

    網頁註釋:<!-- 網頁註釋 -->     特色:不安全,費流量

 

7、JSP的三個指令

 JSP指令(directive)是爲JSP引擎而設計的,它們並不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其他部分

 在JSP 2.0規範中共定義了三個指令: 

  •   page指令(頁面級別)
  •   include指令(導入其它頁面的信息)
  •   taglib指令(標籤指令)

例如:

 

 1page

    做用:page指令用於定義JSP頁面的各類屬性,不管page指令出如今JSP頁面中的什麼地方,它做用的都是整個JSP頁面。

        爲了保持程序的可讀性和遵循良好的編程習慣,page指令最好是放在整個JSP頁面的起始位置。 

    屬性

 

  •      importjava代碼中的import是同樣的。

        <%@ page import="java.util.Date, java.util.List" %>

        或者:

        <%@ page import="java.util.Date" %>

        <%@ page import="java.util.List" %>

        JSP會自動導入(默認導入)如下的包:

          import java.lang.*;

          import javax.servlet.*;

          import javax.servlet.http.*;

          import javax.servlet.jsp.*;

  •      session: 表示是否會自動建立session對象。其默認值是true
  •       buffer: JSP中有javax.servlet.jsp.JspWriter輸出字符流。設置輸出數據的緩存大小,默認大小是8kb。建議最好不要改大小。
  •      errorPage: 若是頁面中有錯誤,則跳轉到指定的資源。(即不讓頁面彈出404/500等錯誤)

        errorPage="/uri" 

        若是寫"/"則表明當前應用的目錄下,絕對路徑。

        若是不寫"/"則表明相對路徑。

  •      isErrorPage: 表示是否建立throwable對象。其默認值是false。做用:輸出頁面錯誤信息:by zero
  •      contextType: contentType="text/html; charset=UTF-8" 告訴瀏覽器使用什麼編碼來解析文本。等同於 response.setContextType("text/html; charset=utf-8"); 
  •      pageEncoding: 告訴JSP引擎(服務器)要轉譯(翻譯)的文件使用的編碼。

        例如:<%@ page  pageEncoding="gbk" %>

  •      isELIgnored: 是否支持EL表達式。 默認是false,表示支持EL表達式。

        例如:${1+1}  等價於out.print(1+1);

   

   

2include

      include指令用於引入其它JSP頁面,若是使用include指令引入了其它JSP頁面,那麼JSP引擎將把這兩個JSP翻譯成一個servlet。因此include指令引入一般也稱之爲靜態引入。

  •         靜態包含:把其它資源包含到當前頁面中。

          <%@ include file="/include/header.jsp" %>

  •         動態包含:

          <jsp:include page="/include/header.jsp"></jsp:include>

        二者的區別:轉譯(翻譯)的時間段不一樣

  •           前者:在翻譯時就把兩個文件合併
  •           後者:不會合並文件,當代碼執行到include時,才包含另外一個文件的內容。

        使用原則:能用靜的就不用動的。緣由之一是:能夠省略一些代碼的書寫。

   3taglib

JSP API容許用戶自定義標籤,一個自定義標籤庫就是自定義標籤的集合。

Taglib指令引入一個自定義標籤集合的定義,包括庫路徑、自定義標籤。

Taglib指令的語法:

<%@ taglib uri="uri" prefix="prefixOfTag" %>

  

uri屬性肯定標籤庫的位置,prefix屬性指定標籤庫的前綴。

等價的XML語法:

<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />

  

      做用:在JSP頁面中導入JSTL標籤庫。替換jsp中的java代碼片斷。

        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    prefix:前綴(至關於從新給uri起個名字)

 

       示例:

    

           <%   

          if (5 > 3) { 

          out.print(5); 

          } 

        %> 

        <%-- 上下二種方式是等價的 --%>

        <c:if test="${5>3}"> 

          aaa 

        </c:if>

      下面的這種方式很好用!後面慢慢體會。

   

 

8、JSP的動做

使用標籤的形式來表示一段java代碼。

 

JSP行爲標籤使用XML語法結構來控制servlet引擎。它可以動態插入一個文件,重用JavaBean組件,引導用戶去另外一個頁面,爲Java插件產生相關的HTML等等。

行爲標籤只有一種語法格式,它嚴格遵照XML標準:

<jsp:action_name attribute="value" />

  

行爲標籤基本上是一些預先就定義好的函數,下表羅列出了一些可用的JSP行爲標籤:

 

9、JSP的九個內置對象

指在JSP的<%=%> 和<% %>中能夠直接使用的對象,服務器給咱們建立好的對象,直接拿過來用就好了。

      例如:

     

          <%=request.getParameter("name") %>

      <%

         Student stu = new Student();

         stu.setName("tom");

         out.print(stu.getName());

         // request.getRequestDispatcher("/7.jsp").forward(request, response);

       %>

  

 

 

 

10、JSP客戶端請求

HttpServletRequest類

request對象是javax.servlet.http.HttpServletRequest類的實例。每當客戶端請求一個頁面時,JSP引擎就會產生一個新的對象來表明這個請求。

request對象提供了一系列方法來獲取HTTP信息頭,包括表單數據,cookies,HTTP方法等等。

接下來將會介紹一些在JSP編程中經常使用的獲取HTTP信息頭的方法。詳細內容請見下表:

 

 

 

HTTP信息頭示例

在這個例子中,咱們會使用HttpServletRequest類的getHeaderNames()方法來讀取HTTP信息頭。這個方法以枚舉的形式返回當前HTTP請求的頭信息。

獲取Enumeration對象後,用標準的方式來遍歷Enumeration對象,用hasMoreElements()方法來肯定何時中止,用nextElement()方法來得到每一個參數的名字

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<h2>HTTP 頭部請求實例</h2>
<table width="100%" border="1" align="center">
<tr bgcolor="#949494">
<th>Header Name</th><th>Header Value(s)</th>
</tr>
<%
   Enumeration headerNames = request.getHeaderNames();
   while(headerNames.hasMoreElements()) {
      String paramName = (String)headerNames.nextElement();
      out.print("<tr><td>" + paramName + "</td>\n");
      String paramValue = request.getHeader(paramName);
      out.println("<td> " + paramValue + "</td></tr>\n");
   }
%>
</table>
</body>
</html>

  

11、JSP服務器響應

HttpServletResponse類

response 對象是 javax.servlet.http.HttpServletResponse 類的一個實例。就像服務器會建立request對象同樣,它也會建立一個客戶端響應。

response對象定義了處理建立HTTP信息頭的接口。經過使用這個對象,開發者們能夠添加新的cookie或時間戳,還有HTTP狀態碼等等。

下表列出了用來設置HTTP響應頭的方法,這些方法由HttpServletResponse 類提供:

 

HTTP響應頭程序示例

接下來的例子使用setIntHeader()方法和setRefreshHeader()方法來模擬一個數字時鐘:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<h2>自動刷新實例</h2>
<%
   // 設置每隔5秒自動刷新
   response.setIntHeader("Refresh", 5);
   // 獲取當前時間
   Calendar calendar = new GregorianCalendar();
   String am_pm;
   int hour = calendar.get(Calendar.HOUR);
   int minute = calendar.get(Calendar.MINUTE);
   int second = calendar.get(Calendar.SECOND);
   if(calendar.get(Calendar.AM_PM) == 0)
      am_pm = "AM";
   else
      am_pm = "PM";
   String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
   out.println("當前時間: " + CT + "\n");
%>
</body>
</html>

  

 

 

此篇是我在學習過程當中參考菜鳥教程以及筆記和別人博客(黑澤君)完成

Java匹馬行天下依舊在更新中,歡迎你們關注,感受能夠的能夠點擊一下推薦,若若有誤,感謝指正,謝謝!

相關文章
相關標籤/搜索