摘要:在頁面中執(zhí)行的表達(dá)式語法表達(dá)式注意表達(dá)式不以分號結(jié)束示例張學(xué)友聲明一個字符串變量聲明一個返回整型值的函數(shù)單行注釋多行注釋這里是腳本代碼測試哈哈你好四頁面生命周期問答題當(dāng)用戶第一次請求一個頁面時,首先被執(zhí)行的方法是構(gòu)造方法答案選。
java web開發(fā)學(xué)習(xí)筆記。一、jsp簡介
JSP與 PHP、ASP、ASP.NET 等語言類似,運(yùn)行在服務(wù)端的語言。
JSP(全稱Java Server Pages)是由 Sun Microsystems 公司倡導(dǎo)和許多公司參與共同創(chuàng)建的一種使軟件開發(fā)者可以響應(yīng)客戶端請求,而動態(tài)生成 HTML、XML 或其他格式文檔的Web網(wǎng)頁的技術(shù)標(biāo)準(zhǔn)。
JSP 技術(shù)是以 Java 語言作為腳本語言的,JSP 網(wǎng)頁為整個服務(wù)器端的 Java 庫單元提供了一個接口來服務(wù)于HTTP的應(yīng)用程序。
JSP文件后綴名為 *.jsp 。
JSP開發(fā)的WEB應(yīng)用可以跨平臺使用,既可以運(yùn)行在 Linux 上也能運(yùn)行在 Windows 上。
JSP是一種Java servlet,主要用于實(shí)現(xiàn)Java web應(yīng)用程序的用戶界面部分。網(wǎng)頁開發(fā)者們通過結(jié)合HTML代碼、XHTML代碼、XML元素以及嵌入JSP操作和命令來編寫JSP。二、Tomcat服務(wù)器的目錄結(jié)構(gòu)
Tomcat目錄文件
WEB-INF
classes 目錄下為生成的字節(jié)碼文件
lib 目錄下為jar包
Tomcat安裝目錄
? tomcat pwd /WEB/java/tomcat
啟動Tomcat命令:
? sudo sh ./bin/startup.shWEB-INF目錄結(jié)構(gòu)
WEB-INF 是Java的WEB應(yīng)用的安全目錄。所謂安全目錄就是客戶端無法訪問,只有服務(wù)端可以訪問的目錄。
web.xml,項(xiàng)目部署文件
classes文件夾,用以放置*.class文件
lib文件夾,用于存放需要的jar包
web.xml 配置默認(rèn)歡迎文件:
三、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腳本中執(zhí)行的代碼
語法:
<% 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 = "張學(xué)友"; // 聲明一個字符串變量 /** * 聲明一個返回整型值的函數(shù) * @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表達(dá)式
一個JSP表達(dá)式中包含的腳本語言表達(dá)式,先被轉(zhuǎn)化成String,然后插入到表達(dá)式出現(xiàn)的地方。
由于表達(dá)式的值會被轉(zhuǎn)化成String,所以您可以在一個文本行中使用表達(dá)式而不用去管它是否是HTML標(biāo)簽。
表達(dá)式元素中可以包含任何符合Java語言規(guī)范的表達(dá)式,但是不能使用分號來結(jié)束表達(dá)式。
在JSP頁面中執(zhí)行的表達(dá)式
語法:
<%=表達(dá)式 %> // 注意:表達(dá)式不以分號結(jié)束
示例:
<%! String name = "張學(xué)友"; // 聲明一個字符串變量 /** * 聲明一個返回整型值的函數(shù) * @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)%>
問答題:
當(dāng)用戶第一次請求一個jsp頁面時,首先被執(zhí)行的方法是( )
A:構(gòu)造方法
B: jspInit()
C:jspService()
D:jspDestroy()
:
答案選A。
解析:
當(dāng)用戶第一次請求一個jsp頁面時,首先被執(zhí)行的方法是 構(gòu)造方法。
就是轉(zhuǎn)換為class文件后,他會創(chuàng)建一個Servlet的實(shí)例,然后調(diào)用Servlet的構(gòu)造方法,再調(diào)用jspInit()方法
?(1)JSP引擎先把該JSP文件轉(zhuǎn)換成一個Java源文件(Servlet),在轉(zhuǎn)換時如果發(fā)現(xiàn)JSP文件有任何語法錯誤,轉(zhuǎn)換過程將中斷,并向服務(wù)端和客戶端輸出出錯信息。
(2)如果轉(zhuǎn)換成功,JSP引擎用javac把該Java源文件編譯成相應(yīng)的class文件。
(3)創(chuàng)建一個該Servlet(JSP頁面的轉(zhuǎn)換結(jié)果)的實(shí)例,該Servlet的jspInit()方法被執(zhí)行,jspInit()方法在Servlet的生命周期中只被執(zhí)行一次。
小試牛刀分別使用表達(dá)式和腳本實(shí)現(xiàn)打印九九乘法表
示例:
<%-- 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內(nèi)置out對象,使用腳本方式調(diào)用,打印九九乘法表 * * @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("
"); } } %> 表達(dá)式打印 <%=printMultiTable() %>
腳本打印,注意函數(shù)調(diào)用后邊有分號 <% printMultiTable2(out); %>
打印結(jié)果:
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內(nèi)置對象
JSP內(nèi)置對象又稱為隱式對象,是JSP容器為每個頁面提供的Java對象,開發(fā)者可以直接使用它們而不用顯式聲明。JSP隱式對象也被稱為預(yù)定義變量。
JSP所支持的九大隱式對象:
JSP內(nèi)置對象是 Web 容器創(chuàng)建的一組對象,不適用new關(guān)鍵在創(chuàng)建就可以使用的內(nèi)置對象。
<% int[] value = {60, 20, 25}; for(int i:value){ out.println(i); } %>六、JSP基本原理
JSP的本質(zhì)是Servlet,當(dāng)用戶向指定 Servlet 發(fā)送請求時,Servlet利用輸出流動態(tài)生成 HTML 頁面,包括每一個靜態(tài)的 HTML 標(biāo)簽和所有在HTML頁面中出現(xiàn)的內(nèi)容。
示例代碼:
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 原理分析
<%}%>
輸出結(jié)果:
從表面上看,JSP 頁面已經(jīng)不需要 Java 類,似乎完全脫離了 Java 面向?qū)ο蟮奶卣?/b>。事實(shí)上,JSP 的本質(zhì)依然是 Servlet(一個特殊的JAVA類),每個JSP 頁面就是一個 Servlet 實(shí)例-JSP頁面由系統(tǒng)編譯成 Servlet,Servlet再負(fù)責(zé)響應(yīng)用戶的請求。對于Tomcat而言,JSP 頁面生成的 Servlet 放在 work 路徑對應(yīng)的 Web 應(yīng)用下。
當(dāng)啟動 Tomcat 之后,可以在 Tomcat 的 work/Catalina/localhost/webDemo/org/apache/jsp目錄下找到如下文件(本web應(yīng)用名為 webDemo, 上面 JSP 頁的名為 index.jsp):index_jsp.java 和 index_jsp.class。
這兩個文件都是由 Tomcat 生成的, Tomcat 根據(jù) JSP 頁面生成對應(yīng) 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); } } }
相關(guān)文章:Java Web基礎(chǔ)學(xué)習(xí)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68481.html
摘要:實(shí)現(xiàn)不同語言間進(jìn)行協(xié)助開發(fā),可以使用通信的方式來實(shí)現(xiàn),這次實(shí)現(xiàn)和的協(xié)助開發(fā),是項(xiàng)目主要服務(wù)端,由于要處理一些系統(tǒng)底層的事務(wù),所以要用提供一個輔助服務(wù),為主服務(wù)端處理相關(guān)事務(wù),以下是搭建流程和服務(wù)間通信原理。 實(shí)現(xiàn)不同語言間進(jìn)行協(xié)助開發(fā),可以使用通信的方式來實(shí)現(xiàn),這次實(shí)現(xiàn)Nodejs和JavaWeb的協(xié)助開發(fā),Nodejs是項(xiàng)目主要服務(wù)端,由于要處理一些系統(tǒng)底層的事務(wù),所以要用JavaW...
摘要:會讓初學(xué)者的你少踩很多坑大實(shí)話,如果你已經(jīng)掌握了開發(fā)的基礎(chǔ)部分,請耐心等待后續(xù)的進(jìn)階階段。下面開始我們環(huán)境的安裝配置。下載完成之后會是文件。要注意在已有的里面要加上表示另一個。到這里我們就完成了環(huán)境的配置,接下來我們在命令行中進(jìn)行驗(yàn)證。 showImg(https://segmentfault.com/img/bVbapC7?w=475&h=285); 首先歡迎大家來學(xué)習(xí)JavaWeb...
摘要:列名字段名表單中的屬性名要一至創(chuàng)建數(shù)據(jù)庫及表開發(fā)應(yīng)用搭建開發(fā)環(huán)境添加包創(chuàng)建實(shí)現(xiàn)類層業(yè)務(wù)層接口實(shí)現(xiàn)類數(shù)據(jù)訪問層接口實(shí)現(xiàn)類添加工具類表示層要注意注冊頁面登錄頁面 一、JavaWeb開發(fā)模式 C/S:客戶端 / 服務(wù)器 (胖客戶端)B/S:瀏覽器 / 服務(wù)器 (瘦客戶端) JavaBean: 就是一個普通類(實(shí)體bean),包含三樣標(biāo)準(zhǔn):一個無參構(gòu)造、私有屬性、公共的getter和se...
摘要:中主要是使用語言。將的動態(tài)功能和標(biāo)準(zhǔn)的安全性引入大型網(wǎng)絡(luò)應(yīng)用的開發(fā)集成部署和管理之中。提供了一個圖形界面的管理工具,稱為信息服務(wù)管理器,可用于監(jiān)視配置和控制服務(wù)。 一、基本概念 1.1、WEB開發(fā)的相關(guān)知識 WEB,在英語中web即表示網(wǎng)頁的意思,它用于表示Internet主機(jī)上供外界訪問的資源?! nternet上供外界訪問的Web資源分為: 靜態(tài)web資源(如html 頁面...
閱讀 3595·2023-04-26 02:05
閱讀 2039·2021-11-19 11:30
閱讀 4257·2021-09-30 09:59
閱讀 3203·2021-09-10 10:51
閱讀 2638·2021-09-01 10:30
閱讀 1531·2021-08-11 11:20
閱讀 2644·2019-08-30 15:54
閱讀 589·2019-08-30 10:49