本系列教程專門爲Java Web初級開發者設計,階梯式的循序漸進,沒有用到任何框架,都是基礎篇,一步步帶你揭開Java Web應用的面紗,這是第一篇。
背景說明:
任何事物的產生都是有原因的,爲什麼會有Java Web應用程序呢?
話說女媧補石、盤古開天闢地。。算了,不扯蛋了,認真講,Java Web應用程序解決了一件事:創建可交互的動態網頁。爲什麼這麼說?如果你想創建一個靜態網頁,用HTML就可以了,不用創建Java Web應用,HTML是超文本標記語言,直接存在服務器上,一個URL定位到HTML文件就好了,但是要想產生動態交互,你就需要Java Web應用。Java Web應用呢,就是通過Servlet和JSP來實現動態交互的。好,大家暫且先記住:1.Java Web是用來創建動態網頁的;2.Java Web通過Servlet和JSP來創建動態網頁。後面我會慢慢解釋。
目錄:
1.Web服務器和客戶端
2.HTML和HTTP
3.URL
4.爲什麼是Servlet和JSP?
5.通過Servlet和JSP實現的第一個Web應用(***)
6.Web容器
7.Web應用目錄結構
8.發佈描述Web.xml
1.Web服務器和客戶端
Web服務器說白了就是個軟件,這個軟件能夠處理來自客戶端的請求,能夠將客戶端想要的東西發給客戶端。就是這麼地簡單,例如:Apache就是用的很廣泛的Web服務器,服務器軟件是運行在物理機上的,同時一直監聽着某個端口,這個端口就是客戶端發送數據過來的入口。
客戶端就更簡單了,瀏覽器就是我們最常用的客戶端軟件,Chrome、Safari、火狐等等。客戶端的作用就是將我們的請求發給服務器,最常見的比如通過URL(瀏覽器地址欄輸入網址),然後將服務器發送回來的數據解析後展現出來,方便我們看,我們現在看到的網頁都是瀏覽器解析後展現出來的。
2.HTML和HTTP
GET /FirstServletProject/jsps/hello.jsp HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
200 OK
Date: Wed, 07 Aug 2013 19:55:50 GMT
Server: Apache-Coyote/1.1
Content-Length: 309
Content-Type: text/html;charset=US-ASCII
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=Wed Aug 07 12:57:55 PDT 2013
</h3>
</body>
</html>
注意,服務器按照HTTP方式在迴應客戶端時候,有一項Content-Type: text/html;charset=US-ASCII
“Content-Type”是告訴客戶端我講的是什麼類型的話,chartset就是話的規範,就好像說我用的美式英語跟你講的,服務器你要注意切換一下聽的方式。3.URL
4.爲什麼是Servlet和JSP?
5.通過Servlet和JSP實現的第一個Web應用
在MyEclipse 中點擊File->New->Web Project 輸入“MyFirstServlet”創建新的Web應用程序,如下圖
創建好之後點擊工程,右鍵New Servlet,如下圖所示:
現在我們在doGet()方法內添加一些動態數據代碼,我們第一個Servlet就像下面這樣:
package com.jige.first;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(
description = "My First Servlet",
urlPatterns = { "/FirstServlet" , "/FirstServlet.do"},
initParams = {
@WebInitParam (name="id",value="1"),
@WebInitParam(name="name",value="Jack")
}
)
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final String HTML_START="<html><body>";
public static final String HTML_END="</body></html>";
public FirstServlet() {
super();
}
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
Date date = new Date();
out.println(HTML_START + "<h2>Hi There!</h2><br/><h3>Date="+date +"</h3>"+HTML_END);
}
public void init() throws ServletException {
// Put your code here
}
}
這裏要說的一點是在Servlet 3之前,我們需要在應用部署描述(web.xml)文件中提供Servlet聲明和映射,但是Servlet 3使用java annotations告訴Servlet Container(Apache)這是一個Servlet,既簡單又容易維護。
我們點右鍵,運行 Run As->MyEclipse Server,在瀏覽器輸入地址http://localhost:8080/MyFirstServlet/FirstServlet,效果如下:
你可以刷新網頁,數據是動態變化的。
因此Servlet這裏就是用來生成HTML,並返回給response對象,容器將response返回給客戶端。通過Servlet創建動態網頁很簡單,但是也很容易出錯,遇到大數據量更是如此(你想啊,你用Java寫html,估計沒幾個人會這麼做吧!),因此就有了JSP,JSP語法結構上和HTML類似,只是添加了我們需要的動態內容。
JSP很容易看懂,長得像HTML嘛。那下面我們通過JSP實現剛纔的效果:
<%@page import="java.util.Date" %>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h2>Hi There!</h2> <br>
<h3>Date=<%= new Date() %>
</body>
</html>
實現後效果一樣。後面我會更詳細的介紹Servlet和JSP,現在我們先還是把Java Web基礎知識看完。