Head First JSP---随笔一
前三章內(nèi)容
為什么使用Servlet & JSP
我們只說明要點,因為第一章的內(nèi)容重點并不是Servlet與JSP。此后我們將重點介紹這兩種技術(shù),而不是現(xiàn)在。
要點:
- HTTP代表超文本傳輸協(xié)議(HyperText Transfer Protocol),這是Web上使用的網(wǎng)絡(luò)協(xié)議。HTTP運行在TCP/IP之上。
- HTTP使用一種請求/響應模型,客戶做出一個HTTP請求,Web服務器返回一個HTTP響應,再由瀏覽器(根據(jù)響應內(nèi)容類型)確定如何進行處理。
- 如果來自服務器的響應是一個HTML頁面,就會把HTML增加到HTTP響應中。
- HTTP請求包括請求URL(客戶想要訪問的資源)、HTTP方法(GET、POST等),以及(可選)表單參數(shù)數(shù)據(jù)(也稱為”查詢串”)。
- HTTP響應包括一個狀態(tài)碼、內(nèi)容類型(也稱為MIME類型),以及響應的實際內(nèi)容(HTML、圖像等)。
- GET請求會把表單數(shù)據(jù)追加到URL的最后。
- POST請求將表單數(shù)據(jù)包括在請求的體中。
- MIME類型告訴瀏覽器要接收哪一類數(shù)據(jù),一遍瀏覽器知道如何加以處理(呈現(xiàn)HTML、顯示圖片、播放音樂等)。
- URL代表同意資源定位符(Uniform Resource Locator)。Web上的每個資源都有自己的唯一地址,都采用這種URL格式。首先是一個協(xié)議,然后是服務器名以及一個可選的端口號,再后面通常是一個特定的路徑和資源名。如果URL對應一個GET請求,那么它還可能包含一個可選的查詢串。
- Web服務器擅長提供靜態(tài)HTML頁面,但是如果需要頁面中有動態(tài)創(chuàng)建(如當前時間),就需要某種輔助應用于服務器協(xié)作。如果不用Java術(shù)語來說,這些輔助應用(大多數(shù)用Perl編寫)通常稱為CGI,這代表公共網(wǎng)關(guān)接口(Common Gateway Interface)。
- 把HTML放在println()語句中的做法很糟糕,也很容易出錯,不過JSP可以解決這個問題,它允許把Java放在HTML頁面中,而不是把HTML放在JAVA代碼中。
Web 應用體系結(jié)構(gòu)
高層Web應用體系結(jié)構(gòu)
什么是容器?
Servlet沒有main()方法。它們受控于另一個Java應用,這個Java應用稱為容器(比如Tomcat,PS:Apache是Web服務器。這兩者是有區(qū)別的)。
容器能什么?
容器如何處理請求?
MVC模式
MVC 迷你教程
Web 應用部署
構(gòu)建一個真正的Web應用
我們的4大步驟:
用戶視圖:
開發(fā)環(huán)境
部署環(huán)境
構(gòu)建應用的路線圖
版本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>將其放至部署環(huán)境中,并且啟動tomcat。(啟動tomcat可以進入到tomcat的/bin目錄下,啟動start.bat,以上都是通過DOS來操作)
這樣,我們的網(wǎng)頁就放在服務器上面了。可以試試局域網(wǎng)能夠訪問你的網(wǎng)站,不過記住,讓局域網(wǎng)的8080端口處于可以轉(zhuǎn)發(fā)的狀態(tài)。
控制器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);}}編寫完代碼后,進行編譯和連接,并將其放置開發(fā)環(huán)境和部署環(huán)境的classes目錄下。
上圖只是把class放置開發(fā)環(huán)境中,還需要復制一份class到tomcat的WEB-INF中(注意命令中的分號有2個)。
創(chuàng)建DD放至開發(fā)環(huán)境的/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文件復制到部署環(huán)境。
重啟tomcat:
點擊submit后:
至此,第1版完成。
我們發(fā)現(xiàn)在servlet中處理表單,這樣不是很好,所以我們出現(xiàn)第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的文件復制到部署環(huán)境下,并且運行tomcat。
成功!
這里我們發(fā)現(xiàn),視圖部分由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>將其放置開發(fā)環(huán)境的web目錄下,并復制到部署環(huán)境的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);} }編譯連接后,將其放置部署環(huán)境的classes的相關(guān)目錄下。
顯示結(jié)果如下:
抓包分析發(fā)現(xiàn),并無發(fā)現(xiàn)有3**的轉(zhuǎn)發(fā)狀態(tài),也就是說JSP和servlet之間的轉(zhuǎn)發(fā),用戶是不可見的。
需要學習的內(nèi)容還很多。基礎(chǔ)比一切都重要,無論你是否會最新的技術(shù)。有基礎(chǔ),必定可以有一番成就。
總結(jié)
以上是生活随笔為你收集整理的Head First JSP---随笔一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一个程序---汇编学习笔记
- 下一篇: Head First JSP---随笔二