日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

jsp技术通过java_JavaWeb之JSP技术总结

發(fā)布時(shí)間:2024/9/30 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jsp技术通过java_JavaWeb之JSP技术总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

剛接觸JSP技術(shù)的時(shí)候讓我想起了在大學(xué)學(xué)的Asp+VBScript,記得當(dāng)時(shí)我還用aspstudy做了一個(gè)小的新聞發(fā)布系統(tǒng)作為期末作品,也正是在那時(shí)候在盧哥盧老師的指導(dǎo)下走向編程的道路,對(duì)編程越來越感興趣。為什么會(huì)讓我想起asp呢?因?yàn)镴sp和它還挺類似的,asp本身就是把vbscript都放在asp頁(yè)面,沒有像asp.net那樣界面與邏輯分離,這樣更加清楚。

一、工作原理與生命周期

JSP編譯之后也是一個(gè)繼承HttpServlet的類,所以也能完成HttpServlet能完成的所有事。只是工作方式和Servlet不一樣,Servlet是先編譯后部署,而jsp是先部署后編譯。jsp是一個(gè)Servlet那它的生命周期也和Servlet一樣,只是它有自己的初始化和銷毀方法。

public void_jspInit() {}public void _jspDestroy() {}

我們可以查看下它生成的java類是什么樣的。在工作空間下找到下面的路徑.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\HelloWorld\org\apache\jsp,會(huì)出現(xiàn)兩個(gè)文件,一個(gè)是.java文件,一個(gè)是.class文件,當(dāng)客戶端第一次請(qǐng)求時(shí)Tomcat先將test.jsp文件轉(zhuǎn)化為.java文件,并將.java文件編譯成.class文件,該.class便是jsp對(duì)應(yīng)的Servlet,編譯完之后再運(yùn)行.class文件來響應(yīng)客戶請(qǐng)求,以后客戶訪問會(huì)直接調(diào)用.class來響應(yīng),下面的代碼是.java的代碼。

/** Generated by the Jasper component of Apache Tomcat

* Version: Apache Tomcat/8.5.9

* Generated at: 2017-03-18 03:41:35 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.*/

packageorg.apache.jsp;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;importcom.test.cyw.Person;public final class test_jsp extendsorg.apache.jasper.runtime.HttpJspBaseimplementsorg.apache.jasper.runtime.JspSourceDependent,

org.apache.jasper.runtime.JspSourceImports {private static final javax.servlet.jsp.JspFactory _jspxFactory =javax.servlet.jsp.JspFactory.getDefaultFactory();private static java.util.Map_jspx_dependants;private static final java.util.Set_jspx_imports_packages;private static final java.util.Set_jspx_imports_classes;static{

_jspx_imports_packages= new java.util.HashSet<>();

_jspx_imports_packages.add("javax.servlet");

_jspx_imports_packages.add("javax.servlet.http");

_jspx_imports_packages.add("javax.servlet.jsp");

_jspx_imports_classes= new java.util.HashSet<>();

_jspx_imports_classes.add("com.test.cyw.Person");

}private volatilejavax.el.ExpressionFactory _el_expressionfactory;private volatileorg.apache.tomcat.InstanceManager _jsp_instancemanager;public java.util.MapgetDependants() {return_jspx_dependants;

}public java.util.SetgetPackageImports() {return_jspx_imports_packages;

}public java.util.SetgetClassImports() {return_jspx_imports_classes;

}publicjavax.el.ExpressionFactory _jsp_getExpressionFactory() {if (_el_expressionfactory == null) {synchronized (this) {if (_el_expressionfactory == null) {

_el_expressionfactory=_jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();

}

}

}return_el_expressionfactory;

}publicorg.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, finaljavax.servlet.http.HttpServletResponse response)throwsjava.io.IOException, javax.servlet.ServletException {final java.lang.String _jspx_method =request.getMethod();if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {

response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED,"JSPs only permit GET POST or HEAD");return;

}finaljavax.servlet.jsp.PageContext pageContext;

javax.servlet.http.HttpSession session= null;finaljavax.servlet.ServletContext application;finaljavax.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(""-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");

out.write("\r\n");

out.write("

\r\n");

out.write("\r\n");

out.write("

Insert title here\r\n");

out.write("\r\n");

out.write("

\r\n");

out.write("\r\n");

Person person=new Person("CuiYW",25);

out.write('\r');

out.write('\n');

response.setCharacterEncoding("UTF-8");

request.setCharacterEncoding("UTF-8");

session.setAttribute("Person", person) ;

session.setAttribute("ID", "123456");

session.setAttribute("ID", "abcdef");

session.removeAttribute("ID");

out.write("\r\n");

out.write("\r\n");

out.write("\r\n");

out.write("");

}catch(java.lang.Throwable t) {if (!(t instanceofjavax.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 newServletException(t);

}

}finally{

_jspxFactory.releasePageContext(_jspx_page_context);

}

}

}

View Code

二、JSP指令

JSP的語(yǔ)法這塊比較簡(jiǎn)單,就此略過。在新建jsp頁(yè)面時(shí)會(huì)在頁(yè)面的第一行會(huì)有類似下面的一行代碼,它就是jsp指令,

jsp指令主要來聲明jsp頁(yè)面的一些屬性,格式為,*表示一個(gè)或多個(gè)屬性。JSP最常見的有3種指令:Page,include,taglib.

1.Page指令

Page指令一般生命頁(yè)面屬性,多個(gè)屬性可以寫在一個(gè)Page指令或多個(gè)Page指令中。不過屬性只能出現(xiàn)一次,除了import屬性除外。Page指令中常見屬性如下:

說明語(yǔ)法格式

language屬性

language屬性主要用來聲明所使用的腳本語(yǔ)言種類,目前暫時(shí)只能使用Java語(yǔ)言。不過不排除以后可以使用如C、C++或其他語(yǔ)言的可能。language屬性的默認(rèn)值也是java。

extends屬性

extends屬性用來指定該JSP頁(yè)面生成的Servlet是繼承于哪個(gè)父類,設(shè)定時(shí)必須指定該類的全名,即包名加類名。一般很少使用,而且必須慎重的使用,否則可能限制到JSP的編譯能力。

import屬性

import屬性用來指定導(dǎo)入的Java包,和Java語(yǔ)言基礎(chǔ)中的import語(yǔ)句作用類似。不過有些包在JSP編譯時(shí)就已經(jīng)導(dǎo)入了,可以不用再進(jìn)行導(dǎo)入

session屬性

session屬性用來指定該JSP頁(yè)面中是否可以使用session對(duì)象。如果設(shè)置為true,則表示該JSP頁(yè)面中可以使用session對(duì)象;如果設(shè)置為false,則表示該JSP頁(yè)面中不可以使用session對(duì)象。session屬性的默認(rèn)值為true。

buffer屬性

buffer屬性用來指定輸出流是否具有緩沖區(qū),以及設(shè)置緩沖區(qū)大小。如果設(shè)置為none,則表示輸出流不具有緩沖功能;如設(shè)置為具體的數(shù)據(jù),如“40KB”,則表示設(shè)置的緩沖區(qū)大小為40KB。其默認(rèn)值為8KB。

autoFlush屬性

autoFlush屬性用來指定緩沖區(qū)是否自動(dòng)進(jìn)行強(qiáng)制輸出。如果設(shè)置為true,那么當(dāng)緩沖區(qū)滿的時(shí)候仍然能夠輸出正常;如果設(shè)置為false,那么當(dāng)緩沖區(qū)滿的時(shí)候,將會(huì)產(chǎn)生異常。如果buffer屬性設(shè)置為none,那么就不能將autoFlush屬性設(shè)置為false。autoFlush屬性的默認(rèn)值為true。

isThreadSafe屬性

isThreadSafe屬性用來指定該JSP文件是否支持多線程使用。如果設(shè)置為true,則表示該JSP文件支持多線程的使用,也就是表示該JSP文件能夠同時(shí)處理多個(gè)用戶的請(qǐng)求;如果設(shè)置為false,則表示該JSP文件不支持多線程的使用,也就是表示該JSP文件只能一次處理一個(gè)用戶的請(qǐng)求。isThreadSafe屬性的默認(rèn)值為true。

info屬性

info屬性用來設(shè)置該JSP文件的相關(guān)信息,可以是任何的信息字符串,并通過Servlet.getServletInfo方法來取得該信息。

errorPage屬性

errorPage屬性用來設(shè)置如果當(dāng)前JSP文件發(fā)生異常錯(cuò)誤時(shí),網(wǎng)頁(yè)重新跳轉(zhuǎn)到能夠處理異常的JSP文件。

isErrorPage屬性

isErrorPage屬性用來指定該JSP文件是否為能夠處理異常的JSP文件,其默認(rèn)值為false。

contentType屬性

contentType屬性用來指定該JSP文件的MIME格式,以及網(wǎng)頁(yè)編碼格式。

pageEncoding屬性

pageEncoding屬性用來制定網(wǎng)頁(yè)的編碼格式

isELIgnored屬性

isELIgnored屬性用來指定該JSP文件是否支持EL表達(dá)式。如果設(shè)置為true,則表示JSP文件講忽略EL表達(dá)式,也就是EL表達(dá)式不會(huì)被執(zhí)行;如果設(shè)置為false,則表示EL表達(dá)式不會(huì)被忽略,該EL表達(dá)式將會(huì)被執(zhí)行。

下面來做個(gè)實(shí)驗(yàn)主要使用下errorPage、isErrorPage屬性。

首先新建一個(gè)錯(cuò)誤頁(yè)面error.jsp,isErrorPage="true"

Insert title here

thisis error page

View Code

在test.jsp制造一個(gè)錯(cuò)誤 1/0,拋出異常 errorPage="/error.jsp"

Insert title here

request.setCharacterEncoding("UTF-8");

session.setAttribute("Person", person) ;

session.setAttribute("ID", "123456");

session.setAttribute("ID", "abcdef");

session.removeAttribute("ID");%>

View Code

瀏覽器請(qǐng)求test.jsp時(shí)會(huì)跳轉(zhuǎn)到錯(cuò)誤頁(yè)面error.jsp

2.include指令

include指令格式:,relativeURL可以是本應(yīng)用的jsp或html文件路徑,用它可以將復(fù)用的頁(yè)面分離出來,類似模板頁(yè)的功能。

還是接著上面的demo,新建一個(gè)jsp頁(yè)面,part.jsp

Insert title here

View Code

在error.jsp中使用include指令引入part.jsp

this is error page

總結(jié)

以上是生活随笔為你收集整理的jsp技术通过java_JavaWeb之JSP技术总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。