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

歡迎訪問 生活随笔!

生活随笔

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

javascript

Head First JSP---随笔一

發布時間:2025/3/15 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Head First JSP---随笔一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前三章內容


為什么使用Servlet & JSP

我們只說明要點,因為第一章的內容重點并不是Servlet與JSP。此后我們將重點介紹這兩種技術,而不是現在。

要點:

  • HTTP代表超文本傳輸協議(HyperText Transfer Protocol),這是Web上使用的網絡協議。HTTP運行在TCP/IP之上。
  • HTTP使用一種請求/響應模型,客戶做出一個HTTP請求,Web服務器返回一個HTTP響應,再由瀏覽器(根據響應內容類型)確定如何進行處理。
  • 如果來自服務器的響應是一個HTML頁面,就會把HTML增加到HTTP響應中。
  • HTTP請求包括請求URL(客戶想要訪問的資源)、HTTP方法(GET、POST等),以及(可選)表單參數數據(也稱為”查詢串”)。
  • HTTP響應包括一個狀態碼、內容類型(也稱為MIME類型),以及響應的實際內容(HTML、圖像等)。
  • GET請求會把表單數據追加到URL的最后。
  • POST請求將表單數據包括在請求的體中。
  • MIME類型告訴瀏覽器要接收哪一類數據,一遍瀏覽器知道如何加以處理(呈現HTML、顯示圖片、播放音樂等)。
  • URL代表同意資源定位符(Uniform Resource Locator)。Web上的每個資源都有自己的唯一地址,都采用這種URL格式。首先是一個協議,然后是服務器名以及一個可選的端口號,再后面通常是一個特定的路徑和資源名。如果URL對應一個GET請求,那么它還可能包含一個可選的查詢串。
  • Web服務器擅長提供靜態HTML頁面,但是如果需要頁面中有動態創建(如當前時間),就需要某種輔助應用于服務器協作。如果不用Java術語來說,這些輔助應用(大多數用Perl編寫)通常稱為CGI,這代表公共網關接口(Common Gateway Interface)。
  • 把HTML放在println()語句中的做法很糟糕,也很容易出錯,不過JSP可以解決這個問題,它允許把Java放在HTML頁面中,而不是把HTML放在JAVA代碼中。

Web 應用體系結構

高層Web應用體系結構

  • 對于每一種HTTP方法(如get、post、head等),描述該方法的用途,以及該HTTP方法協議的技術特性,并列出客戶(通常是一個Web瀏覽器)會因為哪些原因使用這種方法,明確對應這種HTTP方法的相應HttpServlet方法。
  • 描述Servlet生命周期的作用和實踐序列:
  • servlet類的加載
  • servlet實例化
  • 調用init方法
  • 調用service方法
  • 調用destroy方法
  • 構建Web應用的文件和目錄結構,可能包含:
  • 靜態內容
  • JSP頁面
  • servlet類
  • 部署描述文件
  • 標記庫
  • JAR文件
  • Java類文件并描述如何保護資源文件避免HTTP訪問
  • 描述一下各個部署描述文件元素的作用和語義:
  • servlet實例
  • servlet名
  • servlet類
  • servlet初始化參數
  • URL與servlet的映射
  • 什么是容器?
    Servlet沒有main()方法。它們受控于另一個Java應用,這個Java應用稱為容器(比如Tomcat,PS:Apache是Web服務器。這兩者是有區別的)。

    容器能什么?

  • 通信支持,無需我們自己建立ServerSocket、監聽端口、創建流等。我們只需要實現自己的業務邏輯即可。
  • 生命周期管理,容器控制著servlet的生與死。它會負責加載類、實例化和初始化servlet、調用servlet方法,并使servlet實例能夠被垃圾回收。
  • 多線程支持,容器會自動地為它接收每個servlet請求創建一個新的線程。針對客戶的請求,如果servlet已經運行完相應的HTTP服務方法,這個線程就會死掉。這并不是說不用考慮線程安全,還是會遇到同步問題。
  • 聲明方式實現安全,利用容器,可以使用XML部署描述文件來配置(和修改)安全性,而不必將其硬編碼寫到servlet(或其他)類代碼中。
  • JSP支持,容器負責把JSP代碼翻譯成真正的Java。
  • 容器如何處理請求?

  • 用戶點擊一個URL鏈接
  • 容器創建兩個對象:HttpServletResponse、HttpServletRequest對象
  • 容器根據URL找到正確的servlet,并將響應和請求對象傳遞給servlet線程
  • 容器調用servlet的service()方法,根據不同的請求調用不同的方法(如doGet()、doPost()方法)
  • doGet()、doPost()做完事情后,將生成一個動態頁面填入到HttpServletResponse對象中
  • 線程結束,容器將響應對象轉換為一個HTTP響應,把它發回給客戶,然后刪除請求和響應對象。
  • MVC模式

  • M=model模型
  • V=view視圖
  • C=console控制器

  • MVC 迷你教程

    Web 應用部署

  • 構建一個Web應用的文件和目錄結構可能包含
  • 靜態內容
  • JSP頁面
  • servlet類
  • 部署描述文件
  • 標記庫
  • JAR文件
  • Java類文件
  • 描述一下各個部署描述文件元素的作用和語義:
  • error-page
  • init-param
  • mime-mapping
  • servlet
  • servlet-class
  • servlet-mapping
  • servlet-name
  • welcome-file
  • 為以下各個部署描述文件元素構造正確的結構
  • error-page
  • init-param
  • mime-mapping
  • servlet
  • servlet-class
  • servlet-name
  • welcome-file
  • 構建一個真正的Web應用

    我們的4大步驟:

  • 分析用戶的視圖,以及高層體系結構
  • 創建用于開發這個項目的開發環境。
  • 創建用于部署這個項目的部署環境。
  • 對Web應用的各個主鍵完成的開發和測試(迭代式的開發和測試)。
  • 用戶視圖:

    開發環境

    部署環境

    構建應用的路線圖

  • 構建和測試用戶最初請求的HTML表單。
  • 構建控制器servlet第一個版本,并且用HTML表單測試這個控制器。這個版本通過HTML表單來調用,并打印出它接收的參數。
  • 為專家/模型類構建一個測試類,然后構建并測試專家/模型類本身。
  • 把servlet升級到第2版。這個版本增加了一個功能,可以調用模型類來得到啤酒建議。
  • 構建JSP,把servlet升級到第3版本(再增加一個功能,可以把表示分派到JSP完成),然后再測試整個應用。

  • 版本1

    前端代碼:

    <!DOCTYPE html> <html><head><title>form.html</title></head><body><h1 align="center">Beer Selection Page</h1><form action="SelectBeer.do" method="post"><span>Select beer characteristics</span><br/><span>Color:</span><select name="color" size="1"><option value="light">light</option><option value="amber">amber</option><option value="brown">brown</option><option value="dark">dark</option></select><br/><br/><br/><center><input type="submit" value="Submit"></center></form></body> </html>

    將其放至部署環境中,并且啟動tomcat。(啟動tomcat可以進入到tomcat的/bin目錄下,啟動start.bat,以上都是通過DOS來操作)

    這樣,我們的網頁就放在服務器上面了??梢栽囋嚲钟蚓W能夠訪問你的網站,不過記住,讓局域網的8080端口處于可以轉發的狀態。

    控制器servlet的第1版(注意:如果報GBK錯,就把注釋去掉)

    servlet代碼:

    package com.example.web;//servlet接口的包 import javax.servlet.*; //httpservlet的包 import javax.servlet.http.*; //io流的包 import java.io.*;//幾乎大部分的servlet都需要繼承HttpServlet類 public class BeerSelect extends HttpServlet {//重寫了HttpServlet的doPost方法public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException {//這個方法來自ServletResponse接口response.setContentType("text/html");//獲取響應的輸出流PrintWriter out = response.getWriter();out.println("Beer Selection Advice<br/>");//這個方法來自于ServletRequest接口String color = request.getParameter("color");out.println("<br/>Got beer color "+ color);}}

    編寫完代碼后,進行編譯和連接,并將其放置開發環境和部署環境的classes目錄下。

    上圖只是把class放置開發環境中,還需要復制一份class到tomcat的WEB-INF中(注意命令中的分號有2個)。

    創建DD放至開發環境的/beerV1/etc/目錄下(注意:如果報錯就把注釋去掉)

    <!-- 這段照著敲就行了,以后再知道意思 --> <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><servlet><servlet-name>Ch3 Beer</servlet-name><servlet-class>com.example.web.BeerSelect</servlet-class></servlet><servlet-mapping><servlet-name>Ch3 Beer</servlet-name><url-pattern>/SelectBeer.do</url-pattern></servlet-mapping></web-app>

    將上面的xml文件復制到部署環境。

    重啟tomcat:

    點擊submit后:

    至此,第1版完成。

    我們發現在servlet中處理表單,這樣不是很好,所以我們出現第2版

    工具代碼如下:

    import java.lang.*; import java.util.*;public class BeerExpert{public List<String> getBrands(String color){List<String> list = new ArrayList<String>();if(color.equals("light")){list.add("Jail Pale Ale");list.add("Gout Stout");}return list;} }

    第2版servlet代碼:

    package com.example.web;import com.example.model.*; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*;public class BeerSelect extends HttpServlet {public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException {String color = request.getParameter("color");BeerExpert be = new BeerExpert();List<String> result = be.getBrands(color);response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("Beer Selection Advice<br/>");Iterator it = result.iterator();while(it.hasNext()){out.print("<br/>try: "+it.next());}}}

    編譯連接后,將classes的文件復制到部署環境下,并且運行tomcat。

    成功!

    這里我們發現,視圖部分由servlet來寫又太麻煩了!于是第3版本出來了。

    第3版視圖result.jsp:

    <%@ page import="java.util.*" %><!DOCTYPE html> <html> <head><title></title> </head> <body><h1 align="center">Beer Recommendations JSP</h1><p><%List<String> styles = (List<String>) request.getAttribute("styles");Iterator it = styles.iterator();while(it.hasNext()){out.print("<br/>try: "+it.next());}%></body> </html>

    將其放置開發環境的web目錄下,并復制到部署環境的WEB-INF中。

    第3版BeerSelect:

    package com.example.web;import com.example.model.*; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*;public class BeerSelect extends HttpServlet {public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException {String color = request.getParameter("color");BeerExpert be = new BeerExpert();List<String> result = be.getBrands(color);request.setAttribute("styles",result);RequestDispatcher view = request.getRequestDispatcher("result.jsp");view.forward(request, response);} }

    編譯連接后,將其放置部署環境的classes的相關目錄下。

    顯示結果如下:

    抓包分析發現,并無發現有3**的轉發狀態,也就是說JSP和servlet之間的轉發,用戶是不可見的。


    需要學習的內容還很多?;A比一切都重要,無論你是否會最新的技術。有基礎,必定可以有一番成就。

    總結

    以上是生活随笔為你收集整理的Head First JSP---随笔一的全部內容,希望文章能夠幫你解決所遇到的問題。

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