jsp 筆記

jsp概述

  • jsp全稱是 Java Server Page,它和servlet技術(shù)一樣幻碱,都是SUN公司定義的一種用于開發(fā)動(dòng)態(tài)web資源的技術(shù)。jsp實(shí)際上就是servlet
  • jsp = html+java
  • jsp 主要用于顯示數(shù)據(jù)

jsp 的原理

翻譯-> 編譯 -> 執(zhí)行
demo.jsp 翻譯成 _demo_jsp.java
_demo_jsp.java 編譯 _demo_jsp.class

jsp作用

  • Servlet:控制器细溅。重點(diǎn)編寫java代碼邏輯(獲取表單數(shù)據(jù)褥傍,處理業(yè)務(wù)邏輯,分發(fā)轉(zhuǎn)向)喇聊。
  • jsp: 代碼顯示模板恍风,重點(diǎn)在于顯示數(shù)據(jù)

jsp的基本語(yǔ)法

jsp模板元素

  • jsp 頁(yè)面中的HTML內(nèi)容稱之為jsp模板元素誓篱。
  • jsp 模板元素定義了網(wǎng)頁(yè)的骨架朋贬,即定義了頁(yè)面的結(jié)構(gòu)和外觀。

jsp腳本

1窜骄,jsp 腳本片段

語(yǔ)法
<%
    //多行java代碼
%>
<% 
    out.write("hello"); 
    out.write("142");
%>
注意
  • jsp 腳本片段只能初心java代碼锦募,不能出現(xiàn)其他模板元素,jsp引進(jìn)在翻譯jsp頁(yè)面中邻遏,會(huì)將jsp腳步片段中的jva代碼原封不動(dòng)的放倒servlet中的_jspService方法中
  • jsp 腳本片段的java代碼必須嚴(yán)格遵循java語(yǔ)法 每行語(yǔ)句結(jié)束要有(;).
  • 多個(gè)腳本之間的變量可以相互訪問(wèn)

2 jsp表達(dá)式

jsp用于將程序的數(shù)據(jù)輸出到客戶端

語(yǔ)法
<%=變量表達(dá)式%>
<%=2+8 %>
注意
jsp表達(dá)式中的變量和表達(dá)式后面**不能有(;)**

3糠亩,定義全局成員和靜態(tài)塊

語(yǔ)法
<%!  %>
<%!
    int i=0;
%>
<%
    int j=0;
%>
<%
    out.write(" i= "+(i++)+"   j= "+(j++));
%>
注意
i 是全局變量每次都會(huì)加1
j 每次請(qǐng)求都會(huì)初始化

jsp 注釋

  • jsp注釋<%-- 被注釋的內(nèi)容 --%> 特點(diǎn):安全,省流量
  • 網(wǎng)頁(yè)注釋: 特點(diǎn):不安全准验,費(fèi)流量
  • 在查看源碼時(shí)網(wǎng)頁(yè)注釋會(huì)顯示出來(lái) jsp注釋不會(huì)顯示

jsp 三個(gè)指令

jsp指令是為jsp引擎二設(shè)計(jì)的赎线,他們并不直接產(chǎn)生任何輸出,而只是告訴瀏覽器如何處理jsp頁(yè)面的其余部分糊饱。在jsp2.0規(guī)范中定義了三個(gè)指令

  • page 指令
  • include指令
  • taglib 指令
語(yǔ)法
<%@ 指令 屬性名1=“值1” 屬性名2=“值2”  屬性名3=“值3”>
或者
<%@ 指令 屬性名1=“值1”%>
<%@ 指令 屬性名2=“值2”%>
<%@ 指令 屬性名3=“值3”%>

<%@ page contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>

1垂寥,page

作用
用于定義jsp頁(yè)面的各種屬性,page指令最好是放在整個(gè)jsp頁(yè)面的起始位置。
屬性
  • 屬性含義
屬性 定義
language="java" 指定JSPContainer用什么語(yǔ)言來(lái)編譯滞项,目前只支持Java語(yǔ)言狭归。默認(rèn)為JAVA
extends=”className” 定義此JSP網(wǎng)頁(yè)產(chǎn)生的Servlet是繼承哪個(gè)
import=”importList” 定義此JSP網(wǎng)頁(yè)要使用哪些Java API
session = "true false" 決定此頁(yè)面是否使用session對(duì)象,默認(rèn)為ture
buffer=”none size in kb” 決定輸出流(Input stream)是否又緩沖區(qū)蓖扑。默認(rèn)為8kb
isThreadSafe=”true false” 是否支持線程唉铜。默認(rèn)為true
errorPage=”url” 如果此頁(yè)發(fā)生異常,網(wǎng)頁(yè)會(huì)重新指向一個(gè)url
isErrorPage=”true false” 表示此頁(yè)面是否為錯(cuò)誤處理頁(yè)面律杠。默認(rèn)為false
contentType=”text/html;charset=gb2312” 表示MIME類型和JSP的編碼方式
pageEncoding=”ISO-8859-1” 編碼方式
isELLgnored=”true false” 表示是否在此JSP頁(yè)面中EL表達(dá)式潭流。true則忽略,反之false則支持柜去。默認(rèn)為false
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"  errorPage="error.jsp" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    int i= 10/0;
%>
</body>
</html>

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

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>錯(cuò)誤頁(yè)面</title>
</head>
<body>
errorMesg:
<% out.write(exception.getMessage());%>

</body>
</html>

web.xml配置error 頁(yè)面
 <error-page>
  <error-code>500</error-code>
  <location>/error.jsp</location>
</error-page>

2灰嫉,include

  • 靜態(tài)包含:把其他資源包含到當(dāng)前頁(yè)面
    <% include file="/header.jsp"%>
    <% include file="/footer.jsp"%>

  • 動(dòng)態(tài)包含
    <jsp:include page="/foorer"></jsp:include>

  • 兩者的區(qū)別:翻譯的時(shí)間段不同

    • 靜態(tài)在翻譯時(shí)就把兩個(gè)文件合并
    • 動(dòng)態(tài)不會(huì)合并文件,當(dāng)代碼執(zhí)行到include時(shí)嗓奢,才包含另外一個(gè)文件內(nèi)容
    • 能用靜態(tài)就不用動(dòng)態(tài)

header.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
我是是頭部

index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="/header.jsp" %>
我是內(nèi)容
<%@ include file="/footer.jsp" %>

footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
我是底部

</body>
</html>

3讼撒,taglib

  • 作用:在jsp頁(yè)面中導(dǎo)入jstl標(biāo)簽庫(kù)。替換jsp中的java代碼片段
  • <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

jsp 六個(gè)動(dòng)作

  • 1,<jsp:include > 動(dòng)態(tài)包含
  • 2,<jsp:forward> 請(qǐng)求轉(zhuǎn)發(fā)
  • 3,<jsp:param> 設(shè)置請(qǐng)求參數(shù)
  • 4,<jsp:useBean> 創(chuàng)建一個(gè)對(duì)象
  • 5,<jsp:setProperty> 給指定的對(duì)象屬性賦值
  • 6,<jsp:getProperty> 取出指定對(duì)象的屬性值
<jsp:useBean id="stu1" class="com.itheima.entity.Student"></jsp:useBean>
     <jsp:setProperty property="name" name="stu1" value="jerry"/>
     <jsp:getProperty property="name" name="stu1"/>
     
 <!-- http://localhost:8080/test.jsp?name=123 -->
 <jsp:forward page="/7.jsp">
    <jsp:param value="123" name="name"/>
    <jsp:param value="333" name="pwd"/>
 </jsp:forward>`

jsp 9個(gè)內(nèi)置對(duì)象

  • 指在jsp的<%= %> 和<% %> 中可以直接使用的對(duì)象
對(duì)象名 類型 說(shuō)明
request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
session javax.servlet.http.HttpSession 由session="true" 開關(guān)
application javax.servlet.ServeletContext
exception java.lang.Throwable 由 isErrorPage="false"開關(guān)
out javax.servlet.jsp.JspWriter 字符串輸出流股耽,相當(dāng)于PrintWriter對(duì)象
page java.lang.Object 當(dāng)前對(duì)象this 當(dāng)前servlet實(shí)例
pageContext javax.servlet.jsp.PageContext
config javax.servlet.ServletConfig

pageContext

1根盒, 本身也是一個(gè)域?qū)ο螅梢圆僮髌渌齻€(gè)域?qū)ο螅╮equest session application)的數(shù)據(jù)
  • void setAttribute(String name,Object o);
  • Object getAttribute(String name);
  • void removeAttribute(String name);
  • 操作其它域?qū)ο蟮姆椒?/li>
  • void setAttribute(String name,Object o物蝙,int Scope);
  • Object getAttribute(String name,int Scope);
  • void removeAttribute(String name,int Scope);
  • scpoe的值:
  • PageContext.PAGE_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.APPLICATION_SCOPE
  • findAttribute(String name)炎滞;自動(dòng)從page request session application一次查找,找到了就取值诬乞,介乎查找

####### 例
pageContext.setAttribute("test", "page",PageContext.PAGE_SCOPE);
request.setAttribute("test", "request");
session.setAttribute("test","session");
application.setAttribute("test", "application");

2册赛,它可以創(chuàng)建其他的8個(gè)隱士對(duì)象
<%
    pageContext.getSession();
    pageContext.getRequest()
    pageContext.getOut()
    //...
%>
3,提供了簡(jiǎn)易方法
  • pageContext.forward("2.jsp");
  • pageContext.include("2.jsp");

四大域?qū)ο笳鸺担_發(fā)中使用場(chǎng)景

  • PageContext:pageContext 數(shù)據(jù)存放在當(dāng)前頁(yè)面有效森瘪。開發(fā)時(shí)使用較小
  • ServletRequest: request 數(shù)據(jù)存放在一次請(qǐng)求(轉(zhuǎn)發(fā))內(nèi)有效,使用非常多票堵。
  • HttpSession: session 存放的數(shù)據(jù)在一次會(huì)話中有效扼睬,使用比較多。
  • ServletContext: application 存放的數(shù)據(jù)在整個(gè)應(yīng)用范圍內(nèi)都有效悴势。因?yàn)榉秶蟠坝睿M量少用

EL的具體功能

  • 獲取數(shù)據(jù)
  • 運(yùn)算
  • 隱式對(duì)象:11個(gè)

獲取數(shù)據(jù)

EL表達(dá)式只能獲取存在4個(gè)作用域的數(shù)據(jù)
${u} 原理:pageContext.findAttribute("u");
url>name=lihao 
${param.name}
獲取對(duì)于 null這樣的數(shù)據(jù),在頁(yè)面中表現(xiàn)為空字符串
點(diǎn)(.) 運(yùn)算符相當(dāng)于調(diào)用了getter方法瞳浦,點(diǎn)后面跟的是屬性名
<% 
    Book book = new Book("1", "android 開發(fā)大全", 29, "王子陽(yáng)");
    request.setAttribute("book",book);
%>

${book.name }
[]運(yùn)算符:點(diǎn)能做的担映,它也能做废士;他不能做的叫潦,點(diǎn)不一定能做
${book.name } === ${book['name'] } === ${book["name"] }

運(yùn)算

empty
    判斷null,空字符串和沒有元素的集合(即使集合對(duì)象本身不為null)都返回true
    <%
        String str = null;
        pageContext.setAttribute("str", str);
        
        String str1= "";
        pageContext.setAttribute("str1",str1);
        
        String str2="abc";
        pageContext.setAttribute("str2",str2);
        
        List<String> list1 = new ArrayList<String>();
        pageContext.setAttribute("list1", list1);
        
        List<String> list2 = new ArrayList<String>();
        list2.add("aa");
        pageContext.setAttribute("list2",list2);

    %>
    ${ empty str } -----true <br/>
    ${ empty str1 } -----true <br/>
    ${ empty str2 } -----false <br/>
    ${ empty list1 } -----true <br/>
    ${ empty list2 } -----false <br/>
    ${ empty str ? "str為空":"有值" }

    賦值 ${test = index+4 }
    取值 ${test}

隱式對(duì)象

EL 隱式對(duì)象引用名稱 類型 jsp內(nèi)置對(duì)象名稱 說(shuō)明
pageContext javax.servlet.jsp.PageCOntext pageContent 一樣的
pageSope java.util.Map<String,Object> 沒有對(duì)應(yīng)的 pageContext返回中存放的數(shù)據(jù),頁(yè)面范圍
requestScope java.util.Map<String,Object> 沒有對(duì)應(yīng)的 請(qǐng)求范圍數(shù)據(jù)
sessionScope java.util.Map<String,Object> 沒有對(duì)應(yīng)的 會(huì)話范圍數(shù)據(jù)
applicationScope java.util.Map<String,Object> 沒有對(duì)應(yīng)的 應(yīng)用范圍數(shù)據(jù)
param java.util.Map<String,Object> 沒有對(duì)應(yīng)的 一個(gè)請(qǐng)求參數(shù)
paramValues java.util.Map<String,Object> 沒有對(duì)應(yīng)的 重名請(qǐng)求參數(shù)
header java.util.Map<String,Object> 沒有對(duì)應(yīng)的 一個(gè)請(qǐng)求消息頭
initParam java.util.Map<String,Object> 沒有對(duì)應(yīng)的 web.xml中全局參數(shù)
cookie java.util.Map<String,Object> 沒有對(duì)應(yīng)的 key:cookie對(duì)象的name值

jstl

  • jstl 是什么
  • jstl 解決什么問(wèn)題
  • jstl 如何使用

jstl 是什么

jstl(JSP Standard Tag Library官硝,JSP標(biāo)準(zhǔn)**標(biāo)簽庫(kù)**)是一個(gè)不斷完善的開放源代碼的jsp標(biāo)簽庫(kù)矗蕊,是由apache的jakarta小組來(lái)維護(hù)的短蜕。

jstl 解決什么問(wèn)題

處理jsp 頁(yè)面的邏輯處理。比如判斷傻咖,循環(huán)等朋魔。

jstl 如何使用

在jsp頁(yè)面添加taglib指令才能使用jstl標(biāo)簽
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="core"%>
使用  jstl標(biāo)簽  
語(yǔ)法 <prefix:命令 test=""></prefix:命令>
<core:if test="${num>3}"></core:if>

常用標(biāo)簽
通用標(biāo)簽 set out remove
設(shè)置變量:<core:set var="num" value="${10+5 }" scope="page"></core:set>
輸出數(shù)據(jù):<core:out value="${num }"></core:out>
移除變量:<core:remove var="num"/><br/>
移除后輸出設(shè)置默認(rèn)值: <core:out value="${num }" default="默認(rèn)值"></core:out>
條件標(biāo)簽 if choose(switch)
<%
    pageContext.setAttribute("num", 5);
    pageContext.setAttribute("index", 5);
%>
  • if
    <core:if test="${num>3}"> ${num} </core:if>
  • choose
<core:choose>
    <core:when test="${num==1 }">
    num = 1
</core:when>
    <core:when test="${num==2 }">
    num=2
</core:when>
    <core:when test="${num==3 }">
    num=3
</core:when>
    <core:when test="${num==5 }">
    num =5
</core:when>
    <core:otherwise>
    默認(rèn)值
</core:otherwise>
</core:choose>
迭代器 foreach
  • 普通循環(huán)

    • var 聲明變量

    • begin 初始化

    • end 結(jié)束條件

    • step 步長(zhǎng)
      <core:forEach var="i" begin="1" end="10" step="2">
      ${i }

      </core:forEach>

  • 循環(huán)數(shù)據(jù)

    • items 獲取到集合
    • varStatus 元素的信息
    • var 單個(gè)數(shù)據(jù)
例1
<%
    List<String> list = new ArrayList<String>();
    list.add("aaa");
    list.add("bbb");
    list.add("cccc");
    pageContext.setAttribute("list", list);

    Map<String, String> map = new HashMap<String, String>();
    map.put("a", "A");
    map.put("b", "B");
    map.put("c", "C");
    map.put("d", "D");
    map.put("e", "E");
    pageContext.setAttribute("map", map);
%>
<core:forEach items="${list }" var="l">
    ${l }
</core:forEach>
例2
<table border="1px">
    <tr>
        <th>key</th>
        <th>內(nèi)容</th>
        <th>索引</th>
        <th>計(jì)數(shù)</th>
        <th>是否第一個(gè)</th>
        <th>是否最后一個(gè)</th>
    </tr>
<core:forEach items="${map }" var="m" varStatus="vs">

    <tr>
        <td>${m['key'] }</td>
        <td>${m['value'] }</td>
        <td>${vs.index }</td>
        <td>${vs.count }</td>
        <td>${vs.first }</td>
        <td>${vs.last }</td>
    </tr>
</core:forEach>

</table>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市卿操,隨后出現(xiàn)的幾起案子警检,更是在濱河造成了極大的恐慌,老刑警劉巖害淤,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扇雕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡窥摄,警方通過(guò)查閱死者的電腦和手機(jī)镶奉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)崭放,“玉大人哨苛,你說(shuō)我怎么就攤上這事”疑埃” “怎么了建峭?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)道伟。 經(jīng)常有香客問(wèn)我迹缀,道長(zhǎng),這世上最難降的妖魔是什么蜜徽? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任祝懂,我火速辦了婚禮,結(jié)果婚禮上拘鞋,老公的妹妹穿的比我還像新娘砚蓬。我一直安慰自己,他們只是感情好盆色,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布灰蛙。 她就那樣靜靜地躺著,像睡著了一般隔躲。 火紅的嫁衣襯著肌膚如雪摩梧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天宣旱,我揣著相機(jī)與錄音仅父,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛笙纤,可吹牛的內(nèi)容都是我干的耗溜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼省容,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抖拴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起腥椒,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤阿宅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后笼蛛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體家夺,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年伐弹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拉馋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惨好,死狀恐怖煌茴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情日川,我是刑警寧澤蔓腐,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站龄句,受9級(jí)特大地震影響回论,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜分歇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一傀蓉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧职抡,春花似錦葬燎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至擅威,卻和暖如春壕探,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背郊丛。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工李请, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留派继,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓捻艳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親庆猫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子认轨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • JSP 基本結(jié)構(gòu)JSP 頁(yè)面組成:模板文本(HTML,XML,純文本),JSP 元素月培;JSP 元素:腳本元素嘁字,指令...
    jslancer閱讀 848評(píng)論 0 11
  • 一、JSP基礎(chǔ) 1.1什么是JSP JSP(Java ServerPage)是Java服務(wù)器端動(dòng)態(tài)頁(yè)面技術(shù)杉畜。是su...
    晨星資源閱讀 1,152評(píng)論 0 6
  • title: JSP筆記date: 2017-02-24 21:51:49tags: JSP JSP&Servle...
    fanyank閱讀 465評(píng)論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法纪蜒,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法此叠,繼承相關(guān)的語(yǔ)法纯续,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,643評(píng)論 18 399
  • 1.學(xué)習(xí)內(nèi)容 JSP技術(shù)入門和常用指令 JSP的內(nèi)置對(duì)象&標(biāo)簽介紹 EL表達(dá)式&EL的內(nèi)置對(duì)象 2.JSP技術(shù)入門...
    WendyVIV閱讀 2,138評(píng)論 1 18