本系列教程专门为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基础知识看完。