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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java后端开发每天遇到的jsp,了解一下

發布時間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java后端开发每天遇到的jsp,了解一下 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方“好好學java”,選擇“置頂公眾號”

優秀學習資源、干貨第一時間送達!

?精彩內容?

java實戰練習項目教程

2018微服務資源springboot、springcloud、docker、dubbo實戰等傾心分享

2018年java架構師全套學習教程

最新大數據培訓完整視頻教程

2018年java最新全套培訓學習教程

一、JSP基礎語法

1、JSP模板元素

JSP頁面中的HTML內容稱之為JSP模版元素。

JSP模版元素定義了網頁的基本骨架,即定義了頁面的結構和外觀。

2、JSP腳本片段

JSP腳本片斷(scriptlet)用于在JSP頁面中編寫多行Java代碼(在<%%>不能定義方法)。語法:<%多行java代碼 %>

例如:

<%int?num?=?0;num?=?++num;out.println("num:"?+?num); %>

image

注意:

1、JSP腳本片斷中只能出現java代碼,不能出現其它模板元素, JSP引擎在翻譯JSP頁面中,會將JSP腳本片斷中的Java代碼將被原封不動地放到Servlet的_jspService方法中。

2、JSP腳本片斷中的Java代碼必須嚴格遵循Java語法,例如,每執行語句后面必須用分號(;)結束。

3、在一個JSP頁面中可以有多個腳本片斷,在兩個或多個腳本片斷之間可以嵌入文本、HTML標記和其他JSP元素。

4、多個腳本片斷中的代碼可以相互訪問

3、JSP表達式

JSP腳本表達式(expression)用于將程序數據輸出到客戶端,語法:<%=變量或表達式 %>

例如:

<%="123"?%>
image

4、JSP聲明

JSP頁面中編寫的所有代碼,默認會翻譯到servlet的service方法中, 而Jsp聲明中的java代碼被翻譯到_jspService方法的外面。語法:<%!java代碼 %>

JSP聲明可用于定義JSP頁面轉換成的Servlet程序的靜態代碼塊、成員變量和方法。

例如:

<%! static?{?System.out.println("靜態代碼塊");? }private?String?name?=?"Zender";public?void?TestFun(){System.out.println("成員方法!"); } %> <%TestFun();out.println("name:"?+?name); %>

控制臺:

image

頁面:

image

5、JSP注釋

在JSP中,注釋有顯式注釋, 隱式注釋,JSP自己的注釋:

顯式注釋直接使用HTML風格的注釋:
隱式注釋直接使用JAVA的注釋://、/……/
JSP自己的注釋<%- - 注釋內容- -%>

區別:

HTML的注釋在瀏覽器中查看源文件的時候是可以看得到的,而JAVA注釋和JSP注釋在瀏覽器中查看源文件時是看不到注釋的內容的。

二、JSP原理

1、Web服務器是如何調用并執行一個jsp頁面的?

瀏覽器向服務器發請求,不管訪問的是什么資源,其實都是在訪問Servlet,所以當訪問一個jsp頁面時,其實也是在訪問一個Servlet,服務器在執行jsp的時候,首先把jsp翻譯成一個Servlet,所以我們訪問jsp時,其實不是在訪問jsp,而是在訪問jsp翻譯過后的那個Servlet。

例如下面的代碼:

<%@?page?language="java"?contentType="text/html;?charset=UTF-8"pageEncoding="UTF-8"%> <%String?path?=?request.getContextPath();String?basePath?=?request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base?href="<%=basePath%>"> <meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8"> <title>Insert?title?here</title> </head> <body><%!static?{?System.out.println("靜態代碼塊");?}private?String?name?=?"Zender";public?void?TestFun(){System.out.println("成員方法!");}%><%TestFun();out.println("name:"?+?name);%> </body> </html>

當我們通過瀏覽器訪問index.jsp時,服務器首先將index.jsp翻譯成一個index_jsp.class,在Tomcat服務器的work\Catalina\localhost\項目名\org\apache\jsp目錄下可以看到index_jsp.class的源代碼文件index_jsp.java

image

index_jsp.java的代碼如下:

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.HttpJspBaseimplements?org.apache.jasper.runtime.JspSourceDependent?{static?{?System.out.println("靜態代碼塊");?}private?String?name?=?"Zender";public?void?TestFun(){System.out.println("成員方法!");}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?volatile?javax.el.ExpressionFactory?_el_expressionfactory;private?volatile?org.apache.tomcat.InstanceManager?_jsp_instancemanager;public?java.util.Map<java.lang.String,java.lang.Long>?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("\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=UTF-8\">\r\n");out.write("<title>Insert?title?here</title>\r\n");out.write("</head>\r\n");out.write("<body>\r\n");out.write("\t");out.write('\r');out.write('\n');out.write('???');TestFun();out.println("name:"?+?name);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?{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);}} }

index_jsp這個類是繼承org.apache.jasper.runtime.HttpJspBase這個類的,通過查看HttpJspBase源代碼,可以知道HttpJspBase類是繼承HttpServlet的,所以HttpJspBase類是一個Servlet,而index_jsp又是繼承HttpJspBase類的,所以index_jsp類也是一個Servlet,所以當瀏覽器訪問服務器上的index.jsp頁面時,其實就是在訪問index_jsp這個Servlet,index_jsp這個Servlet使用_jspService這個方法處理請求。

HttpJspBase源碼如下:

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?javax.servlet.jsp.JspFactory;import?org.apache.jasper.compiler.Localizer;public?abstract?class?HttpJspBase?extends?HttpServlet?implements?HttpJspPage{protected?HttpJspBase()?{}public?final?void?init(ServletConfig?config)?throws?ServletException?{super.init(config);jspInit();_jspInit();}public?String?getServletInfo()?{return?Localizer.getMessage("jsp.engine.info");}public?final?void?destroy()?{jspDestroy();_jspDestroy();}/***?Entry?point?into?service.*/public?final?void?service(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{_jspService(request,?response);}public?void?jspInit()?{}public?void?_jspInit()?{}public?void?jspDestroy()?{}protected?void?_jspDestroy()?{}public?abstract?void?_jspService(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException; }

2、_jspService方法

問題1:Jsp頁面中的html排版標簽是如何被發送到客戶端的?

瀏覽器接收到的這些數據,都是在_jspService方法中使用如下的代碼輸出給瀏覽器的。

問題2:Jsp頁面中的java代碼服務器是如何執行的?

在jsp中編寫的java代碼會被翻譯到_jspService方法中去,當執行_jspService方法處理請求時,就會執行在jsp編寫的java代碼了,所以Jsp頁面中的java代碼服務器是通過調用_jspService方法處理請求時執行的。

3、jsp在服務器的執行流程

第一次執行:

  • 客戶端通過電腦連接服務器,因為是請求是動態的,所以所有的請求交給WEB容器來處理

  • 在容器中找到需要執行的*.jsp文件

  • 之后.jsp`文件通過轉換變為`.java文件

  • .java`文件經過編譯后,形成`.class文件

  • 最終服務器要執行形成的*.class文件

  • 第二次執行:

  • 因為已經存在了*.class文件,所以不在需要轉換和編譯的過程

  • 修改后執行:

  • 源文件已經被修改過了,所以需要重新轉換,重新編譯。

  • 三、JSP指令

    JSP指令(directive)是為JSP引擎而設計的,它們并不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其余部分。

    1、Page指令

    page指令用于定義JSP頁面的各種屬性,無論page指令出現在JSP頁面中的什么地方,它作用的都是整個JSP頁面,為了保持程序的可讀性和遵循良好的編程習慣,page指令最好是放在整個JSP頁面的起始位置。

    page指令的完整語法:

    <%@?page?[?language="java"?]?[?extends="package.class"?]?[?import="{package.class?|?package.*},?..."?]?[?session="true?|?false"?]?[?buffer="none?|?8kb?|?sizekb"?]?[?autoFlush="true?|?false"?]?[?isThreadSafe="true?|?false"?]?[?info="text"?]?[?errorPage="relative_url"?]?[?isErrorPage="true?|?false"?]?[?contentType="mimeType?[?;charset=characterSet?]"?|?"text/html?;?charset=ISO-8859-1"?]?[?pageEncoding="characterSet?|?ISO-8859-1"?]?[?isELIgnored="true?|?false"?]? %>

    import屬性

    可以在一條page指令的import屬性中引入多個類或包,其中的每個包或類之間使用逗號(,)分隔

    <%@?page?import="java.util.*,java.io.*,java.sql.*"%>

    備注:

    在Jsp頁面中,Jsp引擎會自動導入下面的包

    java.lang.*javax.servlet.*javax.servlet.jsp.*javax.servlet.http.*

    errorPage屬性

    使用errorPage屬性指明出錯后跳轉的錯誤頁面,errorPage屬性的設置值必須使用相對路徑,如果以"/"開頭,表示相對于當前Web應用程序的根目錄,否則,表示相對于當前頁面。

    image

    比如index.jsp頁面有如下的代碼:

    <%@?page?language="java"?errorPage="/error.jsp"?contentType="text/html;?charset=UTF-8"pageEncoding="UTF-8"%><%String?path?=?request.getContextPath();String?basePath?=?request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd"><html><head><base?href="<%=basePath%>"><meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8"><title>Insert?title?here</title></head><body><%//錯誤代碼int?x?=?1/0;%></body></html>

    在index.jsp中,page指令的errorPage屬性指明了出錯后跳轉到"/error.jsp",error.jsp頁面代碼如下:

    <%@?page?language="java"?contentType="text/html;?charset=UTF-8"pageEncoding="UTF-8"%> <%String?path?=?request.getContextPath();String?basePath?=?request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base?href="<%=basePath%>"> <meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8"> <title>error?jsp</title> </head> <body><h1>對不起,出錯了,請聯系網站管理員解決!</h1> </body> </html>

    運行結果如下:

    image

    我們也可以在在web.xml中使用標簽為整個web應用設置錯誤處理頁面,web.xml的代碼下:

    <?xml?version="1.0"?encoding="UTF-8"?> <web-app?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns="http://java.sun.com/xml/ns/javaee"?xsi:schemaLocation="http://java.sun.com/xml/ns/javaee?http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"?id="WebApp_ID"?version="3.0"><display-name>JSP</display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!--?404錯誤的處理頁面?--><error-page><error-code>404</error-code><location>/error.jsp</location></error-page> </web-app>

    error.jsp頁面代碼同上

    當訪問一個不存在的web資源時,就會跳轉到在web.xml中配置的404錯誤處理頁面error.jsp,如下圖所示:

    image

    一個jsp頁面是作為系統的錯誤處理頁面,那么建議將page指令的isErrorPage屬性(默認為false)設置為"true"來顯式聲明這個Jsp頁面是一個錯誤處理頁面。

    <%@?page?language="java"?contentType="text/html;?charset=UTF-8" pageEncoding="UTF-8"?isErrorPage="true"%>

    將error.jsp頁面顯式聲明為錯誤處理頁面后,Jsp引擎在將jsp頁面翻譯成Servlet的時候,在Servlet的 _jspService方法中會聲明一個exception對象,然后將運行jsp出錯的異常信息存儲到exception對象中,由于Servlet的_jspService方法中聲明了exception對象,那么就可以在error.jsp頁面中使用exception對象。源碼如下:

    image

    2、include指令

    在JSP中對于包含有兩種語句形式:

  • @include指令

    include指令用于引入其它JSP頁面,如果使用include指令引入了其它JSP頁面,那么JSP引擎將把這兩個JSP翻譯成一個servlet。所以include指令引入通常也稱之為靜態引入。

    語法:<%@ include file="relativeURL"%>

    file屬性用于指定被引入文件的路徑。路徑以"/"開頭,表示代表當前web應用。

    注意細節:

  • 被引入的文件必須遵循JSP語法。

  • 被引入的文件可以使用任意的擴展名,即使其擴展名是html,JSP引擎也會按照處理jsp頁面的方式處理它里面的內容,為了見明知意,JSP規范建議使用.jspf(JSP fragments(片段))作為靜態引入文件的擴展名。

  • 由于使用include指令將會涉及到2個JSP頁面,并會把2個JSP翻譯成一個servlet,所以這2個JSP頁面的指令不能沖突(除了pageEncoding和導包除外)。

  • 標簽

    標簽用于把另外一個資源的輸出內容插入進當前JSP頁面的輸出內容之中,這種在JSP頁面執行時的引入方式稱之為動態引入。

    語法:<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />

    page屬性:用于指定被引入資源的相對路徑,它也可以通過執行一個表達式來獲得。

    flush屬性:指定在插入其他資源的輸出內容時,是否先將當前JSP頁面的已輸出的內容刷新到客戶端。

  • 標簽與include指令的區別

    標簽是動態引入,標簽涉及到的2個JSP頁面會被翻譯成2個servlet,這2個servlet的內容在執行時進行合并。 而include指令是靜態引入,涉及到的2個JSP頁面會被翻譯成一個servlet,其內容是在源文件級別進行合并。

  • 四、JSP中的九個內置對象

    名稱類型描述
    outjavax.servlet.jsp.JspWriter用于頁面輸出
    requestjavax.servlet.http.HttpServletRequest得到用戶請求信息,
    responsejavax.servlet.http.HttpServletResponse服務器向客戶端的回應信息
    configjavax.servlet.ServletConfig服務器配置,可以取得初始化參數
    sessionjavax.servlet.http.HttpSession用來保存用戶的信息
    applicationjavax.servlet.ServletContext所有用戶的共享信息
    pagejava.lang.Object指當前頁面轉換后的Servlet類的實例
    pageContextjavax.servlet.jsp.PageContextJSP的頁面容器
    exceptionjava.lang.Throwable表示JSP頁面所發生的異常,在錯誤頁中才起作用

    1、page

    page對象表示當前一個JSP頁面,可以理解為一個對象本身

    2、out

    out對象用于向客戶端發送文本數據。

    3、pageContext

    pageContext對象是JSP技術中最重要的一個對象,它代表JSP頁面的運行環境,這個對象不僅封裝了對其它8大隱式對象的引用,它自身還是一個域對象(容器),可以用來保存數據。并且,這個對象還封裝了web開發中經常涉及到的一些常用操作,例如引入和跳轉其它資源、檢索其它域對象中的屬性等。

    通過pageContext獲得其他對象:

    getException方法返回exception隱式對象
    getPage方法返回page隱式對象
    getRequest方法返回request隱式對象
    getResponse方法返回response隱式對象
    getServletConfig方法返回config隱式對象
    getServletContext方法返回application隱式對象
    getSession方法返回session隱式對象
    getOut方法返回out隱式對象

    pageContext作為域對象

    pageContext對象可以作為容器來使用,因此可以將一些數據存儲在pageContext對象中。

    pageContext對象的常用方法:

    setAttribute(String name,Object value)添加一個名稱為name的屬性,值為value
    getAttribute(String name)獲取名稱為name的屬性
    removeAttribute(String name)移除名稱為name的屬性
    findAttribute(String name)根據name查找各個域中的屬性

    當使用findAttribute查找某個屬性時,findAttribute方法按照查找順序"page→request→session→application"在這四個對象中去查找,只要找到了就返回屬性值,如果四個對象都沒有找到要查找的屬性,則返回一個null。

    五、JSP屬性范圍

    JSP中提供了四種屬性范圍,如下:

    當前頁(pageContext):一個屬性只能在一個頁面中取得,跳轉到其他頁面無法取得

    一次服務器請求(request):一個頁面中設置的屬性,只要經過了服務器跳轉,則跳轉之后的頁面可以繼續取得。

    一次會話(session):一個用戶設置的內容,只要是與此用戶相關的頁面都可以訪問(一個會話表示一個人,這個人設置的東西只要這個人不走,就依然有效)

    上下文中(application):在整個服務器上設置的屬性,所有人都可以訪問

    1、page屬性范圍(pageContext)

    在一個頁面設置的屬性,跳轉到其他頁面就無法訪問了。但是在使用page屬性范圍的時候必須注意的是,雖然習慣上將頁面范圍的屬性稱為page范圍,但是實際上操作的時候是使用pageContext內置對象完成的。

    例如:

    <%@?page?language="java"?errorPage="/error.jsp"?contentType="text/html;?charset=UTF-8"pageEncoding="UTF-8"%> <%String?path?=?request.getContextPath();String?basePath?=?request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base?href="<%=basePath%>"> <meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8"> <title>Insert?title?here</title> </head> <body><%pageContext.setAttribute("name","Zender");String?name?=?(String)pageContext.getAttribute("name");%>name:<%=name?%> </body> </html>

    運行結果如下:

    image

    使用<jsp:forward page="/index2.jsp" />標簽進行服務器跳轉到index2.jsp

    Index.jsp

    <%@?page?language="java"?errorPage="/error.jsp"?contentType="text/html;?charset=UTF-8"pageEncoding="UTF-8"%> <%String?path?=?request.getContextPath();String?basePath?=?request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base?href="<%=basePath%>"> <meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8"> <title>Insert?title?here</title> </head> <body><%pageContext.setAttribute("name","Zender");%><%--使用jsp:forward標簽進行服務器端跳轉--%><jsp:forward?page="/index2.jsp"?/> </body> </html>

    Index2.jsp

    <%@?page?language="java"?errorPage="/error.jsp"?contentType="text/html;?charset=UTF-8"pageEncoding="UTF-8"%> <%String?path?=?request.getContextPath();String?basePath?=?request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base?href="<%=basePath%>"> <meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8"> <title>Insert?title?here</title> </head> <body><%String?name?=?(String)pageContext.getAttribute("name");%>name:<%=name?%> </body> </html>

    運行結果如下:

    image

    使用了服務器端跳轉,但是發現內容并不能取得,證明page范圍的屬性只能在本頁中取得,跳轉到其他頁面之中不能取得。

    2、request屬性范圍

    request屬性范圍表示在一次服務器跳轉中有效,只要是服務器跳轉,則設置的request屬性可以一直傳遞下去。

    例如:

    Index.jsp

    <%request.setAttribute("name","Zender"); %> <%--使用jsp:forward標簽進行服務器端跳轉--%> <jsp:forward?page="/index2.jsp"?/>

    Index2.jsp

    <%String?name?=?(String)request.getAttribute("name"); %>name:<%=name?%>

    運行結果如下:

    image

    修改Index2.jsp代碼如下:

    <%String?name?=?(String)request.getAttribute("name"); %>name:<%=name?%> <a?href="/JSP/index3.jsp">鏈接跳轉</a>

    Index3.jsp代碼如下:

    <%String?name?=?(String)request.getAttribute("name"); %>name:<%=name?%>

    使用了超鏈接的方式傳遞的話,則屬性是無法向下繼續傳遞的,一旦跳轉之后,地址欄改變,所以此種跳轉也可以稱為客戶端跳轉。點擊鏈接跳轉結果如下:

    image

    3、Session屬性范圍

    session設置的屬性不管如何跳轉,都可以取得的(session只針對一個用戶)。

    例如:

    Index.jsp

    <% session.setAttribute("name","Zender"); %> <%--使用jsp:forward標簽進行服務器端跳轉--%> <jsp:forward?page="/index2.jsp"?/>

    Index2.jsp

    <%String?name?=?(String)session.getAttribute("name"); %>name:<%=name?%> <%--使用超鏈接這種客戶端跳轉--%> <a?href="/JSP/index3.jsp">鏈接跳轉</a>

    Index3.jsp

    <%String?name?=?(String)session.getAttribute("name"); %>name:<%=name?%>

    訪問Index.jsp(服務器端跳轉到index2.jsp):

    image

    點擊鏈接跳轉(客戶端跳轉到index3.jsp):

    image

    4、application屬性范圍

    application屬性范圍是在服務器上設置的一個屬性,所以一旦設置之后任何用戶都可以瀏覽到此屬性(服務器上設置了過多的application屬性,則會影響到服務器的性能)。

    例如:

    Index.jsp

    <% application.setAttribute("name","Zender"); %> <%--使用jsp:forward標簽進行服務器端跳轉--%> <jsp:forward?page="/index2.jsp"?/>

    Index2.jsp

    <%String?name?=?(String)application.getAttribute("name"); %>name:<%=name?%> <%--使用超鏈接這種客戶端跳轉--%> <a?href="/JSP/index3.jsp">鏈接跳轉</a>

    Index3.jsp

    <%String?name?=?(String)application.getAttribute("name"); %>name:<%=name?%>

    訪問Index.jsp(服務器端跳轉到index2.jsp):

    image

    點擊鏈接跳轉(客戶端跳轉到index3.jsp):

    image

    重啟web服務器后訪問index2.jsp或者index3.jsp:

    imageimage

    六、JSP標簽

    JSP標簽也稱之為Jsp Action(JSP動作)元素,它用于在Jsp頁面中提供業務邏輯功能,避免在JSP頁面中直接編寫java代碼,造成jsp頁面難以維護。

    常用標簽有以下三個:

    1、標簽

    標簽用于把另外一個資源的輸出內容插入進當前JSP頁面的輸出內容之中,這種在JSP頁面執行時的引入方式稱之為動態引入。

    語法:<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />

    page用于指定被引入資源的相對路徑,它也可以通過執行一個表達式來獲得。
    flush指定在插入其他資源的輸出內容時,是否先將當前JSP頁面的已輸出的內容刷新到客戶端。

    標簽與include指令的區別:

    標簽是動態引入,標簽涉及到的2個JSP頁面會被翻譯成2個servlet,這2個servlet的內容在執行時進行合并。 而include指令是靜態引入,涉及到的2個JSP頁面會被翻譯成一個servlet,其內容是在源文件級別進行合并。

    2、標簽

    標簽用于把請求轉發給另外一個資源(服務器跳轉,地址不變)。

    語法:<jsp:forward page="relativeURL | <%=expression%>" />

    page用于指定請求轉發到的資源的相對路徑,它也可以通過執行一個表達式來獲得。

    3、

    在使用和標簽引入或將請求轉發給其它資源時,可以使用

    語法1:

    <jsp:include?page="relativeURL?|?<%=expression%>"><jsp:param?name="parameterName"?value="parameterValue|<%=?expression?%>"?/></jsp:include>

    語法2:

    <jsp:forward?page="relativeURL?|?<%=expression%>"><jsp:param?name="parameterName"?value="parameterValue|<%=?expression?%>"?/></jsp:forward>
    name用于指定參數名
    value指定參數值

    例如:

    index.jsp

    <%--使用jsp:forward標簽進行服務器端跳轉,--%> <jsp:forward?page="/index2.jsp"?><jsp:param?value="10086"?name="num"/><jsp:param?value="10010"?name="num2"/> </jsp:forward>

    Index2.jsp

    num:<%=request.getParameter("num")?%> <br/> num2:<%=request.getParameter("num2")?%>

    運行結果如下:

    image作者:Zender 鏈接:https://www.cnblogs.com/Zender/p/7799225.html

    ????覺得有用就轉發分享一下吧


    1.?一文讀懂HttpServletRequest

    2.?一文讀懂HttpServletResponse

    3.?servlet就是這么簡單

    4.?tomcat基本使用,就是這么簡單

    附上熱門QQ群,存放資源和歷史資料,2000容量(低門檻付費群),長按二維碼入群

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的java后端开发每天遇到的jsp,了解一下的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 蜜臀av夜夜澡人人爽人人 | 久久精品国产露脸对白 | 久草视频在线观 | 日韩精品一区二区三区视频在线观看 | 精品精品精品 | 色丁香综合 | 爱情岛亚洲品质自拍极速福利网站 | 波多野结衣中文字幕一区二区三区 | 巨大胸大乳奶电影 | 日韩人妻无码精品久久免费 | 日本高清免费看 | 亚洲尤物在线 | 你懂的av在线| av电影在线观看 | 久久综合久久久久 | 国产黄色精品视频 | 一区二区三区四区免费视频 | 久久久久久久一 | 欧美精品欧美精品系列 | 亚洲AV无码乱码国产精品牛牛 | av大片免费观看 | 强行挺进白丝老师里呻吟 | 日韩精品中文字幕在线 | 免费涩涩网站 | 手机看片日韩久久 | 在线观看无遮挡 | av不卡一区二区三区 | 色欲一区二区三区精品a片 在线观看黄网站 | 国产精品av网站 | 麻豆天天躁天天揉揉av | 国产日韩综合 | r级无码视频在线观看 | 九九久久国产精品 | 人妻av一区二区 | 欧美精品手机在线 | 德国艳星videos极品hd | 日韩久久久久久久久久 | 精品国产一区一区二区三亚瑟 | 古代黄色片 | 久久一区国产 | 大尺度在线观看 | 99国产精品一区二区三区 | 日本黄色精品 | 污污视频在线观看网站 | 不卡av网 | 日本国产在线 | 99re6在线视频 | 秋霞福利网 | 精品国产av一区二区三区 | 潮喷失禁大喷水aⅴ无码 | 男生和女生靠逼视频 | 国产精品无码av无码 | 日韩欧美视频在线 | 农村老熟妇乱子伦视频 | 精品在线观看免费 | 亚洲精品一区三区三区在线观看 | 免费在线不卡视频 | 成人午夜剧场视频网站 | 国产88av| 五月天视频网站 | 国产精品99久久久久久久久久久久 | 日本一本高清视频 | 国产第九页 | 日本精品一区视频 | 性久久久久久久久久 | 91麻豆精品一区二区三区 | 欧美大片免费看 | 豆花av| 波多野结衣不卡视频 | 女人洗澡一级特黄毛片 | 日本成人在线一区 | 国内激情| 手机看片日韩福利 | 人妻无码一区二区三区久久99 | www夜片内射视频日韩精品成人 | 国产精品久久久久久久蜜臀 | 国产午夜av | 欧美1级片 | 黄色在线观看av | 在线观看av资源 | 一级做a免费视频 | 精品无码成人久久久久久免费 | 青青草免费在线观看视频 | 日韩一级片免费看 | 亚洲国产精品久久久久久 | 成年人视屏 | 性欧美xxxx| 四虎午夜| www.日本免费| 精品人妻一区二区三区含羞草 | 星铁乱淫h侵犯h文 | 国产亚洲欧美精品久久久久久 | 亚洲欧洲av在线 | 中文字幕第100页 | 京香julia在线观看 | 国产呦系列 | 日本中文在线 | 国产日本在线 | 爱看av在线 |