摘要:在頁面中執行的表達式語法表達式注意表達式不以分號結束示例張學友聲明一個字符串變量聲明一個返回整型值的函數單行注釋多行注釋這里是腳本代碼測試哈哈你好四頁面生命周期問答題當用戶第一次請求一個頁面時,首先被執行的方法是構造方法答案選。
java web開發學習筆記。一、jsp簡介
JSP與 PHP、ASP、ASP.NET 等語言類似,運行在服務端的語言。
JSP(全稱Java Server Pages)是由 Sun Microsystems 公司倡導和許多公司參與共同創建的一種使軟件開發者可以響應客戶端請求,而動態生成 HTML、XML 或其他格式文檔的Web網頁的技術標準。
JSP 技術是以 Java 語言作為腳本語言的,JSP 網頁為整個服務器端的 Java 庫單元提供了一個接口來服務于HTTP的應用程序。
JSP文件后綴名為 *.jsp 。
JSP開發的WEB應用可以跨平臺使用,既可以運行在 Linux 上也能運行在 Windows 上。
JSP是一種Java servlet,主要用于實現Java web應用程序的用戶界面部分。網頁開發者們通過結合HTML代碼、XHTML代碼、XML元素以及嵌入JSP操作和命令來編寫JSP。二、Tomcat服務器的目錄結構
Tomcat目錄文件
WEB-INF
classes 目錄下為生成的字節碼文件
lib 目錄下為jar包
Tomcat安裝目錄
? tomcat pwd /WEB/java/tomcat
啟動Tomcat命令:
? sudo sh ./bin/startup.shWEB-INF目錄結構
WEB-INF 是Java的WEB應用的安全目錄。所謂安全目錄就是客戶端無法訪問,只有服務端可以訪問的目錄。
web.xml,項目部署文件
classes文件夾,用以放置*.class文件
lib文件夾,用于存放需要的jar包
web.xml 配置默認歡迎文件:
三、JSP語法 1、jsp指令/index.jsp
如例:index.jsp
<%-- Created by IntelliJ IDEA. User: kaiyiwang Date: 18/3/5 Time: 00:35 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %>2、jsp注釋$Title$ $END$
// html注釋 // jsp 注釋 <%-- jsp 注釋,頁面不顯示,在客戶端代碼中也不可見 --%> <% // 單行注釋 /* 多行注釋 */ %>3、jsp腳本
在jsp腳本中執行的代碼
語法:
<% Java 代碼 %>
例子:
<%-- Created by IntelliJ IDEA. User: kaiyiwang Date: 18/3/5 Time: 00:35 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %>4、jsp聲明$Title$ <% // 單行注釋 /* 多行注釋 */ out.println("這里是腳本代碼測試"); %>
在jsp頁面中聲明變量或方法
語法:
<%! Java代碼 %>
<%! String name = "張學友"; // 聲明一個字符串變量 /** * 聲明一個返回整型值的函數 * @param x * @param y * @return */ int add(int x, int y) { return x + y; } %> <% // 單行注釋 /* 多行注釋 */ out.println("這里是腳本代碼測試,哈哈"); out.println(name); int sum = add(2, 3); out.println(sum); %>5、jsp表達式
一個JSP表達式中包含的腳本語言表達式,先被轉化成String,然后插入到表達式出現的地方。
由于表達式的值會被轉化成String,所以您可以在一個文本行中使用表達式而不用去管它是否是HTML標簽。
表達式元素中可以包含任何符合Java語言規范的表達式,但是不能使用分號來結束表達式。
在JSP頁面中執行的表達式
語法:
<%=表達式 %> // 注意:表達式不以分號結束
示例:
<%! String name = "張學友"; // 聲明一個字符串變量 /** * 聲明一個返回整型值的函數 * @param x * @param y * @return */ int add(int x, int y) { return x + y; } %> <% // 單行注釋 /* 多行注釋 */ out.println("這里是腳本代碼測試,哈哈"); out.println(name); int sum = add(2, 3); out.println(sum); %>四、JSP頁面生命周期
你好,<%=name %>
x+y=<%=add(1, 10)%>
問答題:
當用戶第一次請求一個jsp頁面時,首先被執行的方法是( )
A:構造方法
B: jspInit()
C:jspService()
D:jspDestroy()
:
答案選A。
解析:
當用戶第一次請求一個jsp頁面時,首先被執行的方法是 構造方法。
就是轉換為class文件后,他會創建一個Servlet的實例,然后調用Servlet的構造方法,再調用jspInit()方法
?(1)JSP引擎先把該JSP文件轉換成一個Java源文件(Servlet),在轉換時如果發現JSP文件有任何語法錯誤,轉換過程將中斷,并向服務端和客戶端輸出出錯信息。
(2)如果轉換成功,JSP引擎用javac把該Java源文件編譯成相應的class文件。
(3)創建一個該Servlet(JSP頁面的轉換結果)的實例,該Servlet的jspInit()方法被執行,jspInit()方法在Servlet的生命周期中只被執行一次。
小試牛刀分別使用表達式和腳本實現打印九九乘法表
示例:
<%-- Created by IntelliJ IDEA. User: kaiyiwang Date: 18/3/5 Time: 00:35 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %>打印九九乘法表 <%! /** * 打印九九乘法表 * @return */ String printMultiTable() { String s = ""; for(int i=1; i <= 9; i++) { for(int j=1; j <= i; j++) { s += i + "*" + j + "=" + (i * j) + " "; } s += "
"; } return s; } /** * JSP內置out對象,使用腳本方式調用,打印九九乘法表 * * @param out */ void printMultiTable2(JspWriter out) throws Exception { for(int i=1; i <= 9; i++) { for(int j=1; j <= i; j++) { out.println(i + "*" + j + "=" + (i * j) + " "); } out.println("
"); } } %> 表達式打印 <%=printMultiTable() %>
腳本打印,注意函數調用后邊有分號 <% printMultiTable2(out); %>
打印結果:
1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81五、JSP內置對象
JSP內置對象又稱為隱式對象,是JSP容器為每個頁面提供的Java對象,開發者可以直接使用它們而不用顯式聲明。JSP隱式對象也被稱為預定義變量。
JSP所支持的九大隱式對象:
JSP內置對象是 Web 容器創建的一組對象,不適用new關鍵在創建就可以使用的內置對象。
<% int[] value = {60, 20, 25}; for(int i:value){ out.println(i); } %>六、JSP基本原理
JSP的本質是Servlet,當用戶向指定 Servlet 發送請求時,Servlet利用輸出流動態生成 HTML 頁面,包括每一個靜態的 HTML 標簽和所有在HTML頁面中出現的內容。
示例代碼:
http://localhost:8080/webDemo/index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>我的第一個JSP頁面 歡迎大家訪問我的第一個JSP頁面。
<% for(int i = 0; i < 5; i++) { // out.println(""); // out.println(i); %> JSP 原理分析
<%}%>
輸出結果:
從表面上看,JSP 頁面已經不需要 Java 類,似乎完全脫離了 Java 面向對象的特征。事實上,JSP 的本質依然是 Servlet(一個特殊的JAVA類),每個JSP 頁面就是一個 Servlet 實例-JSP頁面由系統編譯成 Servlet,Servlet再負責響應用戶的請求。對于Tomcat而言,JSP 頁面生成的 Servlet 放在 work 路徑對應的 Web 應用下。
當啟動 Tomcat 之后,可以在 Tomcat 的 work/Catalina/localhost/webDemo/org/apache/jsp目錄下找到如下文件(本web應用名為 webDemo, 上面 JSP 頁的名為 index.jsp):index_jsp.java 和 index_jsp.class。
這兩個文件都是由 Tomcat 生成的, Tomcat 根據 JSP 頁面生成對應 Servlet 的 Java 文件和 class 文件。
下面是 index_jsp.java 文件的源代碼,這是一個特殊的 Java 類,是一個 Servlet 類。
index_jsp.java
/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/7.0.73 * Generated at: 2018-04-15 16:46:57 UTC * Note: The last modified time of this file was set to * the last modified time of the source file after * generation to assist with modification tracking. */ package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory(); private static java.util.Map_jspx_dependants; private volatile javax.el.ExpressionFactory _el_expressionfactory; private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager; public java.util.Map getDependants() { return _jspx_dependants; } public javax.el.ExpressionFactory _jsp_getExpressionFactory() { if (_el_expressionfactory == null) { synchronized (this) { if (_el_expressionfactory == null) { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); } } } return _el_expressionfactory; } public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() { if (_jsp_instancemanager == null) { synchronized (this) { if (_jsp_instancemanager == null) { _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } } } return _jsp_instancemanager; } public void _jspInit() { } public void _jspDestroy() { } public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null; try { response.setContentType("text/html;charset=UTF-8"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write(" "); out.write(" "); out.write(" "); out.write(" "); out.write(" 我的第一個JSP頁面 "); out.write(" "); out.write(" "); out.write("歡迎大家訪問我的第一個JSP頁面。
"); out.write(" "); out.write(" "); for(int i = 0; i < 5; i++) { // out.println(""); // out.println(i); out.write(" "); out.write("JSP 原理分析
"); } out.write(" "); out.write(" "); out.write(" "); out.write(" "); out.write(""); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { if (response.isCommitted()) { out.flush(); } else { out.clearBuffer(); } } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }
相關文章:Java Web基礎學習
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68481.html
摘要:實現不同語言間進行協助開發,可以使用通信的方式來實現,這次實現和的協助開發,是項目主要服務端,由于要處理一些系統底層的事務,所以要用提供一個輔助服務,為主服務端處理相關事務,以下是搭建流程和服務間通信原理。 實現不同語言間進行協助開發,可以使用通信的方式來實現,這次實現Nodejs和JavaWeb的協助開發,Nodejs是項目主要服務端,由于要處理一些系統底層的事務,所以要用JavaW...
摘要:會讓初學者的你少踩很多坑大實話,如果你已經掌握了開發的基礎部分,請耐心等待后續的進階階段。下面開始我們環境的安裝配置。下載完成之后會是文件。要注意在已有的里面要加上表示另一個。到這里我們就完成了環境的配置,接下來我們在命令行中進行驗證。 showImg(https://segmentfault.com/img/bVbapC7?w=475&h=285); 首先歡迎大家來學習JavaWeb...
摘要:列名字段名表單中的屬性名要一至創建數據庫及表開發應用搭建開發環境添加包創建實現類層業務層接口實現類數據訪問層接口實現類添加工具類表示層要注意注冊頁面登錄頁面 一、JavaWeb開發模式 C/S:客戶端 / 服務器 (胖客戶端)B/S:瀏覽器 / 服務器 (瘦客戶端) JavaBean: 就是一個普通類(實體bean),包含三樣標準:一個無參構造、私有屬性、公共的getter和se...
摘要:中主要是使用語言。將的動態功能和標準的安全性引入大型網絡應用的開發集成部署和管理之中。提供了一個圖形界面的管理工具,稱為信息服務管理器,可用于監視配置和控制服務。 一、基本概念 1.1、WEB開發的相關知識 WEB,在英語中web即表示網頁的意思,它用于表示Internet主機上供外界訪問的資源。 Internet上供外界訪問的Web資源分為: 靜態web資源(如html 頁面...
閱讀 3564·2023-04-26 02:05
閱讀 2003·2021-11-19 11:30
閱讀 4202·2021-09-30 09:59
閱讀 3175·2021-09-10 10:51
閱讀 2604·2021-09-01 10:30
閱讀 1470·2021-08-11 11:20
閱讀 2615·2019-08-30 15:54
閱讀 563·2019-08-30 10:49