JavaWeb——JSP開發1

來源:互聯網
上載者:User

標籤:求和   webapp   運算式   方式   str   ace   tomcat   指定   image   

1、什麼是jsp,為什麼要使用jsp。

  再使用idea建立完一個web工程後,在webapp目錄下會產生一個index.jsp

  直接編譯運行,網站將自動開啟這樣一個網頁:

  所以我們可以推測這個index.jsp就是決定這個項目的初始頁面的HTML編碼的,這裡的hello-world是部署Tomcat時設定的。

  所以其實JSP就是用來編寫HTML編碼的一種解決方案,那為什麼需要額外的這樣一套解決方案呢?

  這是我之前對Servlet簡單的使用:

        PrintWriter writer = resp.getWriter();        writer.append("<!DOCTYPE html>\r\n")                .append("<html >\r\n")                .append("   <head>\r\n")                .append("       <title>hello user application</title>\r\n")                .append("   </head>\r\n")                .append("   <body>\r\n")                .append("       Hello, ").append(user).append("!<br/><br/>\r\n")                .append("         <form action=\"first\" method=\"POST\">")                .append("              Enter your name:<br/>\r\n")                .append("              <input type=\"text\" name=\"user\"/><br/>\r\n")                .append("              <input type=\"submit\" value=\"Submit\"/>\r\n")                .append("         </form>\r\n")                .append("     </body>\r\n")                .append("</html>\r\n");

  這是在像response添加本文,用於HTML的編碼,可以發現這裡HTML和Java結合得並不好,導致代碼很長還很亂,特別是引號需要轉義符。所以其實我們應該把這一塊HTML編碼獨立出去,所以就有了這樣一套名為JSP(JavaServerPages)的混合解決方案,它結合了Java代碼和HTML標籤,JSP包括了所有的HTML標籤,以及內建的JSP標籤、自訂的JSP標籤以及運算式語言。

 

2、JSP在運行時的處理

  • 其實JSP只是一個精心設計的Servlet,JSP只是一種文法糖,在啟動並執行時候JSP代碼將由JSP編譯器進行轉換,它將解析出JSP代碼的特性並把它們轉換成Java代碼,由JSO建立得到的Java類都將實現Servlet,最後和其他Servlet一樣對請求做出響應。
  • JSP和其他Servlet一樣有自己的生命週期,不同的Web容器不一樣,比如在Tomcat中JSP將在第一次請求到達之前被即時的轉換並編譯,對於之後的請求可以之間使用編譯好的JSP。而許多其他的容器則提供了在部署應用程式時先行編譯所有的JSP選項。

 

3、JSP指令

  JSP指令用來設定整個JSP頁面相關的屬性,如網頁的編碼方式和指令碼語言。

  • <%@ page ... %>提供了對JSP如何進行轉換、渲染和傳輸到用戶端的控制
<%@ page language="java" contentType="text/html; charset=UTF-8"%>

  其中language將告訴容器JSP使用的是那種指令碼語言,contentType和charset將設定JSP頁面的MIME類型和字元編碼,

  page指令相關的屬性:

buffer 指定out對象使用緩衝區的大小
autoFlush 控制out對象的 緩衝區
contentType 指定當前JSP頁面的MIME類型和字元編碼
errorPage 指定當JSP頁面發生異常時需要轉向的錯誤處理頁面
isErrorPage 指定當前頁面是否可以作為另一個JSP頁面的錯誤處理頁面
extends 指定servlet從哪一個類繼承
import 匯入要使用的Java類
info 定義JSP頁面的描述資訊
isThreadSafe 指定對JSP頁面的訪問是否為安全執行緒
language 定義JSP頁面所用的指令碼語言,預設是Java
session 指定JSP頁面是否使用session
isELIgnored 指定是否執行EL運算式
isScriptingEnabled 確定指令碼元素能否被使用
  • JSP可以通過include指令來包含其他檔案。被包含的檔案可以是JSP檔案、HTML檔案或文字檔。包含的檔案就好像是該JSP檔案的一部分,會被同時編譯執行。
<%@ include file="檔案相對 url 地址" %>
  • JSP API允許使用者自訂標籤,一個自訂標籤庫就是自訂標籤的集合。Taglib指令引入一個自訂標籤集合的定義,包括庫路徑、自訂標籤。

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

 

4、在JSP中使用Java

jsp中寫java代碼有如下三種方式:

<%! %>,這裡面可以申明變數或方法,注意:這裡面申明的變數是全域的

<% %>,與上面的方法相比,這個方法的局部的

<%= %>,用於輸出運算式到瀏覽器,注意:這裡面的運算式不能跟分號

 

  • 使用JSP中的隱式變數

  JSP檔案提供了幾個可以在指令碼和運算式中可以使用的隱式變數,這些變數不需要在任何位置定義即可使用它們,JSP規範要求JSP的轉換器和編譯器提供這些變數,名字也要完全相同。從一個編譯後的JSP檔案中可以看到這樣一些程式碼片段

 1   public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) 2       throws java.io.IOException, javax.servlet.ServletException { 3  4     final javax.servlet.jsp.PageContext pageContext; 5     javax.servlet.http.HttpSession session; 6     final javax.servlet.ServletContext application; 7     final javax.servlet.ServletConfig config; 8     javax.servlet.jsp.JspWriter out = null; 9     final java.lang.Object page = this;10     javax.servlet.jsp.JspWriter _jspx_out = null;11     javax.servlet.jsp.PageContext _jspx_page_context = null;12 13     try {14       response.setContentType("text/html; charset=UTF-8");15       pageContext = _jspxFactory.getPageContext(this, request, response,16                   null, false, 8192, true);17       _jspx_page_context = pageContext;18       application = pageContext.getServletContext();19       config = pageContext.getServletConfig();20       out = pageContext.getOut();21       _jspx_out = out;22     }

  這裡總共定義了8個隱式變數,分別是:

  • request、response

  HttpServletRequest類和HttpServletResponse類的執行個體

  • pageContext

   PageContext類的執行個體,提供對JSP頁面所有對象以及命名空間的訪問

  • session

  HttpSession類的執行個體,如果在page指令中的session特性設定為假那麼JSP中就沒有這個變數

  • application、

  ServletContext類的執行個體,與應用上下文有關

  • config、

  ServletConfig類的執行個體,可以使用該對象訪問JSP Servlet的配置,例如Servlet初始化參數

  • out、

  JspWriter類的執行個體,用於把結果輸出至網頁上

  • page

  類似於Java類中的this關鍵字,提供了請求特性和回話特性值、訪問請求和響應、包含其他檔案、轉寄請求的幾個便利方法

  最後還有一個exception這裡沒有出現,這個變數需要通過page指令的isErrorPage特性設定為真,表示該JSP的目的是用於處理錯誤,才會出現這個變數。

  建立一個first.jsp檔案,添加以下的代碼

<%@ page language="java" contentType="text/html; charset=UTF-8" %><%!    private static final String DEFAULT_USER = "Guest";%><%    String user = request.getParameter("user");    if(user == null){        user = DEFAULT_USER;    }%><!DOCTYPE html><html>    <head>    <title>first user application</title>    </head>    <body>        hello, <%= user %> ! <br/><br/>        <form action="first.jsp" method="post">                輸入使用者名稱:<br/>                <input type="text" name="user"/><br/>                <input type="submit" value="Submit"/>        </form>    </body></html>

  編譯運行,在瀏覽器中輸入http://localhost:8080/hello-world/first.jsp就可以得到下面這個網頁

  這裡就實現了之前的Servlet,不過其實並不應該在JSP中使用Java

 

5、注釋

  在JSP中實現代碼注釋的方法有四種:

  • XML注釋
  <!-- 這是被注釋的內容 -->

 

  但是這種類型的注釋將被發送到用戶端,瀏覽器將會忽略它,但是它會出現在響應的原始碼中注釋中的任何JSP代碼都將會被處理,

<!-- 這是被注釋的內容<%!private static final String DEFAULT_USER = "Guest";%> -->

  這裡的java代碼就將會被執行。

  • 傳統的java行注釋以及java塊注釋,也就是//...和/*...*/
<%    String user = request.getParameter("user");//    if(user == null){//        user = DEFAULT_USER;//    }/*        String pwd = req.getParameter("pwd");    String sex = req.getParameter("sex"); */%>
  • JSP注釋
<%-- JSP注釋掉的內容 --%>

 

6、結合使用Servlet和JSP

  • 配置部署描述符中的JSP屬性

    在空的web.xml檔案(只包含<display-name>)中,添加以下內容:

  <jsp-config>    <jsp-property-group>      <url-pattern>*.jsp</url-pattern>      <url-pattern>*.jspf</url-pattern>      <page-encoding>UTF-8</page-encoding>      <scripting-invalid>false</scripting-invalid>      <include-prelude>/WEB-INF/jsp/base.jspf</include-prelude>      <trim-directive-whitespaces>true</trim-directive-whitespaces>      <default-content-type>text/html</default-content-type>    </jsp-property-group>  </jsp-config>

  標籤<jsp-config>中可以包含任意數目的</jsp-property-group>標籤,這個屬性用於區分不同JSP組的屬性。例如為/WEB-ING/JSP/admin檔案夾中所有的JSP定義一組通用的屬性,為/WEB-ING/JSP//help定義另一組屬性,那麼需要通過定義<url-pattern>標籤來區分不同的屬性群組,其中一個被設定為<url-pattern>/WEB-ING/JSP/admin/*.jsp</url-pattern>,另一個則被設定為<url-pattern>/WEB-ING/JSP/help/*.jsp</url-pattern>。

  

 

 

JavaWeb——JSP開發1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.