学习编程,不光要知道结果是什么,更要问一下为什么是这个结果,才能真正提升水平,避免沦为IT民工!
在JavaWeb阶段,很多人执着于对框架的操作,而忽略了对基础的深刻理!下面就对相关内容进行初步的整理。
一、HTML
HTML已标签的形式定义文件结构,是构建界面的基础,放在服务器上供客户访问,而了浏览器就是根据这些相关标签及其样式,绘制出网络页面;然而这个访问过程又是如何实现呢?先要知道“URL”,“URI”,“URN”。
1.URL:UniformResource Locator——统一资源定位符;
2.URI:UniformResource Identifier——统一资源标识符;
3.URN:UniformResource Name——统一资源名称符
URL代表的资源的地址信息,它的结构是<协议>:<特定协议部分>,例如http://www.baidu.com
URN代表某个资源独一无二的名称,
URI是一个用于标识某一互联网资源名称的字符串。该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URL是URI的其中一种使用方式。
二、动态网页、静态网页
静态网页就是纯HTML的标签网页,网页的内容只有固定的模式,而不会根据时空变化;
动态的网页就可已根据客户端的请求参数及时间、地点的请求做出不同的响应;服务器根据客户端的请求参数等信息,通过执行程序的方式来产生响应内容,然后把内容返回给客户端。目前处理动态网页的技术有CGI、PHP、ASP、Servlet/JSP等,其中Servlet和JSP是写在一起的,这两样有着紧密的联系。
三、Servlet/JSP
一般在学习JavaWeb之前,都学过Java;我么你知道Java文件的后缀是.class;而这些文件运行在JVM中,我们知道这些文件最终都会被JAM解析、使用;类比Servlet/JSP是运行在HTTP服务器上,而包含Web容器的服务器才叫做HTTP服务器,所以可以说,Servlet/JSP是运行在Web容器中,Web容器是Servlet/JSP同喜的桥梁,Servlet/JSP最终被Web容器解析、使用。
Web容器:定义了规范、标准,只要按照这些规范/标准来写,它就能实现特定的功能(产生静态/动态网页,实现各种效果,完成客户端和HTTP服务器之间的通信等)。而Servlet/JSP就是其中一项实现这一大堆规范和标准的技术。而大名鼎鼎的Tomcat就是一个Web容器;请求和响应过程如下:
1. 浏览器对服务器发出HTTP请求;
2. 受到Web请求后交给Web容器v处理,解析请求并创建相关对象(HttpServletRequet、HttpServletResponse、HttpSession等)。
3. 容器根据相应的请求,交给Servlet处理
4. Servlet根据已经封装好的请求对象(HttpServletRequest)的信息决定如何处理,然后通过相应对象(HttpServletResponse)来创建响应(关键的一步,开发人员可以编写各种业务逻辑)
5. Web容器通知HTTP服务器“响应已经创建好,并转换为HTTP响应”,并将响应传回浏览器。
Servlet/JSP的关系
JSP不只是用HTML,所有的JSP页面,最终都会被web容器编译成“.class”文件,然后加载到容器之中。web容器会将JSP页面首先转译为“.java”文件,这个“.java”文件通过直接或间接的继承HttpServlet,使得这个“.java”文件成为了一个Servlet,所以不管是Servlet还是JSP页面,最终提供服务的还是Servlet实例。
Servlet是通过Java代码实现页面的输出与输入,而JSP是通过HTML中嵌套Java代码实现界面输出和相关处理
代码如下实现相同功能:
Servlet
<span style="font-family:Microsoft YaHei;font-size:14px;">package com.web;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SimpleServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method, " + new java.util.Date());
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
</span>
JSP:
<span style="font-family:Microsoft YaHei;font-size:14px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>A Servlet</title>
</head>
<body>
<h1><%= new java.util.Date() %></h1>
</body>
</html>
</span>