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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSP 新手入门理解教程(附带案例)

發布時間:2023/12/31 javascript 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSP 新手入门理解教程(附带案例) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JSP

一、簡介

JSP(全稱JavaServer Pages)java服務器??。 是?種動態??技術標準。JSP部署于?絡服務器上,可以響應客戶端發送的請求,并根據請求內容動態地?成HTML、XML或其他格式?檔的Web??,然后返回給請求者。

JSP技術以Java語?作為腳本語?,為?戶的HTTP請求提供服務,并能與服務器上的其它Java程序共同處理復雜的業務需求,是簡化版的Servlet。執?的過程為 xxx.jsp---->xxx.java---->xxx.class

二、使用策略

1、純碎的HTML使?

語法和使?HTML的?法完全?樣,可以包含css,javaScript,Jquery等

2、純粹的Servlet使?

以<% java代碼?段 %>寫法顯示在jsp??,相當于Servlet中的service?法 如果是Java代碼寫成什么樣顯示什么樣

3、HTML + Servlet使?

如果寫的html代碼 相當于 out.write("")

但是我們需要注意:

jsp 只?來顯示數據 不處理業務

Servlet 只處理業務

三、核心內容、

3.1、三大指令

3.1.1、page指令

<%@page 屬性名="值" 屬性名="值" %> 控制整個jsp??的配置信息language="java" ?持的語?contentType="text/html; charset=UTF-8" 內容類型pageEncoding="UTF-8" ??的編碼格式import="java.util.List,java.util.ArrayList" 導?jarautoFlush="true" ?動刷新errorPage="03-error.jsp" 如果當前??拋異常 跳轉指定??session="true" 當前??中可以直接使?該對象isELIgnored="false" 是否忽略EL表達式

3.1.2、include指令

??包含說的是?個??可以包含另?個??的內容,并且能正常加載。

語法:<% @include file=”被包含的??名稱” %>

作?:include指令的主要作?:可以將??公共的部分提取出來,讓每個??包含這個公共的??,?是為了減少代碼量,?是易于?續的維護。

3.1.3、taglib指令

后?使?JSTL標準標簽庫時使?。

語法:<%@taglib prefix=“前綴” uri=“引?外部標簽庫的路徑” %>

3.2、六大動作

【作?】: JSP動作標簽利?XML語法格式的標記來控制Servlet引擎的?為。利?JSP動作可以動態地插??件、重?JavaBean組件、把?戶重定向到另外的??、為Java插件?成HTML代碼。

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>六大動作</title> </head> <body><h2>六大動作</h2><%-- 1. 完全轉發--%><%--6. 轉發攜帶參數--%><jsp:forward page="/myServlet"><jsp:param name="xx" value="haha"/></jsp:forward><%--2. 不完全轉發--%><jsp:include page="01-three.jsp"></jsp:include><%--3. 使用JavaBean對象--%><jsp:useBean id="user" class="com.ujiuye.bean.User"></jsp:useBean><%-- 4. 對象屬性賦值--%><jsp:setProperty name="user" property="username" value="小天天"></jsp:setProperty><%-- 5. 獲取對象屬性值--%><jsp:getProperty name="user" property="username"/> </body> </html>

【面試題:】

?試題:動態包含和靜態包含有什么區別?

1、寫法不同:

靜態包含是指令包含<% @include file= ”***” %>

動態包含是JSP動作標簽包含< jsp: include page= “***” > < / jsp:include >

2、編譯?式不同:

靜態包含:編譯過程中將被包含的??先整合到包含??再編譯。所以只有?個?件

動態包含:編譯過程中包含的??與被包含的??都編譯,運?后內容再通過servlet整合

3、參數傳遞:

靜態包含不能向被包含??傳遞參數

動態包含可以使?jsp:param標簽向被包含??傳遞參數

4、運?效率:

靜態包含快,當成了?個??;動態包含是多個??,運?慢

3.3、九大內置對象

內置對象:也稱隱式對象,在jsp中,已經初始化好并且給我們封裝好了,不需要程序員創建,可以直接使?的對象就是內置對象。

對象名 功能 類型

Out ??輸出對象 JspWriter

Exception 異常處理對象 Throwable

Page 描述??的對象 Object

PageContext ??的全局對象【作?域】 PageContext

Request 請求對象【作?域】 HttpServletRequest

Response 響應對象 HttpServletResponse

Session 會話對象【作?域】 HttpSession

Config 配置 ServletConfig

Application 服務器對象【作?域】 ServletContext

這些內置對象在Jsp??都是存在的,我們可以直接使?;

這?默認能顯示的內置對象共8個,還有?個特殊的對象Exception關于異常的,只有在page指令中設置

isErrorPage="true"時才會顯示。

可以通過以下?式獲取:

pageContext.getException() //獲取異常對象

3.3.1、對象詳解

  • application 對象可將信息保存在服務器中,直到服務器關閉,否則application對象中保存的信息會在

    整個應?中都有效。該對象的類型是SevletContext類型,它的?命周期在tomcat服務器啟動時創建,關閉時

    銷毀。其作?范圍為整個Web應?。

// 最大域對象中保存數據application.setAttribute("sc", "最大域對象中的數據!"); // 獲取最大域對象數據Object sc = application.getAttribute("sc");
  • request 對象是 javax.servlet.HttpServletRequest類型的對象。該對象代表了客戶端的請求信

    息,主要?于接受通過HTTP協議傳送到服務器的數據。request對象的作?域為?次請求。

// 一次請求域對象中保存數據request.setAttribute("req", "一次請求的域對象數據"); // 獲取一次請求中的域對象數據Object req = request.getAttribute("req");
  • response 對象是 javax.servlet.HttpServletRsponse類型的對象。該對象代表客戶端的響應信息,

    主要是將JSP容器處理過的對象信息返回到客戶端。

  • config 對象的主要作?是取得服務器的配置信息。通過 pageConext對象的 getServletConfig() ?

    法可以獲取?個config對象。當?個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個

    Servlet。 開發者可以在web.xml ?件中為應?程序環境中的Servlet程序和JSP??提供初始化參數。

  • page:當前jsp??的實例,相當于this關鍵字。

  • session:會話對象。session 對象是由服務器?動創建與?戶請求相關的對象。服務器為每個?戶都?成

    ?個session對象,?于保存該?戶的信息,跟蹤?戶的操作狀態。其作?范圍為?次會話。

// 會話域對象中保存數據session.setAttribute("se", "一次會話的域對象數據"); // 獲取一次會話的域對象數據Object se = session.getAttribute("se");
  • exception對象的作?是顯示異常信息,只有在包含 isErrorPage=“true” 的??中才可以被使?,在?

    般的JSP??中使?該對象將?法編譯JSP?件。excepation對象和Java的所有對象?樣,都具有系統提供的

    繼承結構。exception 對象?乎定義了所有異常情況。在Java程序中,可以使?try/catch關鍵字來處理異

    常情況; 如果在JSP??中出現沒有捕獲到的異常,就會?成 exception 對象,并把 exception 對象傳送

    到在page指令中設定的錯誤??中,然后在錯誤??中處理相應的 exception 對象。

  • out 對象?于在Web瀏覽器內輸出信息,并且管理應?服務器上的輸出緩沖區。JSP中的out對象是

    JspWriter類型。

  • pageContext 對象的作?是取得任何范圍的參數,通過它可以獲取 JSP??的out、request、reponse、session、application 等對象。pageContext對象的創建和初始化都是由容器來完成的,可以獲取項?的根?錄,還可通過getXXX()獲取其他內置對象

// 最小的域對象 相當于局部變量pageContext.setAttribute("pc", "最小域對象中的數據"); // 操作其他內置對象pageContext.setAttribute("sc1", "app中數據", PageContext.APPLICATION_SCOPE);pageContext.setAttribute("se1", "session中數據", PageContext.SESSION_SCOPE);pageContext.setAttribute("req1", "request中數據", PageContext.REQUEST_SCOPE);request.getRequestDispatcher("03-get.jsp").forward(request, response);

3.3.2、作用域

1、作用

為了在??、請求、和?戶之間傳遞和共享數據,JSP提供了四個不同的作?域:pageContext(??作?

域)、request(請求作?域)、session(會話作?域)、application(應?程序作?域),這些作?域

就規定了數據可以傳遞和共享的范圍以及數據的存活時間。

2、詳解

1、application 作?域

如果把變量放到application?,就說明它的作?域是application,它的有效范圍是整個應?。 整個應

?是指從應?啟動,到應?結束。我們沒有說“從服務器啟動,到服務器關閉”,是因為?個服務器可能部署多個

應?,當然你關閉了服務器,就會把上?所有的應?都關閉了。 application作?域?的變量,它們的存活時

間是最?的,如果不進???刪除,它們就?直可以使?。

application作?域上的信息傳遞是通過ServletContext實現的,它提供的主要?法如下所示:

Object getAttribute(String name) //從application中獲取信息;

void setAttribute(String name, Object value) //向application作?域中設置信息。

2、session作?域

session作?域?較容易理解,同?瀏覽器對服務器進?多次訪問,在這多次訪問之間傳遞信息,就session作?域的體現。如果把變量放到session?,就說明它的作?域是session,它的有效范圍是當前會話。所謂當前會話,就是指從?戶打開瀏覽器開始,到?戶關閉瀏覽器這中間的過程。這個過程可能包含多個請求響應。也就是說,只要?戶不關瀏覽器,服務器就有辦法知道這些請求是?個?發起的,整個過程被稱為?個會話(session),?放到會話中的變量,就可以在當前會話的所有請求?使?。

session是通過HttpSession接?實現的,它提供的主要?法如下所示:

Object HttpSession.getAttribute(String name) //從session中獲取信息。

void HttpSession.setAttribute(String name, Object value)//向session中保存信息。

HttpSession HttpServletRequest.getSessio() //獲取當前請求所在的session的對象。

session的開始時刻?較容易判斷,它從瀏覽器發出第?個HTTP請求即可認為會話開始。但結束時刻就不好判斷了,因為瀏覽器關閉時并不會通知服務器,所以只能通過如下這種?法判斷:如果?定的時間內客戶端沒有反應,則認為會話結束。Tomcat的默認值為30分鐘,但這個值也可以通過HttpSession的

setMaxInactiveInterval()?法來設置:

void setMaxInactiveInterval(int interval)

如果想主動讓會話結束,例如?戶單擊“注銷”按鈕的時候,可以使? HttpSession 的 invalidate()?

法,?于強制結束當前session:void invalidate()

3、request作?域

?個HTTP請求的處理可能需要多個Servlet合作,?這?個Servlet之間可以通過某種?式傳遞信息,但這個信息在請求結束后就?效了。request?的變量可以跨越forward前后的兩?。但是只要刷新??,它們就重新計算了。如果把變量放到request?,就說明它的作?域是request,它的有效范圍是當前請求周期。 所謂請求周期,就是指從http請求發起,到服務器處理結束,返回響應的整個過程。在這個過程中可能使forward的?式跳轉了多個jsp??,在這些???你都可以使?這個變量。Servlet之間的信息共享是通過HttpServletRequest接?的兩個?法來實現的:void setAttribute(String name, Object value)//將對象value以name為名稱保存到request作?域中。

Object getAttribute(String name) //從request作?域中取得指定名字的信息。

JSP中的doGet()、doPost()?法的第?個參數就是HttpServletRequest對象,使?這個對象的

setAttribute()?法即可傳遞信息。那么在設置好信息之后,要通過何種?式將信息傳給其他的Servlet呢?

這就要?到RequestDispatcher接?的forward()?法,通過它將請求轉發給其他Servlet。

RequestDispatcher ServletContext.getRequestDispatcher(String path) //取得Dispatcher以便轉發,path為轉發的?的Servlet。

void RequestDispatcher.forward(ServletRequest request, ServletResponse response)//

將request和response轉發

因此,只需要在當前Servlet中先通過setAttribute()?法設置相應的屬性,然后使?forward()?法進

?跳轉,最后在跳轉到的Servlet中通過使?getAttribute()?法即可實現信息傳遞。

4、pageContext作?域

page對象的作?范圍僅限于?戶請求的當前??,對于page對象的引?將在響應返回給客戶端之后被釋放,

或者在請求被轉發到其他地?后被釋放。page?的變量只要??跳轉了,它們就不?了。如果把變量放到

pageContext?,就說明它的作?域是page,它的有效范圍只在當前jsp???。從把變量放到pageContext

開始,到jsp??結束,你都可以使?這個變量。

兩個??03-四?作?域.jsp ,04-四?作?域02.jsp 03-四?作?域.jsp: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%pageContext.setAttribute("name","張三");request.setAttribute("password","123456");session.setAttribute("sex","男");application.setAttribute("hobby","旅游,學習");//轉發 request.getRequestDispatcher("04-四?作?域02.jsp").forward(request,response);%> <!--獲取數據并輸出--> <%Object name = pageContext.getAttribute("name");Object password = pageContext.getAttribute("password");Object sex = pageContext.getAttribute("sex");Object hobby = pageContext.getAttribute("hobby"); %> 當前?的pageContext中name值:<%=name%> <br> 當前?request中password的值:<%=password%> <br> 當前?session中sex的值:<%=sex%> <br> 當前?application中hobby的值:<%=hobby%> </body> </html> 04-四?作?域02.jsp: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <!--獲取保存在作?域對象中的數據--> <% Object name = pageContext.getAttribute("name"); Object password = request.getAttribute("password"); Object sex = session.getAttribute("sex"); Object hobby = application.getAttribute("hobby"); %> 當前?的pageContext中name值:<%=name%> <br> 當前?request中password的值:<%=password%> <br> 當前?session中sex的值:<%=sex%> <br>當前?application中hobby的值:<%=hobby%> </body> </html>

作?域??排序:

從?到?: pageContext < request < session < application

3.4、EL表達式

3.4.1、簡介

EL(Expression Language) 是為了使JSP寫起來更加簡單。表達式語?的靈感來?于 ECMAScript 和XPath 表達式語?,它提供了在 JSP 中簡化表達式的?法,讓Jsp的代碼更加簡化。

3.4.2、作用

是?種在JSP??獲取數據的簡單?式(只能獲取數據,不能設置數據)通過以下?式:

在JSP??的任何靜態部分均可通過:${expression}來獲取到指定表達式的值

包含以下?種?式:

${綁定名} 獲取javaBean對象或者其他類型數據

${綁定名.屬性名} 獲取javaBean中對應的屬性名

${綁定名[索引值]} 獲取集合或者數組中對應的值

${綁定名[“key”]} 通過key的值獲取在Map中對應的value值

同樣也可以在el表達式內部做?些簡單的運算:

Map<String, Map<String, Map<String, Person>>> map = new HashMap<>();Person person = new Person(1001, "小明明", new XiFu(001, "翠花"));Map<String, Person> map1 = new HashMap<>();map1.put("p", person);Map<String, Map<String, Person>> map2 = new HashMap<>();map2.put("map1", map1);map.put("map2", map2);request.setAttribute("map", map);// 獲取小明明媳婦名字/*** 原理:* map.get("map2") -----> map.map2* map2.get("map1") -----> map2.map1* map1.get("p") -----> map1.p* p.getXiFu() -----> p.xiFu* xiFu.getName() -----> xiFu.name**/

3.4.4、原理

依次從四?作?域對象檢索對應的綁定名,如果在某?個對象中獲取到了,則不再去其他對象檢索,否則繼續檢索,如果都沒有查找到則返回的是?個空字符串,?不是null如果如下操作時:以表達式${user.name}為例EL表達式會根據name去User類?尋找這個name的get?法,此時會?動把name?字??寫并加上get前綴,?旦找到與之匹配的?法,El表達式就會認為這就是要訪問的屬性,并返回屬性的值。所以,想要通過EL表達式獲取對象屬性的值,那么這個屬性就必須有與之對應的get?法。

可以通過指定檢索四?作?域對象來提升檢索速度,如下:

application–>applicationScope

session–>sessionScope

request–>requestScope

pageContext–>pageScope

?如:

${requestScope.user} 表示直接去request對象中獲取user綁定名對應的值

【案例】

ElDemoServlet package com.ujiuye.servlet; import com.ujiuye.bean.User; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @WebServlet("/elDemo") public class ElDemoServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解決亂碼問題的兩?代碼req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");//開始綁定數據//1.綁定?個字符串數據req.setAttribute("uname","鄧紫棋");//2.綁定?個Map對象數據Map<String,String> map = new HashMap<>();map.put("name","張颯");req.setAttribute("map",map);//3.綁定?個List集合數據List<String> list = new ArrayList<>();list.add("三國演義");list.add("紅樓夢");req.setAttribute("list",list);//4.綁定?個數組對象int[] arr ={12,89,10};req.setAttribute("arr",arr);//5.綁定?個javaBean對象User u = new User("李思思","666666");req.setAttribute("user",u);//轉發req.getRequestDispatcher("06-el表達式常??式.jsp").forward(req,resp);} } ??06-el表達式常??式.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>el表達式常??式</title> </head> <body>el獲取字符串數據:${uname} <br>el獲取Map對象中name對應的value值:${map["name"]} <br>el獲取List集合中第?個數組:${list[1]} <br>el獲取數組的第?個數據:${arr[0]} <br>el獲取javaBeand的username屬性值:${user.username} </body> </html>

3.5、JSTL 標簽庫

3.5.1、簡介

JSTL(JavaServer Pages Standard Tag Library,JSP標準標簽庫)是?個不斷完善的開放源代碼的JSP標簽庫。它主要提供給JavaWeb開發?員?個標準通?的標簽,開發?員可以利?這些標簽取代JSP??上的Java代碼,從?提?程序的可讀性,降低程序的維護難度。需要注意的是:jstl中需要獲取值的地??般都要配合EL表達式去使?

3.5.2、使用

1、 下載導包:jstl.jar standard.jar 兩個包

2、將標簽庫引? ??中

<%-- 引?標簽庫 --%>

<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>

3、使?

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head><title>jstl的使用</title> </head> <body><%User user = new User(1001, "小翠");session.setAttribute("user", user);%><%-- 1. 判讀標簽--%><c:if test="${empty user}"><h2>您好,請登錄!</h2></c:if><c:if test="${!empty user}"><h2>歡迎您:${user.username }</h2></c:if><%-- 2. 定義變量--%><c:set var="num" value="180"></c:set><%-- 3. 變量輸出--%><c:out value="${num }" default="沒有該變量"></c:out><%-- 4. 刪除變量--%><c:remove var="num"></c:remove><c:out value="${num }" default="沒有該變量"></c:out><%-- 5. choose多分?標簽--%><c:choose><c:when test="${num>100 }">VIP老白菜</c:when><c:when test="${num>80 }">VIP大白菜</c:when><c:when test="${num>50 }">VIP小白菜</c:when><c:otherwise>VIP沒白菜</c:otherwise></c:choose><hr><%-- 6. 循環標簽--%><c:forEach begin="1" end="100" step="1" var="i">${i } &nbsp;&nbsp;&nbsp;</c:forEach><%List<Person> list = new ArrayList<>();list.add(new Person(101, "小江江", new XiFu(001, "翠花")));list.add(new Person(102, "小軍軍", new XiFu(002, "小翠")));list.add(new Person(103, "小偉偉", new XiFu(003, "小美麗")));list.add(new Person(104, "小亮亮", new XiFu(004, "小欒欒")));list.add(new Person(105, "小康康", new XiFu(005, "小鑫鑫")));request.setAttribute("list", list);%><table border="1" cellspacing="0" width="400" align="center"><tr><th>用戶編號</th><th>用戶姓名</th><th>媳婦編號</th><th>媳婦名字</th></tr><c:forEach items="${list }" var="p"><tr><td>${p.id }</td><td>${p.pname }</td><td>${p.xiFu.id }</td><td>${p.xiFu.name1 }</td></tr></c:forEach></table></body> </html>

總結

以上是生活随笔為你收集整理的JSP 新手入门理解教程(附带案例)的全部內容,希望文章能夠幫你解決所遇到的問題。

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