javascript
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應用體系結構
什么是容器?
Servlet沒有main()方法。它們受控于另一個Java應用,這個Java應用稱為容器(比如Tomcat,PS:Apache是Web服務器。這兩者是有區別的)。
容器能什么?
容器如何處理請求?
MVC模式
MVC 迷你教程
Web 應用部署
構建一個真正的Web應用
我們的4大步驟:
用戶視圖:
開發環境
部署環境
構建應用的路線圖
版本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---随笔一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一个程序---汇编学习笔记
- 下一篇: Head First JSP---随笔二