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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

index加载显示servlet数据_[WEB篇]-JavaWeb基础与应用-02-Servlet开发

發(fā)布時(shí)間:2023/12/2 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 index加载显示servlet数据_[WEB篇]-JavaWeb基础与应用-02-Servlet开发 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JavaWeb基礎(chǔ)與應(yīng)用

2.Servlet開發(fā)

  • Servlet是sun公司提供的一門用于開發(fā)動(dòng)態(tài)web資源的技術(shù)。
  • Sun公司在其API中提供了一個(gè)servlet接口,用戶若想用發(fā)一個(gè)動(dòng)態(tài)web資源(即開發(fā)一個(gè)Java程序向?yàn)g覽器輸出數(shù)據(jù)),需要完成以下2個(gè)步驟:
  • 編寫一個(gè)Java類,實(shí)現(xiàn)servlet接口。
  • 把開發(fā)好的Java類部署到web服務(wù)器中。
  • 快速入門,用servlet向?yàn)g覽器輸出“hello servlet”。
  • 閱讀Servlet API,解決兩個(gè)問題:
  • 輸出hello servlet的java代碼應(yīng)該寫在servlet的哪個(gè)方法內(nèi)?
  • 如何向IE瀏覽器輸出數(shù)據(jù)?

Web的目錄結(jié)構(gòu)

Servlet入門基礎(chǔ)

方式1:使用配置文件的方式配置servlet

編寫一個(gè)類繼承HttpServlet:重寫一個(gè)方法service方法

在web.xml配置這個(gè)Servlet :配置 <servlet></servlet>、<servlet-mapping></servletmapping>

web.xml中配置:

/**

方式2:使用注解的方式配置servlet

/**

Servlet的運(yùn)行流程

@WebServlet

Servlet的生命周期

筆面試題:請描述servlet的生命周期

Servlet的生命周期和工作原理

Servlet的的聲明周期分為三個(gè)階段:1.初始化階段 2.響應(yīng)客戶階段 3.終止階段

這三個(gè)階段分別對應(yīng)init方法 service方法 和destory方法,這三個(gè)方法分別在不同的階段進(jìn)行調(diào)用。

1)Servlet的初始化階段

在以下時(shí)刻servlet進(jìn)行初始化 servlet初始化包含以下三種情況,這三種情況都會執(zhí)行init方法

a.servlet容器啟動(dòng)后,自動(dòng)加載某些配置信息。需要配置<load-on-startup></load-on-startup>

b.在servlet容器啟動(dòng)后,客戶端第一次向servlet發(fā)起請求

c.servlet的文件被更改后 重新加載servlet

注意: init方法只會在第一次初始化servlet的時(shí)候執(zhí)行。

2)servlet響應(yīng)客戶端階段

Servlet當(dāng)接受到客戶端請求后,servlet會根據(jù)這個(gè)請求創(chuàng)建兩個(gè)對象HttpServletRequest對象和HttpServletResponse對象,這個(gè)對象分別代表接受請求和響應(yīng)請求,然后servlet調(diào)用service方法。Service方法會根據(jù)HttpRequest對象從請求中獲取相關(guān)的數(shù)據(jù),然后處理請求,最后通過HttpResponse對象把數(shù)據(jù)寫出到客戶端。

3)servlet終止階段

  • 當(dāng)web應(yīng)用被終止,或者servlet容器終止運(yùn)行
  • 或servlet容器被重新加載
  • 當(dāng)前終止的時(shí)候回調(diào)用destroy方法進(jìn)行終止。
@WebServlet

Servlet相關(guān)的對象

說明:為了美化測試界面,下述測試案例大部分使用BootStrap框架,需要導(dǎo)入相關(guān)的css、js、font文件

<1>ServletConfig對象

  • 在Servlet的配置文件中,可以使用一個(gè)或多個(gè)<init-param>標(biāo)簽為servlet配置一些初始化參數(shù)。
  • 當(dāng)servlet配置了初始化參數(shù)后,web容器在創(chuàng)建servlet實(shí)例對象時(shí),會自動(dòng)將這些初始化參數(shù)封裝到ServletConfig對象中,并在調(diào)用servlet的init方法時(shí),將ServletConfig對象傳遞給servlet。進(jìn)而,程序員通過ServletConfig對象就可以得到當(dāng)前servlet的初始化參數(shù)信息。
  • 閱讀ServletConfig API,并舉例說明該對象的作用:
    • 獲得字符集編碼
    • 獲得數(shù)據(jù)庫連接信息
    • 獲得配置文件,查看struts案例的web.xml文件

web.xml配置的參數(shù):可以通過ServletConfig對象獲取

/**

<2>ServletContext

  • WEB容器在啟動(dòng)時(shí),它會為每個(gè)WEB應(yīng)用程序都創(chuàng)建一個(gè)對應(yīng)的ServletContext對象,它代表當(dāng)前web應(yīng)用。
  • ServletConfig對象中維護(hù)了ServletContext對象的引用,開發(fā)人員在編寫servlet時(shí),可以通過ServletConfig.getServletContext方法獲得ServletContext對象。
  • 由于一個(gè)WEB應(yīng)用中的所有Servlet共享同一個(gè)ServletContext對象,因此Servlet對象之間可以通過ServletContext對象來實(shí)現(xiàn)通訊。ServletContext對象通常也被稱之為context域?qū)ο蟆?/li>
  • 查看ServletContext API文檔,了解ServletContext對象的功能。

案例1:多個(gè)servlet共享數(shù)據(jù)

/**

運(yùn)行結(jié)果:先執(zhí)行ServletContextDemo1再執(zhí)行ServletContextDemo2方能獲取數(shù)據(jù)

案例2:獲取全局的web初始化參數(shù)

web.xml中配置:

/**

案例3:實(shí)現(xiàn)servlet之間的轉(zhuǎn)發(fā)

/**

結(jié)果分析:執(zhí)行ServletContextDemo4發(fā)現(xiàn)頁面執(zhí)行ServletContextDemo5的頁面內(nèi)容,但地址欄不發(fā)生變化

案例4:讀取資源文件

/**

Request對象和Response對象

  • Web服務(wù)器收到客戶端的http請求,會針對每一次請求,分別創(chuàng)建一個(gè)用于代表請求的request對象、和代表響應(yīng)的response對象。
  • request和response對象即然代表請求和響應(yīng),那我們要獲取客戶機(jī)提交過來的數(shù)據(jù),只需要找request對象就行了。要向客戶機(jī)輸出數(shù)據(jù),只需要找response對象就行了。

<1>HttpServletResponse對象

response細(xì)節(jié)問題:

  • getOutputStream和getWriter方法分別用于得到輸出二進(jìn)制數(shù)據(jù)、輸出文本數(shù)據(jù)的ServletOuputStream、Printwriter對象。
  • getOutputStream和getWriter這兩個(gè)方法互相排斥,調(diào)用了其中的任何一個(gè)方法后,就不能再調(diào)用另一方法。
  • Servlet程序向ServletOutputStream或PrintWriter對象中寫入的數(shù)據(jù)將被Servlet引擎從response里面獲取,Servlet引擎將這些數(shù)據(jù)當(dāng)作響應(yīng)消息的正文,然后再與響應(yīng)狀態(tài)行和各響應(yīng)頭組合后輸出到客戶端。
  • Serlvet的service方法結(jié)束后,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對象是否已經(jīng)調(diào)用過close方法,如果沒有,Servlet引擎將調(diào)用close方法關(guān)閉該輸出流對象。

案例1:通過response對象輸出中文到客戶端

代碼分析:

/**

結(jié)果展示:

http://localhost:8080/JavaWeb/ResponseDemo1

案例2:通過response對象輸完成文件的下載

代碼分析:

/**

結(jié)果展示:

案例3:通過response對象生成隨機(jī)圖片(驗(yàn)證碼)

代碼分析:

ResponseDemo3.java:

/**

identify.html:測試頁面

<!DOCTYPE html>

結(jié)果展示:

http://localhost:8080/JavaWeb/ResponseDemo3

http://localhost:8080/JavaWeb/html/identify.html

<2>HttpServletRequest對象

案例1:通過request對象常用的方法

代碼展示:

/**

結(jié)果展示:

http://localhost:8080/JavaWeb/RequestDemo1

:

案例2:獲取表單的各項(xiàng)輸入的數(shù)據(jù)

代碼展示:

RequestDemo2.java:

/**

userRegister.html:用戶注冊測試界面

<!DOCTYPE html>

userRegister.js:初始化年月日下拉列表

function

結(jié)果展示:

http://localhost:8080/JavaWeb/RequestDemo2

如果是直接訪問RequestDemo2則沒有獲取表單提交的數(shù)據(jù),顯示為null,如果是通過指定的html提交指定的表單數(shù)據(jù)則正常回顯信息

http://localhost:8080/JavaWeb/html/userRegister.html

案例3:通過request請求參數(shù)中文亂碼問題

代碼分析:

RequestDemo3.java

/**

code.html:測試界面

<!DOCTYPE html>

結(jié)果顯示:

http://localhost:8080/JavaWeb/html/code.html

筆面試題:平時(shí)如何解決項(xiàng)目中亂碼

1、如果是提交方式是post 如果不想亂碼,只需要設(shè)置request.setCharacterEncoding("UTF-8"); 和頁面的編碼集一致 <meta charset="UTF-8">

2、如果提交表單的方式是get,設(shè)置request是無效的,如果想獲取的參數(shù)顯示不是亂碼,需要重新封裝獲取的數(shù)據(jù)再進(jìn)行輸出,參考示例如下:

String username=request.getParameter("username");

username=new String(username.getBytes("ISO-8859-1"),"UTF-8");

System.out.println(username);

3、get方式亂碼,還可以通過設(shè)置服務(wù)器的配置實(shí)現(xiàn),可以在tomcat安裝目錄下更改conf/server.xml

<3>請求轉(zhuǎn)發(fā)和重定向

  • 一個(gè)web資源接收到客戶端請求后,通知瀏覽器去調(diào)用另外一個(gè)web資源進(jìn)行處理,稱之為請求轉(zhuǎn)發(fā)
  • 一個(gè)web資源接收到客戶端請求后,通知瀏覽器去訪問另外一個(gè)web資源,稱之請求重定向

代碼展示:

/**

結(jié)果展示:

a.重定向測試:地址欄發(fā)生變化,頁面跳轉(zhuǎn)到指定的頁面資源

http://localhost:8080/JavaWeb/RequestDemo4

http://localhost:8080/JavaWeb/html/userRegister.html

b.請求轉(zhuǎn)發(fā)測試:

地址欄不會發(fā)生變化,頁面顯示指定的頁面資源,此處顯示css樣式失效是由于在指定的html測試文件中的路徑設(shè)置參考的是當(dāng)前地址,因此無法準(zhǔn)確定位到相應(yīng)的bootstrap提供的樣式,可以明確用${pageContext.request.contextPath}表示當(dāng)前工程目錄即可

http://localhost:8080/JavaWeb/RequestDemo4

筆面試題:請求轉(zhuǎn)發(fā)和重定向有什么區(qū)別?

  • RequestDispatcher.forward方法只能將請求轉(zhuǎn)發(fā)給同一個(gè)WEB應(yīng)用中的組件;而HttpServletResponse.sendRedirect 方法還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,甚至是使用絕對URL重定向到其他站點(diǎn)的資源。 (范圍的不同)
  • 如果傳遞給HttpServletResponse.sendRedirect 方法的相對URL以“/”開頭,它是相對于整個(gè)WEB站點(diǎn)的根目錄;如果創(chuàng)建RequestDispatcher對象時(shí)指定的相對URL以“/”開頭,它是相對于當(dāng)前WEB應(yīng)用程序的根目錄。 (“/”的含義)
  • 調(diào)用HttpServletResponse.sendRedirect方法重定向的訪問過程結(jié)束后,瀏覽器地址欄中顯示的URL會發(fā)生改變,由初始的URL地址變成重定向的目標(biāo)URL;調(diào)用RequestDispatcher.forward 方法的請求轉(zhuǎn)發(fā)過程結(jié)束后,瀏覽器地址欄保持初始的URL地址不變。(URL地址是否變化)
  • HttpServletResponse.sendRedirect方法對瀏覽器的請求直接作出響應(yīng),響應(yīng)的結(jié)果就是告訴瀏覽器去重新發(fā)出對另外一個(gè)URL的訪問請求;RequestDispatcher.forward方法在服務(wù)器端內(nèi)部將請求轉(zhuǎn)發(fā)給另外一個(gè)資源,瀏覽器只知道發(fā)出了請求并得到了響應(yīng)結(jié)果,并不知道在服務(wù)器程序內(nèi)部發(fā)生了轉(zhuǎn)發(fā)行為。 (請求次數(shù)和響應(yīng)次數(shù))
  • RequestDispatcher.forward方法的調(diào)用者與被調(diào)用者之間共享相同的request對象和response對象,它們屬于同一個(gè)訪問請求和響應(yīng)過程;而HttpServletResponse.sendRedirect方法調(diào)用者與被調(diào)用者使用各自的request對象和response對象,它們屬于兩個(gè)獨(dú)立的訪問請求和響應(yīng)過程。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的index加载显示servlet数据_[WEB篇]-JavaWeb基础与应用-02-Servlet开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。