日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

JSP動(dòng)態(tài)網(wǎng)頁開發(fā)技術(shù)概述

瀏覽:388日期:2022-06-07 13:03:31

  在動(dòng)態(tài)web項(xiàng)目的開發(fā)中,經(jīng)常需要?jiǎng)討B(tài)生成HTML內(nèi)容(如系統(tǒng)中的當(dāng)前在線人數(shù)需要?jiǎng)討B(tài)生成)。如果使用Servlet實(shí)現(xiàn)HTML頁面數(shù)據(jù)的統(tǒng)計(jì),則需要使用大量的輸出語句。同時(shí),如果靜態(tài)內(nèi)容和動(dòng)態(tài)內(nèi)容混合在一起,那么也將導(dǎo)致程序非常臃腫。為了客服Servlet的這些缺點(diǎn),Oracle(Sun)公司推出了JSP技術(shù)。

1.JSP概述

  JSP(Java Server Pages)是建立在Servlet規(guī)范之上的動(dòng)態(tài)網(wǎng)頁開發(fā)技術(shù),其實(shí)質(zhì)是一個(gè)簡化的Servlet。在JSP文件中,HTML和Java代碼共同存在,其中,HTML代碼用于實(shí)現(xiàn)網(wǎng)頁中靜態(tài)內(nèi)容的顯示,Java代碼用于實(shí)現(xiàn)網(wǎng)頁中動(dòng)態(tài)內(nèi)容的實(shí)現(xiàn)。為了和傳統(tǒng)的HTML有所區(qū)別,JSP文件擴(kuò)展名為jap。

  JSP技術(shù)所開發(fā)的Web應(yīng)用程序是基于Java的,其具有以下特征:

  (1)預(yù)編譯

  預(yù)編譯指在用戶第一次通過瀏覽器訪問JSP頁面時(shí),服務(wù)器將對(duì)JSP頁面代碼進(jìn)行編譯,并且僅指向一次編譯。編譯好的代碼將被保存,在用戶下一次訪問時(shí)會(huì)直接執(zhí)行編譯好的代碼。這樣不僅節(jié)約了服務(wù)器的CPU資源,還大幅度提升了客戶端的訪問速度。

 ?。?)業(yè)務(wù)代碼相分離

  在使用JSP技術(shù)開發(fā)Web應(yīng)用時(shí),可以將界面的開發(fā)和應(yīng)用程序的開發(fā)分離。

 ?。?)組件重用

  JSP可以使用JavaBean編寫業(yè)務(wù)組件,也就是使用一個(gè)JavaBean類封裝業(yè)務(wù)處理代碼或者將其作為一個(gè)數(shù)據(jù)存儲(chǔ)模型,在JSP頁面甚至整個(gè)項(xiàng)目中,都可以重復(fù)使用這個(gè)JavaBean,同時(shí),JavaBean也可以應(yīng)用帶其他Java應(yīng)用程序中。

 ?。?)跨平臺(tái)

  由于JSP是基于Java語言的,它可以使用Java API,所有它也是跨平臺(tái)的,可以應(yīng)用與不同的系統(tǒng),如Windows和Linux。

JSP 運(yùn)行原理

  JSP的工作模式是請(qǐng)求/響應(yīng)模式,客戶端首先發(fā)出HTTP請(qǐng)求,JSP程序收到請(qǐng)求后將進(jìn)行處理并返回處理結(jié)果。在一個(gè)JSP文件第一次請(qǐng)求時(shí),JSP引擎(容器)把該JSP文件轉(zhuǎn)化成一個(gè)Servlet,而這個(gè)引擎本身也是一個(gè)Servlet。

  JSP運(yùn)行過程:
  (1)客戶端發(fā)出請(qǐng)求,請(qǐng)求訪問JSP文件。

 ?。?)JSP容器先將JSP文件轉(zhuǎn)化成一個(gè)Java源文件(Java Servlet源程序),在轉(zhuǎn)換過程中,如果發(fā)現(xiàn)JSP文件存在任何語法錯(cuò)誤,則中斷轉(zhuǎn)換過程,并向服務(wù)器和客戶端返回出錯(cuò)信息。

 ?。?)如果轉(zhuǎn)換成功,則JSP容器會(huì)將生成的Java源文件編譯成相應(yīng)的字節(jié)碼文件*.class。該class文件就是一個(gè)Servlet,Servlet容器會(huì)像處理其他Servlet一樣處理它。

 ?。?)有Servlet容器加載轉(zhuǎn)換后的Servlet類(class文件)創(chuàng)建該Servlet(JSP頁面的轉(zhuǎn)換結(jié)果)的實(shí)例,并執(zhí)行Servlet的jspInit()方法。jspInit()方法在Servlet的整個(gè)生命周期只會(huì)執(zhí)行一次。

 ?。?)執(zhí)行jspService()方法處理客戶端的請(qǐng)求。對(duì)于每一個(gè)請(qǐng)求,JSP容器都會(huì)創(chuàng)建一個(gè)新的線程處理它。如果多個(gè)客戶端同時(shí)請(qǐng)求該JSP文件,則JSP容器會(huì)創(chuàng)建多個(gè)線程,使每一個(gè)客戶端請(qǐng)求都對(duì)應(yīng)一個(gè)線程。

 ?。?)如果JSP文件被修改了,則服務(wù)器將根據(jù)設(shè)置決定是否對(duì)該文件重新進(jìn)行編譯,如果需要重新編譯,則使用重新編譯后的結(jié)果取代內(nèi)存中的Servlet,并繼續(xù)上述處理過程。需要注意的是,雖然JSP效率很高,但在第一次調(diào)用時(shí)往往需要轉(zhuǎn)換和編譯,所以會(huì)產(chǎn)生一些輕微的延遲。

  (7)如果系統(tǒng)出現(xiàn)資源不足等問題,JSP容器可能會(huì)以某種不確定的方式將Servlet從內(nèi)存中移除,發(fā)生這種情況時(shí),首先會(huì)調(diào)用jspDestroy()方法,然后Servlet實(shí)例會(huì)被作為垃圾進(jìn)行處理。

 ?。?)當(dāng)請(qǐng)求處理完成后,響應(yīng)對(duì)象由JSP容器接收,并將HTML格式的響應(yīng)信息送回客戶端。

  因此:瀏覽器向服務(wù)器發(fā)送請(qǐng)求,不管訪問的是什么資源啊,其實(shí)都是在訪問Servlet,所有當(dāng)訪問一個(gè)jsp頁面時(shí),其實(shí)也是在訪問一個(gè)Servlet,服務(wù)器在執(zhí)行jsp的時(shí)候,首先把jsp翻譯成一個(gè)Servlet,所有訪問jsp時(shí),其實(shí)不是在訪問jsp,而是在訪問jsp翻譯過后的那個(gè)Servlet。例如:

C1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body> This is my first JSP <%  out.print("你好啊C1");  %></body></html>

當(dāng)我們通過瀏覽器(http://localhost:8080/day11_01_jsp(項(xiàng)目名稱)/C1.jsp)訪問C1.jsp時(shí),服務(wù)器首先將C1.jsp翻譯成一個(gè)C1_jsp.class,在Tomcat服務(wù)器的work\Catalina\localhost\項(xiàng)目名\org\apache\jsp目錄下可以看到C1_jsp.class的源代碼。(1.jsp翻譯成_1_jsp.class)

C1_jap.java的代碼:

/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/7.0.52 * Generated at: 2018-10-05 08:32:50 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 C1_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<java.lang.String,java.lang.Long> _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.tomcat.InstanceManager _jsp_instancemanager; public java.util.Map<java.lang.String,java.lang.Long> getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } 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("\r\n");  out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");  out.write("<html>\r\n");  out.write("<head>\r\n");  out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\r\n");  out.write("<title>Insert title here</title>\r\n");  out.write("</head>\r\n");  out.write("<body>\r\n");  out.write("\tThis is my first JSP \r\n");  out.write("\t");  out.print("你好啊C1");  out.write("\r\n");  out.write("</body>\r\n");  out.write("</html>"); } catch (java.lang.Throwable t) {  if (!(t instanceof javax.servlet.jsp.SkipPageException)){  out = _jspx_out;  if (out != null && out.getBufferSize() != 0)   try { 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); } }}

  我們可以看到,C1_jsp這個(gè)類是繼承 org.apache.jasper.runtime.HttpJspBase這個(gè)類的,通過查看Tomcat服務(wù)器的源代碼,可以知道在apache-tomcat-6.0.20-src\java\org\apache\jasper\runtime目錄下存HttpJspBase這個(gè)類的源代碼文件,如下圖所示:

HttpJsBase這個(gè)類的源代碼:

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * *  http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.jasper.runtime;import java.io.IOException;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.HttpJspPage;import org.apache.jasper.compiler.Localizer;/** * This is the super class of all JSP-generated servlets. * * @author Anil K. Vijendran */public abstract class HttpJspBase extends HttpServlet implements HttpJspPage { private static final long serialVersionUID = 1L; protected HttpJspBase() { } @Override public final void init(ServletConfig config)  throws ServletException {  super.init(config);  jspInit();  _jspInit(); } @Override public String getServletInfo() {  return Localizer.getMessage("jsp.engine.info"); } @Override public final void destroy() {  jspDestroy();  _jspDestroy(); } /**  * Entry point into service.  */ @Override public final void service(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {  _jspService(request, response); } @Override public void jspInit() { } public void _jspInit() { } @Override public void jspDestroy() { } protected void _jspDestroy() { } @Override public abstract void _jspService(HttpServletRequest request,  HttpServletResponse response)  throws ServletException, IOException;}

  HttpJspBase類是繼承HttpServlet的,所以HttpJspBase類是一個(gè)Servlet,而C1_jsp又是繼承HttpJspBase類的,所以C1_jsp類也是一個(gè)Servlet,所以當(dāng)瀏覽器訪問服務(wù)器上的C1.jsp頁面時(shí),其實(shí)就是在訪問C1_jsp這個(gè)Servlet,C1_jsp這個(gè)Servlet使用_jspService這個(gè)方法處理請(qǐng)求。

2.JSP的基本語法

2.1 JSP模板元素

  網(wǎng)頁的靜態(tài)內(nèi)容。如:HTML標(biāo)簽和文本。

2.2 JSP腳本元素

(1)JSP Scriptlets(腳本片斷)用于在JSP頁面中編寫多行Java代碼。語法:

<% java代碼(變量、方法、表達(dá)式等 )%>
<% int sum=0;//聲明變量 /*編寫語句*/ for (int i=1;i<=100;i++){  sum+=i; } out.println("<h1>Sum="+sum+"</h1>");%>

JSP腳本片斷中只能出現(xiàn)java代碼,不能出現(xiàn)其它模板元素, JSP引擎在翻譯JSP頁面中,會(huì)將JSP腳本片斷中的Java代碼將被原封不動(dòng)地放到Servlet的_jspService方法中。JSP腳本片斷中的Java代碼必須嚴(yán)格遵循Java語法,例如,每執(zhí)行語句后面必須用分號(hào)(;)結(jié)束。在一個(gè)JSP頁面中可以有多個(gè)腳本片斷,在兩個(gè)或多個(gè)腳本片斷之間可以嵌入文本、HTML標(biāo)記和其他JSP元素。多個(gè)腳本片斷中的代碼可以相互訪問,猶如將所有的代碼放在一對(duì)<%%>之中的情況。如:out.println(x);單個(gè)腳本片斷中的Java語句可以是不完整的,但是,多個(gè)腳本片斷組合后的結(jié)果必須是完整的Java語句。

<% for (int i=1; i<5; i++)  {%> <H1>http://localhost:8080/JavaWeb_Jsp_Study_20140603/</H1><% }%>

(2)JSP聲明

  JSP頁面中編寫的所有代碼,默認(rèn)會(huì)翻譯到Servlet的service方法中,而JSP聲明中的java代碼會(huì)被翻譯到_jspService方法外面。

<%! java代碼:定義變量或者方法%>

  多個(gè)靜態(tài)代碼塊、變量和方法可以定義在一個(gè)JSP文件中,也可以分別單獨(dú)定義在多個(gè)JSP聲明中。

  JSP隱式對(duì)象的作用范圍僅限于Servlet的_japService方法。所以在JSP聲明中不能使用這些隱式對(duì)象。

JSP聲明案例:

<%!static { System.out.println("loading Servlet!");}private int globalVar = 0;public void jspInit(){ System.out.println("initializing jsp!");}%><%!public void jspDestroy(){ System.out.println("destroying jsp!");}%>

(3)JSP 表達(dá)式

  JSP腳本表達(dá)式(expression)用于將程序數(shù)據(jù)輸出到客戶端,他將要輸出的變量或者表達(dá)式直接封裝在以<%= %>標(biāo)記中,語法為:

<%=expression%>

舉例:輸出當(dāng)前系統(tǒng)時(shí)間:

<%= new java.util.Date() %> 

  JSP引擎在翻譯腳本表達(dá)式時(shí),會(huì)將程序數(shù)據(jù)轉(zhuǎn)成字符串,然后在相應(yīng)位置用out.print(...)將數(shù)據(jù)輸給客戶端。

  JSP腳本表達(dá)式的變量或者表達(dá)式后不能有分號(hào)(;)。

3.JSP注釋

  (1)顯式注釋:直接使用HTML風(fēng)格的注釋:<!- - 注釋內(nèi)容- -> 特點(diǎn):不安全,費(fèi)流量;HTML的注釋在瀏覽器中查看源文件的時(shí)候是可以看得到的

 ?。?)隱式注釋:直接使用JAVA的注釋://、/*……*/

 JSP自己的注釋:<%- - 注釋內(nèi)容- -%> 特點(diǎn):安全,省流量

JAVA注釋和JSP注釋在瀏覽器中查看源文件時(shí)是看不到注釋的內(nèi)容的

<!--這個(gè)注釋可以看見--><% //JAVA中的單行注釋 /*  JAVA中的多行注釋 */%><%--JSP自己的注釋--%>

參考:

https://www.jb51.net/article/191459.htm

https://www.jb51.net/article/191453.htm

到此這篇關(guān)于JSP動(dòng)態(tài)網(wǎng)頁開發(fā)技術(shù)概述的文章就介紹到這了,更多相關(guān)JSP動(dòng)態(tài)網(wǎng)頁內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JSP
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
石原莉奈在线亚洲三区| 亚洲综合另类| 69堂免费精品视频在线播放| 国产日韩欧美一区在线| 久热re这里精品视频在线6| 日韩高清不卡一区| 中文另类视频| 国产一级成人av| 丝袜av一区| 国产精品白浆| 亚洲精品伊人| 日韩伦理福利| 中文一区一区三区免费在线观 | 都市激情国产精品| 亚洲一区黄色| 亚洲黄色网址| 成人精品动漫一区二区三区| 日韩激情啪啪| 精品捆绑调教一区二区三区 | 国产一区二区三区不卡视频网站 | 精品99在线| 99热精品久久| 欧美xxxx中国| 久久久久久久欧美精品| 久久精品99久久久| 午夜一区在线| 亚洲高清成人| 狂野欧美性猛交xxxx| 高清日韩欧美| 日韩手机在线| 中文无码久久精品| 国产毛片精品| 日韩av一区二| 国产欧美在线观看免费| 国产精品美女久久久| 亚洲高清av| 日韩在线短视频| 久久国产欧美日韩精品| 天堂俺去俺来也www久久婷婷| 国产精品久久久久久久久久白浆 | 国产精品久久久久久久久久齐齐| 涩涩涩久久久成人精品| 久久精品国内一区二区三区水蜜桃| 日韩黄色免费网站| 国产 日韩 欧美 综合 一区| 日本国产欧美| 日韩国产一区二区三区| 日韩激情一二三区| 中文字幕av一区二区三区四区| 国产模特精品视频久久久久| 青青青国产精品| 精品久久美女| 日韩网站在线| 99热免费精品| 国产无遮挡裸体免费久久| 丝瓜av网站精品一区二区| 久久国产精品免费精品3p| 激情欧美一区二区三区| 亚洲一区二区三区高清不卡| 婷婷亚洲五月| 亚洲激情婷婷| 精品一区二区三区免费看 | 国产va免费精品观看精品视频| 97视频热人人精品免费| 欧美日韩精品免费观看视欧美高清免费大片 | 成人台湾亚洲精品一区二区 | 亚洲欧美久久久| av高清一区| 亚洲v在线看| 欧美日韩一二三四| 亚洲女同中文字幕| 免费黄网站欧美| 视频精品一区二区| 婷婷综合福利| 日韩av中文字幕一区| 国产精品亚洲片在线播放| 日韩av影院| 国产在视频一区二区三区吞精| 国内精品亚洲| 日韩精品一区二区三区av| 精品一区免费| 欧美一区不卡| 麻豆一区在线| 色综合www| 亚洲综合婷婷| 久久精品国产免费| 欧美精品一区二区久久| 国产精品地址| 国内揄拍国内精品久久| 日韩在线短视频| 免费一区二区视频| 亚洲bt欧美bt精品777| 国产精品一在线观看| 婷婷亚洲五月| 一区二区三区四区精品视频| 国产一区二区三区天码| 国产精品一区二区三区四区在线观看| 久久国产精品亚洲77777| 日韩极品在线观看| 亚洲a在线视频| 国产精品一区二区三区www| 亚洲精品一区二区妖精| 最近高清中文在线字幕在线观看1| 丝瓜av网站精品一区二区| 精品一区二区三区在线观看视频| 蜜臀精品一区二区三区在线观看 | 精品久久久久久久| 免费在线观看视频一区| 日本а中文在线天堂| 亚洲tv在线| 伊人久久大香伊蕉在人线观看热v| 欧美aa在线观看| 久久影视三级福利片| 日韩高清电影一区| 亚洲精品在线国产| 丝瓜av网站精品一区二区| 不卡中文字幕| 欧美1区免费| 黄色日韩在线| 久久要要av| 日韩中文字幕无砖| 四虎成人av| 麻豆国产精品| 久久国产精品99国产| 亚洲免费精品| 欧美亚洲国产一区| 国产一区二区色噜噜| 在线中文字幕播放| 亚洲精品系列| 在线国产日韩| 国产日产高清欧美一区二区三区| 欧美日韩国产一区精品一区| 久久久久久婷| 久久久国产精品一区二区中文| 97精品国产福利一区二区三区| 好看不卡的中文字幕| 免费一二一二在线视频| 色爱av综合网| 狠狠爱www人成狠狠爱综合网| 国产伊人精品| 亚洲一区二区三区四区五区午夜| 久久国产99| 国产日韩欧美高清免费| 国产在线观看91一区二区三区| 久久久久久婷| 中文日韩在线| 久久精品超碰| 丰满少妇一区| 日韩午夜在线| 国产午夜久久av| 蜜桃视频在线网站| 午夜在线精品偷拍| 国产欧美日韩一区二区三区在线| 在线人成日本视频| 午夜久久av| 99视频精品全部免费在线视频| 亚洲男人在线| 黄色aa久久| 精品国产亚洲一区二区三区在线 | 色欧美自拍视频| 日韩中文影院| 亚洲一区不卡| 综合激情网站| 欧美三区四区| 亚洲狼人精品一区二区三区| 国产高清日韩| 99热精品在线| 乱一区二区av| 日av在线不卡| 日韩在线综合| 老司机久久99久久精品播放免费| 国产麻豆精品| 欧美资源在线| 久久黄色影院| 国产成人久久精品一区二区三区| 亚洲成人精品| 99riav1国产精品视频| 国产一区亚洲| 免费精品国产| 国产精品亚洲片在线播放| 精品欧美一区二区三区在线观看| 97精品资源在线观看| 女主播福利一区| 日韩网站中文字幕| 国产一区二区三区四区五区传媒| 日韩精品视频在线看| 欧美精选视频一区二区| 国产精品最新| 免费看一区二区三区| 日本色综合中文字幕| 中文字幕一区二区三区四区久久 | 色偷偷偷在线视频播放| 91在线成人| 国产91在线精品| 国内精品福利| 蜜桃视频一区二区三区在线观看| 国产精品任我爽爆在线播放| 亚洲制服少妇| 伊人网在线播放| 日韩影院在线观看|