1. 程式人生 > >Java for Web學習筆記(十一):JSP(1)何為JSP

Java for Web學習筆記(十一):JSP(1)何為JSP

使用JSP

通java程式碼來編寫HTML很是繁瑣,通過使用JSTL(JSP標準標籤庫,JavaServer Pages™ Standard Tag Library),通過JSP來更便攜的實現。對JSP的支援Maven中包括javax.servlet.jsp-api、javax.servlet.jsp.jstl-api。Jstl在2011年12月釋出1.2.1後就沒有再更新,如需要更全面的功能,引入org.glassfish.web提供的jar包。Maven的pom.xml程式碼片段如下:

<dependency>
    <groupId>javax.servlet.jsp</groupId>  
    <artifactId>javax.servlet.jsp-api</artifactId>  
    <version>2.3.2-b02</version>  
    <scope>provided</scope>  
</dependency>
    
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>  
    <artifactId>javax.servlet.jsp.jstl-api</artifactId>  
    <version>1.2.1</version>  
    <scope>compile</scope>  
</dependency>

<dependency>
    <groupId>org.glassfish.web</groupId>  
    <artifactId>javax.servlet.jsp.jstl</artifactId>  
    <version>1.2.2</version>
    <scope>compile</scope>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
        </exclusion>
    </exclusions>             
</dependency>        

什麼是JSP

下面是一個JSP的例子:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
	<title>Chapter 04 Application</title>
</head>
<body>
	<h2>Hello World!</h2>
</body>
</html>

JSP提供了指令碼和java混合方式。例子是index.jsp。第一行的相關語法後面學習。其中contentType="text/html;charset=UTF-8"設定了HTTP應答中的header:Content-Type,即response.setContentType("text/html;charset=UTF-8");

JSP是“syntactic sugar”(英國電腦科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語。指的是,在計算機語言中新增某種語法,這種語法能使程式設計師更方便的使用語言開發程式,同時增強程式程式碼的可讀性,避免出錯的機會;但是這種語法對語言的功能並沒有影響。)JSP編譯器將jsp轉換為Java程式碼,每一個jsp作為一個servlet。如果在tomcat中部署,位於tomcat目錄下work\Catalina\localhost\<your app>,如果使用Eclipse調測,則在預設專案目錄\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\chapter04

\org\apache\jsp,裡面有index_jsp.java和index_jsp.class。

我們開啟index_jsp.java,看到:

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports {
    … …
    public void _jspService(final javax.servlet.http.HttpServletRequest request,final javax.servlet.http.HttpServletResponse response)
        throws java.io.IOException, javax.servlet.ServletException {
        ……
    }
    … …
}

不同的web container翻譯java code會有所不同,tomcat使用的是org.apache.jasper類,但是都會符合jsp的標準,雖然程式碼看起來不同,但是執行的結果是一樣的。

Tomcat會在第一次訪問jsp時進行翻譯和編譯,因此第一次執行可能會引發效能問題。有不少web container提供在部署時預編譯的選項,這會增加部署時間,根據需求選擇。

相關推薦

Java for Web學習筆記JSP1JSP

使用JSP 通java程式碼來編寫HTML很是繁瑣,通過使用JSTL(JSP標準標籤庫,JavaServer Pages™ Standard Tag Library),通過JSP來更便攜的實現。對JSP的支援Maven中包括javax.servlet.jsp-api、javax.servlet.jsp.js

Java for Web學習筆記Spring security準備2授權

訪問的範圍和許可權屬於授權。 Principals和Identities 就Java而言,很方便利用java.security.Principal。Principal至少會包含已被認證的使用者identity,例如使用者名稱,還可能有其他資訊。此外還可以保護使用者的授權資

Java for Web學習筆記Session3Session Listener

Session Listener 可以通過Listner來監聽session的變化,這就是所謂的publish and subscribe模型。這是一種訊息資訊釋出一方叫釋出者,資訊的接收方叫訂閱者,實際也是事件驅動的高大上說法,訂閱某個事件,然後觸發處理。這種方式最大的作用是將進行session變化以及s

Java for Web學習筆記四二Spring security準備3初窺

瞭解Spring Security的基本知識 完全J2EE的web container也能提供完整的安全框架,但tomcat不是。Spring Security可以使用JDBC,或者我們的服務或倉庫來認證使用者,也提供了內建的對微軟Active Derectory,Jasi

Java for Web學習筆記訊息和叢集5利用websocket實現訂閱和釋出

叢集中的訂閱和釋出 利用spring framework在本app內的訂閱和釋出十分簡單。當我們系統越來越複雜的時候,我們需要向其他app釋出訊息。本學習將給出一個通過websocket來實現不同app之間訊息的訂購和釋出。 在小例子中,我們在所有節點之間都建立webSoc

Java for Web學習筆記三二對映8@ElementCollection

說明 在前面我們學習了OneToOne、OneToMany、ManyToOne,將資料庫中不同表格的關聯轉換為spring中不同entity的關聯。但是在不少場景中,我們希望在一個entity的檢視中同檢視到這幾個表的資訊,而無需通過entity之間的關聯。 在這個小例子

Java for Web學習筆記Log2配置log4j2

相關maven <!-- log4j-api提供logging的API。這是log4j2中唯一需要在compile時加入,含有你所需的所有類 --> <dependency> <groupId>org.apache.loggin

Java for Web學習筆記Java EE的介紹

  最近有個專案,當中涉及到Java Servlet,專案已經進行了一段日子,最近因為有重大需求調整,需要對架構重新進行梳理,一看,基本上哭笑不得,有不少地方真是黑色幽默,怎麼會這樣呢。   當在這過程中,也引發了我興趣,畢竟之前沒有系統地瞭解過。在網上找到了一本書professional Java for

Java for Web學習筆記一一再談Entity對映4動態表格建立

如果這個不確定表格也需要我們的war來建立,如何實現。create table的原生SQL,entityManager是無法執行的,因為這不是可以回滾的事務。這種情況,我們需要: 捕獲表格不存在的異常 從原始的Connection中實現表格建立。獲取Connection能否從

Java for Web學習筆記三八篇外之資料庫的ACID和JPA2JPA

在測試中,我們發現在一個JPA事務中: Spring Data的寫SQL是在最後commit前發出,這最大程度地縮短了寫操作和commit之間的時間。 對相同的ID的讀,JPA只從資料庫中讀取一次。 從資料庫中獲取entity,修改entity的資料,即使最後沒有執行s

Java for Web學習筆記二五JSTL1使用JSTL

在前面已經使用過JSTL,例如<c:url>,fn是JSTL的functionlibrary,而c是JSTL的tag library。使用它們,我們要告知解析器,如下: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core

Java Web 學習筆記RestEasy統一處理異常

JBoss RestEasy框架配置異常統一處理 前提 利用JBoss restEasy框架搭建的restful java web後臺應用 希望通過統一的方式對restful介面丟擲的異常進行

Java for Web學習筆記Servlet6doGet()和doPost()是執行緒還是佇列

做一個小實驗,程式碼如下: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try{ for(i

Java for Web學習筆記Servlet7上傳檔案

上傳檔案 Servlet的引數設定 採用annotation方式如下: @WebServlet( name = "TicketServlet", urlPatterns = {"/tickets"}, loadOnStartup = 1 ) /* MultipartConfig配置了本Servlet

Java for Web學習筆記三五自定義tag3TLDS和Tag Handler

JSTL的TLD   這是JSTL採用的方式。TLD(Tag Library Descriptor)描述tag和function,以及具體執行的java程式碼tag handler。Tag Handler是javax.servlet.jsp.tagext.Tag或javax.servlet.jsp.tage

Java for Web學習筆記一二三搜尋5MySQL全文索引

小例子我們在表格Ticket和TicketComment中加入了fulltext key。小例子在Ticket的Subject或Body,以及在TicketComment的Body檢索內容,按分頁方式顯示出來,同時顯示關聯分數,並按關聯分數降序排列。 -- Ticket中隊S

Java for Web學習筆記三九Filter1用途、定義和順序

Filter的用途 Filter可以用於以下方面: 記錄request和response的log進行認證和授權進行壓縮和加壓,非HTTPS的加密和解密錯誤處理。對於tomcat,出現錯誤通常會給出一個500的頁面,還有錯誤診斷資訊,對於一個公眾服務,這些診斷資訊可能會向黑客

Java for Web學習筆記Servlet5初始化引數

Context Init引數 在web.xml中可以基於整個上下文進行設定,在web app內各個Servlet都可以獲取。 <context-param> <param-name>settingOne</param-name> <param-

Java for Web學習筆記Servlet2HelloServlet

繼承關係: javax.servlet.GenericServlet –》javax.servlet.http.HttpServlet。 405返回 如果我們不重寫Servlet的doGet而採用HTTP GET的方式,將返回405 將返回405 Method Not Allowed。 如果我們重寫do

python學習第七django2與1的差別和視圖

端口 ddd put res 127.0.0.1 正則 pass 什麽 服務 django1與2路由的差別 在django1中的url在django2中為re_path django2中新增了path 1.from django.urls import path