整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          web編程教程-jsp入門學(xué)習(xí)的筆記

          課程回顧

          會(huì)話管理

          1)會(huì)話管理: 管理瀏覽器和服務(wù)器之間的會(huì)話過(guò)程中產(chǎn)生的會(huì)話數(shù)據(jù)

          2)Cookie技術(shù): 會(huì)話數(shù)據(jù)保存在瀏覽器客戶端。

          Cookie核心的API:

          2.1 在服務(wù)器端創(chuàng)建Cookie對(duì)象

          Cookeie cookie = new Cookie("name","value");

          2.2 把cookie發(fā)送給瀏覽器端(通過(guò)響應(yīng)頭:set-cookie)

          response.addCookie(cookie);

          2.3 瀏覽器帶著cookie信息訪問(wèn)服務(wù)器(通過(guò)請(qǐng)求頭:cookie),服務(wù)器得到cookie信息

          Cookie[] cookies = request.getCookies();

          局限:

          1)只能保存字符串類型,不能保存中文

          2)一個(gè)cookie不能超過(guò)4kb

          3)Session技術(shù):會(huì)話數(shù)據(jù)保存在服務(wù)器端。(內(nèi)存)

          Session核心的API:

          3.1 創(chuàng)建或得到session對(duì)象

          HttpSession session = request.getSession(); //創(chuàng)建或得到session對(duì)象

          request.getSession(false); //得到session對(duì)象

          3.2 會(huì)話數(shù)據(jù)保存session對(duì)象中,和得到會(huì)話數(shù)據(jù)

          session.setAttribute("name",Object); 保存數(shù)據(jù)

          session.getAttribute("name") 得到數(shù)據(jù)

          注意:

          1)session.setIntactiveInterval(時(shí)間); 設(shè)置session過(guò)期時(shí)間

          2)session.invalidate() 手動(dòng)銷毀session對(duì)象

          2 Session案例

          用戶登錄場(chǎng)景

          3 編程實(shí)戰(zhàn)

          通訊錄程序

          軟件的生命周期

          3.1 需求分析(需求分析師)

          功能分析:

          1)添加聯(lián)系人

          2)修改聯(lián)系人

          3)刪除聯(lián)系人

          4)查詢所有聯(lián)系人

          功能流轉(zhuǎn)

          美工設(shè)計(jì): 設(shè)計(jì)軟件的靜態(tài)原型

          3.2 需求設(shè)計(jì)(系統(tǒng)分析師/架構(gòu)師/資深開發(fā)人員)

          1)設(shè)計(jì)實(shí)體(抽象實(shí)體)

          聯(lián)系人實(shí)體:

          class Contact{
              private String id;
              private String name;
              private String gender;
              private int age;
              private String phone;
              private String email;
              private String qq;
          }

          2)設(shè)計(jì)"數(shù)據(jù)庫(kù)",(xml代替"數(shù)據(jù)庫(kù)")

          contact.xml
          <contactList>
          <contact id="1">
          <name>張三</name>
          <gender>男</gender>
          <age>20</age>
          <phone>13433334444</phone>
          <email>zs@qq.com</email>
          <qq>43222222<qq>
          </contact>
          </contactList>

          3)設(shè)計(jì)涉及的接口

          DAO接口(數(shù)據(jù)訪問(wèn)對(duì)象):實(shí)體對(duì)象的CRUD方法。

          項(xiàng)目原則: 通常一個(gè)實(shí)體對(duì)象就會(huì)對(duì)應(yīng)一個(gè)DAO接口和一個(gè)DAO實(shí)現(xiàn)類

          interface ContactDao{
              public void addContact(Contact contact);//添加聯(lián)系人
              public void updateContact(Contact contact);//修改聯(lián)系人
              public void deleteContact(String id);//刪除聯(lián)系人
              public List<Contact> findAll(); //查詢所有聯(lián)系人
              public Contact findById(String id);//根據(jù)編號(hào)查詢聯(lián)系人
          }

          4)設(shè)計(jì)項(xiàng)目的目錄結(jié)構(gòu)

          項(xiàng)目名稱: contactSys_web

          目錄結(jié)構(gòu):

          |- contactSys_web
              |-src
                  |-gz.itcast.contactSys_web.entity : 存放實(shí)體對(duì)象
                  |-gz.itcast.contactSys_web.dao : 存放dao的接口
                  |-gz.itcast.contactSys_web.dao.impl: 存放dao的實(shí)現(xiàn)類
                  |-gz.itcast.contactSys_web.servlet: 存放servlet的類
                  |-gz.itcast.contactSys_web.test: 存放單元測(cè)試類
                  |-gz.itcast.contactSys_web.util: 存放工具類
                  |-gz.itcast.contactSys_web.exception: 存放自定義異常類
              |-WebRoot
                  |-html文件
                  |-images:目錄。存放圖片資源
                  |-css:目錄。存放css資源
                  |-js:目錄。存放js資源

          3.3 編碼實(shí)現(xiàn)(軟件開發(fā)工程師/攻城獅)

          開發(fā)順序:

          設(shè)計(jì)數(shù)據(jù)庫(kù)-> 實(shí)體 -> DAO接口,DAO實(shí)現(xiàn)-> Servlet+html頁(yè)面

          3.4 功能測(cè)試(測(cè)試攻城獅)

          3.5 性能測(cè)試(測(cè)試攻城獅)

          3.6 部署上線(實(shí)施攻城獅)

          3.7 維護(hù)階段(實(shí)施攻城獅)

          4 Jsp基礎(chǔ)

          4.1 Jsp引入

          Servlet的作用: 用java語(yǔ)言開發(fā)動(dòng)態(tài)資源的技術(shù)!!!

          Jsp的作用:用java語(yǔ)言(+html語(yǔ)言)開發(fā)動(dòng)態(tài)資源的技術(shù)!!!

          Jsp就是servlet!!!

          4.2 Jsp的特點(diǎn)

          1)jsp的運(yùn)行必須交給tomcat服務(wù)器!!!!

          tomcat的work目錄: tomcat服務(wù)器存放jsp運(yùn)行時(shí)的臨時(shí)文件

          2)jsp頁(yè)面既可以寫html代碼,也可以寫java代碼。

          (html頁(yè)面不能寫java代碼 。而jsp頁(yè)面可以寫java代碼)

          4.3 體驗(yàn)jsp頁(yè)面作用

          需求:顯示當(dāng)前時(shí)間到瀏覽器上

          可以把jsp頁(yè)面當(dāng)做html頁(yè)面在tomcat中訪問(wèn)!!!

          4.4 Jsp的執(zhí)行過(guò)程

          問(wèn)題: 訪問(wèn)http://localhost:8080/day12/01.hello.jsp 如何顯示效果?

          1)訪問(wèn)到01.hello.jsp頁(yè)面,tomcat掃描到j(luò)sp文件,在%tomcat%/work把jsp文件翻譯成java源文件

          (01.hello.jsp -> _01_hello_jsp.java) (翻譯)

          2)tomcat服務(wù)器把java源文件編譯成class字節(jié)碼文件 (編譯)

          (_01_hello_jsp.java -> _01_hello_jsp.class)

          3)tomcat服務(wù)器構(gòu)造_01_hello_jsp類對(duì)象

          4)tomcat服務(wù)器調(diào)用_01_hello_jsp類里面方法,返回內(nèi)容顯示到瀏覽器。

          第一次訪問(wèn)jsp:

          走(1)(2)(3)(4)

          第n次訪問(wèn)jsp:

          走(4)

          注意:

          1)jsp文件修改了或jsp的臨時(shí)文件被刪除了,要重新走翻譯(1)和編譯(2)的過(guò)程

          4.5 疑問(wèn)

          問(wèn)題: 為什么Jsp就是servlet!!!

          jsp翻譯的java文件:

          public final class _01_hello_jsp extends org.apache.jasper.runtime.HttpJspBase
          implements org.apache.jasper.runtime.JspSourceDependent {

          HttpJspBase類:

          public abstract class org.apache.jasper.runtime.HttpJspBase extends javax.servlet.http.HttpServlet implements javax.servlet.jsp.HttpJspPage {

          結(jié)論: Jsp就是一個(gè)servlet程序!!!

          servlet的技術(shù)可以用在jsp程序中

          jsp的技術(shù)并不是全部適用于servlet程序!

          Servlet的生命周期:

          1)構(gòu)造方法(第1次訪問(wèn))

          2)init方法(第1次訪問(wèn))

          3)service方法

          4)destroy方法

          Jsp的生命周期

          1)翻譯: jsp->java文件

          2)編譯: java文件->class文件(servlet程序)

          3)構(gòu)造方法(第1次訪問(wèn))

          4)init方法(第1次訪問(wèn)):_jspInit()

          5)service方法:_jspService()

          6)destroy方法:_jspDestroy()

          5 Jsp語(yǔ)法

          5.1 Jsp模板

          jsp頁(yè)面中的html代碼就是jsp的模板

          5.2 Jsp表達(dá)式

          語(yǔ)法:<%=變量或表達(dá)式%>

          作用: 向?yàn)g覽器輸出變量的值或表達(dá)式計(jì)算的結(jié)果

          注意:

          1)表達(dá)式的原理就是翻譯成out.print("變量" );通過(guò)該方法向?yàn)g覽器寫出內(nèi)容

          2)表達(dá)式后面不需要帶分號(hào)結(jié)束。

          5.3 Jsp的腳本

          語(yǔ)法:<%java代碼 %>

          作用: 執(zhí)行java代碼

          注意:

          1)原理把腳本中java代碼原封不動(dòng)拷貝到_jspService方法中執(zhí)行。

          5.4 Jsp的聲明

          語(yǔ)法:<%! 變量或方法 %>

          作用: 聲明jsp的變量或方法

          注意:

          1)變量翻譯成成員變量,方法翻譯成成員方法。

          5.5 Jsp的注釋

          語(yǔ)法: <%!-- jsp注釋 --%>

          注意;

          1)html的注釋會(huì)被翻譯和執(zhí)行。而jsp的注釋不能被翻譯和執(zhí)行。

          6 Jsp的三大指令

          6.1 include指令

          作用: 在當(dāng)前頁(yè)面用于包含其他頁(yè)面

          語(yǔ)法: <%@include file="common/header.jsp"%>

          注意:

          1)原理是把被包含的頁(yè)面(header.jsp)的內(nèi)容翻譯到包含頁(yè)面(index.jsp)中,合并成翻譯成一個(gè)java源文件,再編譯運(yùn)行!!,這種包含叫靜態(tài)包含(源碼包含)

          2)如果使用靜態(tài)包含,被包含頁(yè)面中不需要出現(xiàn)全局的html標(biāo)簽了!!!(如html、head、body)

          6.2 page指令

          作用: 告訴tomcat服務(wù)器如何翻譯jsp文件

          <%@ page
          language="java" --告訴服務(wù)器使用什么動(dòng)態(tài)語(yǔ)言來(lái)翻譯jsp文件
          import="java.util.*" --告訴服務(wù)器java文件使用什么包導(dǎo)入包,多個(gè)包之間用逗號(hào)分割
          pageEncoding="utf-8" --告訴服務(wù)器使用什么編碼翻譯jsp文件(成java文件)
          contentType="text/html; charset=utf-8" 服務(wù)器發(fā)送瀏覽器的數(shù)據(jù)類型和內(nèi)容編碼
          注意:在開發(fā)工具中,以后只需要設(shè)置pageEncoding即可解決中文亂碼問(wèn)題
          errorPage="error.jsp"
          isErrorPage="false"
          buffer="8kb"
          session="true"
          isELIgnored="false"
          %>

          6.3 taglib指令

          總結(jié):

          1)編碼實(shí)戰(zhàn):

          1.1 servlet應(yīng)用

          1.2 初步了解軟件開發(fā)流程

          2)Jsp基礎(chǔ)

          2.1 Jsp的執(zhí)行原理(翻譯-》編譯-》servlet的生命周期)

          2.2 語(yǔ)法(jsp表達(dá)式,jsp腳本)

          2.3 指令

          include指令

          page指令

          SP技術(shù)

          題量: 15 滿分: 100

          作答時(shí)間:11-01 22:20至

          重做

          100分

          一. 單選題(共8題,52.8分)

          1.JSP文件在第一次運(yùn)行的時(shí)候被JSP引擎編譯為( )文件

          A. Servlet

          B. Class

          C. HTML

          D. XML

          我的答案: A正確答案: A


          2.page指令的屬性中可以多次設(shè)計(jì)的屬性是( )

          A. import

          B. session

          C. extends

          D. info

          我的答案: A正確答案: A


          3.在JSP頁(yè)面中,能夠完成輸出操作的內(nèi)置對(duì)象是( )

          A. out

          B. response

          C. request

          D. config

          我的答案: A正確答案: A


          4. 在JSP中,若要在JSP正確使用標(biāo)簽:<x:getKing/>,在jsp中聲明的taglib

          指令為:<%@taglib uri = “/WEB-INF/myTags.tld” prefix = “( )”%>,

          下劃線處應(yīng)該是

          A. x

          B. getKing

          C. myTags

          D. king

          我的答案: A正確答案: A


          5.某JSP中有如下代碼,顯示結(jié)果為( )

          <%

          int a = 5;

          request.setAttribute(“a”,”123”);

          session.setAttribute(“a”,”456”);

          %>

          <c:out value="${a}"/>

          A. 5

          B. 123

          C. 456

          D. null

          我的答案: B正確答案: B


          6.要在jsp中使用ArrayList,做法正確的是( )

          A. <% import java.util.ArrayList%>

          B. <%@ import "java.util.ArrayList"%>

          C. %@ page import="java.util.ArrayList"%>

          D. <%@ page package="java.util.ArrayList"%>

          我的答案: C正確答案: C


          7.下面關(guān)于JSP作用域?qū)ο蟮恼f(shuō)法錯(cuò)誤的是( )

          A. request對(duì)象可以得到請(qǐng)求中的參數(shù)

          B. session對(duì)象可以保存用戶信息

          C. application對(duì)象可以被多個(gè)應(yīng)用共享

          D. 作用域范圍從小到達(dá)是request、session、application

          我的答案: C正確答案: C


          8.在JSP頁(yè)面中,保存數(shù)據(jù)的范圍由小到大依次是( )

          A. pageContext,request,application,session

          B. pageContext,application,session,request

          C. pageContext,request,session,application

          D. pageContext,session,request,application

          我的答案: C正確答案: C




          二. 多選題(共2題,13.2分)

          9.Servlet與JSP的區(qū)別是( )

          A. 性能更強(qiáng)

          B. 編程方式不同

          C. 運(yùn)行速度不同

          D. 編譯順序不同

          我的答案: BCD正確答案: BCD

          10.在a.jsp中有代碼片斷如下:

          <form action =”b.jsp” method =”POST”name=”form1”>

          loginName:<input type=”text”name=”loginName”/>

          <input type=”submit” name=”submit”/>

          </form>

          在b.jsp中加入下列( )代碼,可以輸出在a.jsp頁(yè)面上輸入的loginName的值

          A. <%=request.getParameter(“l(fā)oginName”)%>

          B. <%=request.gerAttribute(“l(fā)oginName”)%>

          C. <%Stringname=request.getParameter(“l(fā)oginname”);

          out.println(name); %>

          D. <% Stringname=request.getAttribute(“l(fā)oginname”);

          out.println(name); %>

          我的答案: AC正確答案: AC



          三. 判斷題(共5題,34分)

          11.JSP頁(yè)面是采用JavaScript語(yǔ)言實(shí)現(xiàn)在服務(wù)端代碼。

          A. 對(duì)

          B. 錯(cuò)

          我的答案: 錯(cuò)正確答案: 錯(cuò)


          12<jsp:forward ... >標(biāo)記的page屬性值是相對(duì)的URL地址,只能靜態(tài)的URL。

          A. 對(duì)

          B. 錯(cuò)

          我的答案: 錯(cuò)正確答案: 錯(cuò)


          13.JSP代碼可以直接執(zhí)行,所以不會(huì)被翻譯成JAVA代碼。

          A. 對(duì)

          B. 錯(cuò)

          我的答案: 錯(cuò)正確答案: 錯(cuò)


          14.JSP頁(yè)面中不能包含腳本元素。

          A. 對(duì)

          B. 錯(cuò)

          我的答案: 錯(cuò)正確答案: 錯(cuò)


          15.JSP中Java表達(dá)式的值由服務(wù)器負(fù)責(zé)計(jì)算,并將計(jì)算值按字符串發(fā)送給客戶端顯示。

          A. 對(duì)

          B. 錯(cuò)

          我的答案: 對(duì)正確答案: 對(duì)

          SP的工作模式是請(qǐng)求/響應(yīng)模式,客戶端首先發(fā)出HTTP請(qǐng)求,JSP程序收到請(qǐng)求后將進(jìn)行處理并返回處理結(jié)果。在一個(gè)JSP文件第一次被請(qǐng)求的時(shí)候,JSP引擎(容器)把該JSP文件轉(zhuǎn)換成一個(gè)Servlet,而這個(gè)引擎本身也是一個(gè)Servlet。JSP的運(yùn)行原理如圖11-4所示。

          圖11-4 JSP的運(yùn)行原理

            JSP的運(yùn)行過(guò)程具體如下。

            (1)客戶端發(fā)出請(qǐng)求,請(qǐng)求訪問(wèn)JSP文件。

            (2)JSP容器先將JSP文件轉(zhuǎn)換成一個(gè)Java源文件(Java Servlet源程序),在轉(zhuǎn)換過(guò)程中,如果發(fā)現(xiàn)JSP文件中存在任何語(yǔ)法錯(cuò)誤,則中斷轉(zhuǎn)換過(guò)程,并向服務(wù)端和客戶端返回出錯(cuò)信息。

            (3)如果轉(zhuǎn)換成功,則JSP容器會(huì)將生成的Java源文件編譯成相應(yīng)的字節(jié)碼文件*.class。該class文件就是一個(gè)Servlet,Servlet容器會(huì)像處理其他Servlet一樣處理它。

            (4)由Servlet容器加載轉(zhuǎn)換后的Servlet類(class文件)創(chuàng)建一個(gè)該Servlet(JSP頁(yè)面的轉(zhuǎn)換結(jié)果)的實(shí)例,并執(zhí)行Servlet的jspInit()方法。jsInit()方法在Servlet的整個(gè)生命周期中只會(huì)執(zhí)行一次。

            (5)執(zhí)行jspService()方法處理客戶端的請(qǐng)求。對(duì)于每一個(gè)請(qǐng)求,JSP容器都會(huì)創(chuàng)建一個(gè)新的線程處理它。如果多個(gè)客戶端同時(shí)請(qǐng)求該JSP文件,則JSP容器會(huì)創(chuàng)建多個(gè)線程,使每一個(gè)客戶端請(qǐng)求都對(duì)應(yīng)一個(gè)線程。

            (6)如果JSP文件被修改了,則服務(wù)器將根據(jù)設(shè)置決定是否對(duì)該文件重新進(jìn)行編譯,如果需要重新編譯,則使用重新編譯后的結(jié)果取代內(nèi)存中的Servlet,并繼續(xù)上述處理過(guò)程。需要注意的是,雖然JSP效率很高,但在第一次調(diào)用時(shí)往往由于需要轉(zhuǎn)換和編譯,所以會(huì)產(chǎn)生一些輕微的延遲。

            (7)如果系統(tǒng)出現(xiàn)資源不足等問(wèn)題,JSP容器可能會(huì)以某種不確定的方式將Servlet從內(nèi)存中移除,發(fā)生這種情況的時(shí)候,首先會(huì)調(diào)用jspDestroy()方法,然后Servlet實(shí)例會(huì)被作為“垃圾”進(jìn)行處理。

            (8)當(dāng)請(qǐng)求處理完成后,響應(yīng)對(duì)象由JSP容器接收,并將HTML格式的響應(yīng)信息發(fā)送回客戶端。


          主站蜘蛛池模板: A国产一区二区免费入口| 亚洲一区在线视频| 91无码人妻精品一区二区三区L| 精品久久久久久无码中文字幕一区| 杨幂AV污网站在线一区二区| 欧美亚洲精品一区二区| 国产在线一区二区视频| 精品一区二区三区在线成人| 成人国产一区二区三区| 麻豆视频一区二区三区| 日韩福利视频一区| 国产精品无码一区二区三区毛片 | 色天使亚洲综合一区二区| 日韩国产精品无码一区二区三区| 日韩精品无码一区二区三区四区| 一区二区三区四区在线播放 | 国产中文字幕一区| 国产伦精品一区二区| 精品国产一区二区三区免费看 | 一区二区三区高清在线| 秋霞鲁丝片一区二区三区| 精品国产一区二区三区久 | 国产一区二区女内射| 国产亚洲情侣一区二区无码AV | 日本在线一区二区| 麻豆精品久久久一区二区| 国产精品熟女一区二区| 麻豆一区二区99久久久久| 精品国产伦一区二区三区在线观看 | 亚洲福利一区二区精品秒拍| 在线播放国产一区二区三区 | 色一情一乱一区二区三区啪啪高| 亚洲香蕉久久一区二区三区四区| 亚洲一区在线视频观看| 日本高清天码一区在线播放| 高清一区二区三区视频| 亲子乱AV视频一区二区| 美女毛片一区二区三区四区| 午夜性色一区二区三区免费不卡视频 | 中文字幕无码一区二区三区本日| 国产av成人一区二区三区|