JSP簡述,指令瓤鼻,內(nèi)置對象秉版,EL,JSTL

JSP

JSP是一種Web服務(wù)設(shè)計標(biāo)準(zhǔn)茬祷,以Java技術(shù)為基礎(chǔ)清焕,實現(xiàn)頁面的動態(tài)輸出。
Serlvet 提供了用于服務(wù)器編程的API,但是不能有效地管理頁面的邏輯部分和頁面輸出部分秸妥,導(dǎo)致Servlet類的代碼非彻鐾#混亂,為了克服這個缺點粥惧,Sun公司用Servlet為基礎(chǔ)键畴,推出了JSP。

JSP頁面組成
1.普通的HTML標(biāo)記符突雪。
2.JSP標(biāo)記起惕,如指令標(biāo)記,動作標(biāo)記咏删。
3.變量和方法的聲明惹想。
4.Java程序片。
5.Java表達(dá)式督函。

<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>

<%--JSP 指令標(biāo)記--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%!
    String mCurTime;
    public String showTime() {
        return new SimpleDateFormat("yyyy年MM月dd日").format(new Date());
    }
%>

<html>
<head>
    <title>JSPDemo</title>
</head>
<body>
    <%
        //Java程序片
        mCurTime = showTime();
    %>
    當(dāng)前時間:<%= mCurTime%> //Java表達(dá)式
</body>
</html>
效果

JSP語法

1.聲明變量嘀粱,方法
在<%! %> 標(biāo)記符號之間放置Java的變量聲明和方法。
聲明的變量為JSP頁面的 全局變量辰狡,在整個JSP頁面都有效锋叨。
方法在程序片中調(diào)用<% %>

習(xí)慣將<%! %> 放在JSP頁面的前面。
注意:全局變量為所有線程共享宛篇,操作數(shù)據(jù)要注意加鎖等待娃磺。

<%!
    int mCount = 0;
    public synchronized int getCount() {
        return mCount++;
    }
%>
2.Java程序片,表達(dá)式
1.Java程序片
在<% %>之間插入Java程序片些己,JSP頁面的程序片會被JSP引擎按順序執(zhí)行豌鸡。

2.Java表達(dá)式
在<%= %>間插入表達(dá)式嘿般,%=間不能有空格
這個表達(dá)式 必須能求值段标,表達(dá)式的值由服務(wù)器負(fù)責(zé)計算,并將結(jié)果以 字符串的形式發(fā)送到客戶端顯示炉奴。

在程序片中聲明的變量都是 局部變量逼庞。
<body>
    <% int curCount;
        curCount = getCount(); %>
    第<%=curCount %>個訪問本網(wǎng)站
</body>

JSP指令標(biāo)記

1.page 指令標(biāo)記

page指令用來定義整個JSP頁面的一些屬性,page指令對整個頁面都有效瞻赶,與書寫位置無關(guān)赛糟,但是一般習(xí)慣放在JSP頁面最前端。

<%@ page contentType="text/html;charset=UTF-8" language="java"
         import="java.util.Date"
         session="true"
         buffer="8kb"
         autoFlush="true"
         isThreadSafe="true"
%>

contentType:定義JSP頁面響應(yīng)的MIME類型和字符編碼砸逊。
language:定義JSP頁面使用的腳本語言璧南。
session:用于設(shè)置是否需要使用內(nèi)置的session對象,默認(rèn)true

buffer:內(nèi)置out對象緩沖區(qū)的大小师逸,或不用緩沖區(qū)none
autoFlush:緩沖區(qū)填滿時司倚,是否自動刷新,默認(rèn)true

isThreadSafe:是否可以多線程訪問,默認(rèn)true
2.include 指令標(biāo)記

可以在JSP頁面出現(xiàn)該指令的位置處动知,靜態(tài)插入一個文件皿伺。
使用include可以使代碼復(fù)用,比如每個頁面都需要導(dǎo)航條時盒粮。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>nav</title>
</head>
<body>
    假裝這是個導(dǎo)航欄鸵鸥,和兩千行相同的代碼
</body>
</html>


<%@include file="nav.jsp"%>
<html>
<head>
    <title>JSPDemo</title>
</head>
<body>
    <br/>
    假裝這是不同的主題內(nèi)容
</body>
</html>
效果

JSP動作標(biāo)記

動作標(biāo)記是一種特殊的標(biāo)記,它影響JSP 運行時 的功能丹皱。

public class  User {

    private String name;
    private int age;

    public User() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  <body>

    <%--生成User對象妒穴,id=bean的對象名,class=bean所在的包 scope=作用范圍--%>
    <jsp:useBean id="user" class="com.bean.User" scope="session"/>
    <%--設(shè)置值--%>
    <jsp:setProperty name="user" property="name" value="張三" param="name"/>
    <%--獲取值--%>
    <jsp:setProperty name="user" property="age" value="18"/>
    <jsp:getProperty name="user" property="name"/>
    <%="年齡:"+user.getAge()%>

  </body>

JSP內(nèi)置對象

有些對象不用聲明就可以在JSP頁面的Java程序片和表達(dá)式中部分使用摊崭,這些就是JSP內(nèi)置對象宰翅。

常用的內(nèi)置對象
request
response

session
application
out
1.request 對象
request封裝了用戶提交的信息,使用request對象可以獲取表單提交的信息爽室。

常常使用HTML中的表單向服務(wù)器的某個JSP頁面提交信息
 <body>
    <form action="#" method="get">
        <input type="text" placeholder="用戶名" name="name">
        <input type="submit" value="提交">
    </form>

    <%String userName;
        userName = request.getParameter("name");
        if (userName!=null)
            out.println("提交的用戶名為:"+userName);
    %>
  </body>

Request 對象常用API

<%
        request.getParameterMap();
        request.getMethod();
        request.getServerName();//獲取服務(wù)器名稱
        request.getServerPort();//獲取服務(wù)器的端口
        request.getRemoteAddr();//獲取用戶IP地址
        request.getServletPath();//獲取獲取用戶請求的Web服務(wù)目錄
    %>
2.response對象

response對象汁讼,用于對用戶的請求作出動態(tài)響應(yīng),向客戶端發(fā)送數(shù)據(jù)阔墩。

response狀態(tài)行
1xx:(1開頭的3位數(shù))主要是實驗性質(zhì)嘿架。

2xx:表明請求成功
3xx:在請求滿足前應(yīng)采取進(jìn)一步行動

4xx:瀏覽器無法滿足請求
5xx:服務(wù)器出問題
當(dāng)將網(wǎng)頁保存在word 文檔時需要修改MIME類型,這時用響應(yīng)修改

 <body>
    <P>是否確認(rèn)將當(dāng)前頁面保存為Word文檔</p>
    <form action="#" method="get">
        <input type="submit" name="submit" value="提交">
    </form>

    <%
       if ("提交".equals(request.getParameter("submit")))
           response.setContentType("application/msword;charset=gb2312");
    %>
  </body>
response重定向

 <body>
    <P>是否確認(rèn)跳轉(zhuǎn)</p>
    <form action="#" method="get">
        <input type="submit" name="submit" value="提交">
    </form>

    <%
       if ("提交".equals(request.getParameter("submit")))
           response.sendRedirect("nav.jsp");
    %>
  </body>
3.session對象

當(dāng)用戶第一次訪問Web服務(wù)目錄上的一個JSP頁面時啸箫,JSP引擎會創(chuàng)建一個和該用戶對應(yīng)的Session對象耸彪,當(dāng)用戶在所訪問的Web服務(wù)目錄的各個頁面之間瀏覽時,這個Session對象都是同一個忘苛。

session 重寫URL

用戶從一個頁面重新連接到另一個頁面時蝉娜,通過新的URL添加參數(shù),把session對象的id傳過去扎唾,從而保證了各頁面中session對象是同一個召川。

<%
   response.encodeRedirectURL("demo.jsp");
%>
session 存儲數(shù)據(jù)
  <body>
    <P>是否確認(rèn)跳轉(zhuǎn)</p>
    <form action="#" method="get">
        <input type="text" placeholder="用戶名" name="name">
        <input type="submit" name="submit" value="提交">
    </form>

    <%
        String name = request.getParameter("name");
        session.setAttribute("username",name);
        session.getAttribute("username");
        session.removeAttribute("username");
        session.invalidate();
    %>
  </body>
4.application對象

application對象由服務(wù)器負(fù)責(zé)創(chuàng)建,每個Web服務(wù)目錄下的application對象被訪問該服務(wù)目錄所有的用戶共享胸遇。

    <%
        application.setAttribute("username",name);
        application.getAttribute("username");
        application.removeAttribute("username");
    %>
4.out對象

用來向客戶端輸出數(shù)據(jù)

    <%
        out.print("");
        out.println("");
        out.newLine();
        out.flush();
        out.clear();
    %>

EL(Expression Language)

EL為 JSP 提供了簡化表達(dá)式的方法荧呐,讓JSP的代碼更加簡化。

基本語法:${express}
從作用域中獲取共享數(shù)據(jù)

EL表達(dá)式在獲取某個對象的屬性值時纸镊,先將某個屬性值的首字母變成大寫倍阐,然后加上 get 前綴,拼接成get方法逗威,再通過反射將該對象構(gòu)建出來峰搪,然后再對該對象執(zhí)行g(shù)etter方法,這與私有屬性并沒有關(guān)系凯旭,所以要注意概耻,JavaBean的屬性名要小寫楣颠,且要有g(shù)etter方法,不然會報錯咐蚯。

使用EL表達(dá)式童漩,獲取數(shù)據(jù)時,會在四大作用域中順序查找春锋,直到找到為止矫膨。
若找不到鍵值對應(yīng)的屬性值,不會顯示Null期奔,會顯示空字符串侧馅。

作用域的查找順序
page
request
session
application
1.直接從JavaBean中獲取數(shù)據(jù)

@WebServlet(value = "/a")
public class AServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        UserBean userBean = new UserBean();
        userBean.setName(req.getParameter("name"));
        req.getSession().setAttribute("user",userBean);
        resp.sendRedirect("show_user_info.jsp");
    }
}

<%-- 獲得所創(chuàng)建Bean的引用 --%>
<%--<jsp:useBean id="user" type="com.bean.UserBean" scope="session"/>--%>
<html>
<head>
    <title>JSPDemo</title>
</head>
<body>
    <p>
        提交的用戶名為:<%--<jsp:getProperty name="user" property="name" />--%>
        ${user.name}
    </p>
</body>
</html>
2.從List集合中獲取數(shù)據(jù)

@WebServlet(value = "/a")
public class AServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        List<UserBean> userBeanList = new ArrayList<>();
        UserBean userBean = new UserBean();
        userBean.setName(req.getParameter("name"));
        userBeanList.add(userBean);

        req.getSession().setAttribute("userList",userBeanList);
        resp.sendRedirect("show_user_info.jsp");
    }
}


<body>
    <p>
        提交的用戶名為:
        ${userList[0].name}
    </p>
</body>
3.從Map集合中獲取數(shù)據(jù)

@WebServlet(value = "/a")
public class AServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        Map<String,UserBean> userBeanMap = new HashMap<>();
        UserBean userBean = new UserBean();
        userBean.setName(req.getParameter("name"));
        userBeanMap.put("user1",userBean);

        req.getSession().setAttribute("userMap",userBeanMap);
        resp.sendRedirect("show_user_info.jsp");
    }
}

<body>
    <p>
        提交的用戶名為:
        ${userMap['user1'].name}
    </p>
</body>

JSTL(JavaServer Pages Standard Tag Library)

JSTL主要提供給Java Web開發(fā)人員一個標(biāo)準(zhǔn)通用的標(biāo)簽函數(shù)庫,解決JSP中寫Java代碼麻煩的問題呐萌。

使用步驟
1.導(dǎo)入JSTL的Jar

2.在jsp文件頂部加入taglib指令引入jar
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3.導(dǎo)入c.tld文件解決報錯問題
添加http://java.sun.com/jsp/jstl/core
File:填寫解壓后tld文件夾下的 /jakarta-taglibs-standard-1.1.2/tld/c.tld

4.在Web.XML中將Jar導(dǎo)入

下載JSTL的Jar

JSTL的使用
c:if (單條件判斷)
test:條件表達(dá)式
var:返回結(jié)果馁痴,true,false
scope:指定從哪個作用域獲取數(shù)據(jù)


  <body>
     <%
        int limit = 18;
        request.setAttribute("age",limit);
     %>

     <c:if test="${age>18}">
         可瀏覽
     </c:if>

     <c:if test="${age>=18}" var="res" scope="request">
         ${requestScope.res}
     </c:if>

  </body>
結(jié)果
c:choose肺孤,c:when罗晕,c:otherwise(多條件判斷標(biāo)簽使用)
 <body>  
    <%
        Integer score = 90;
        request.setAttribute("score", score);
    %>

    <c:choose>
        <c:when test="${score >= 90}">優(yōu)秀</c:when>
        <c:when test="${score >= 60 && score<90}">及格</c:when>
        <c:otherwise>不及格</c:otherwise>
    </c:choose>

  </body>
c:forEach(循環(huán)標(biāo)簽)

items:要遍歷的集合,一定要寫EL表達(dá)式
var:返回的集合item值
varStatus:一個輔助類赠堵,標(biāo)記行數(shù)

<body>
    <%
        List list = new ArrayList();
        list.add("Data1");
        list.add("Data2");
        list.add("Data3");
        request.setAttribute("lists", list);
    %>

    <c:forEach items="${lists}" var="item" varStatus="vs">
        ${vs.count}:
        ${item}<br />
    </c:forEach>

    <!-- 輸出數(shù)字1-10 -->
    <c:forEach begin="1" end="10" step="1" var="num">
        ${num}
    </c:forEach>

  </body>

XML(可擴(kuò)展置標(biāo)語言)

1.XML聲明
<?xml version="1.0" encoding="UTF-8" ?>
聲明位于XML文件的第一行小渊,以<?xml標(biāo)記開始,以?>標(biāo)記結(jié)束茫叭。

2.XML標(biāo)記
XML是由標(biāo)記構(gòu)成的文件
標(biāo)記名稱可以由字母酬屉、數(shù)字、下劃線"_"揍愁、點符號"."或連字符號"-"組成呐萨,但必須以字母或下劃線開頭。
如果是UTF-8編碼莽囤,字母包括漢字谬擦。
標(biāo)記名稱區(qū)分大小寫
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烁登,隨后出現(xiàn)的幾起案子怯屉,更是在濱河造成了極大的恐慌,老刑警劉巖饵沧,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赌躺,居然都是意外死亡狼牺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門礼患,熙熙樓的掌柜王于貴愁眉苦臉地迎上來是钥,“玉大人掠归,你說我怎么就攤上這事∏哪啵” “怎么了虏冻?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長弹囚。 經(jīng)常有香客問我厨相,道長,這世上最難降的妖魔是什么鸥鹉? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任蛮穿,我火速辦了婚禮,結(jié)果婚禮上毁渗,老公的妹妹穿的比我還像新娘践磅。我一直安慰自己,他們只是感情好灸异,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布府适。 她就那樣靜靜地躺著,像睡著了一般肺樟。 火紅的嫁衣襯著肌膚如雪细溅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼荤西。 笑死渐裸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的矢空。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼窜骄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起摆屯,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤邻遏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后虐骑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體准验,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年廷没,在試婚紗的時候發(fā)現(xiàn)自己被綠了糊饱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡颠黎,死狀恐怖另锋,靈堂內(nèi)的尸體忽然破棺而出滞项,到底是詐尸還是另有隱情,我是刑警寧澤夭坪,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布文判,位于F島的核電站,受9級特大地震影響室梅,放射性物質(zhì)發(fā)生泄漏戏仓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一竞惋、第九天 我趴在偏房一處隱蔽的房頂上張望柜去。 院中可真熱鬧,春花似錦拆宛、人聲如沸嗓奢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽股耽。三九已至,卻和暖如春钳幅,著一層夾襖步出監(jiān)牢的瞬間物蝙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工敢艰, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留诬乞,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓钠导,卻偏偏與公主長得像震嫉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子牡属,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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

  • 1.什么是JSP (1)jsp全稱是Java Server Pages票堵,它和Servlet技術(shù)一樣都是sun公司定...
    yjaal閱讀 3,648評論 5 99
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法逮栅,內(nèi)部類的語法悴势,繼承相關(guān)的語法,異常的語法措伐,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • 一.Web之間跳轉(zhuǎn)和信息共享 1.為什么需要Web組件之間跳轉(zhuǎn)和信息共享 之前編寫的Servlet都是相互獨立的,...
    賈里閱讀 985評論 0 2
  • 一特纤、JSP內(nèi)置對象簡介 JSP內(nèi)置對象是Web容器創(chuàng)建的一組對象,不使用new關(guān)鍵字就可以使用的內(nèi)置對象废士。開發(fā)者可...
    年少懵懂丶流年夢閱讀 3,727評論 0 8
  • 1.學(xué)習(xí)內(nèi)容 JSP技術(shù)入門和常用指令 JSP的內(nèi)置對象&標(biāo)簽介紹 EL表達(dá)式&EL的內(nèi)置對象 2.JSP技術(shù)入門...
    WendyVIV閱讀 2,136評論 1 18