WEB

WEB

[email protected]

2015年7月9日

 

1  目标:将服务器资源通过网络在客户端共享并交互。

2 原理:客户端和服务器端之间通过网络协议通信。

网络:客户端和服务器之间通过HTTP协议进行通信。

客户端:浏览器生成HTTP请求、解析HTTP响应,解析HTML。HTML进行展示和交互。

服务器端:服务器端解析HTTP请求,生成HTTP响应,生成HTML并提供资源。

参考:《Tomcat与Java Web开发技术详解(第2版)》。

3 方法:客户端,浏览器和HTML页面

参见:WEB客户端-浏览器和页面.docx

3.1 比较JavaScript和Java Applet

JavaScript(推荐,直接由浏览器解释执行)易用、功能强。

Applet(服务器端编译好的javaclass,传给客户端JVM执行)需要较高的Java技术,且效果不如JS,还需要本地JRE。

参考:

http://www.ehow.com/about_6400316_difference-between-java-applet-javascript.html

http://programmers.stackexchange.com/questions/113634/should-i-use-java-applets-or-javascript-php-to-make-my-site-more-interactive

4 方法:网络,HTTP协议

目标:建立物理连接,进行通信。

方法:使用TCP连接,使用HTTP请求和响应进行通信。

4.1 HTTP请求:组织请求内容,发送Socket请求。

包括请求基本参数(请求类型,uri,协议),请求详细参数(请求内容类型、长度、浏览器、请求主机等),请求内容(如GET查询字符串或POST数据等)。

浏览器在接受URL后,开始按照HTTP请求的规范构造请求内容。通过Socket发送到指定主机的指定端口。

4.2 HTTP响应:监听Socket,解析请求,读取数据,组织响应内容,并发送到客户端。

与请求对应,包括响应基本参数(协议,响应状态类型及状态),响应详细参数(响应内容的类型、长度、服务器等),响应内容(如HTML等)。

服务器在服务端监听指定的端口,当有请求时,解析请求内容。

根据请求,读取指定URI的服务器资源,并将二进制流数据发送回客户端。

5 方法:服务器端,Servlet容器和Servlet

目标:解析HTTP请求,处理请求,组织HTTP响应。

5.1 原理:web服务器处理HTTP协议,web应用处理业务。

一般将HTTP协议操作(通用)与请求处理(业务相关)分开设计。

HTTP协议操作相关的软件称为Web服务器,而与业务相关的程序称为web应用。

web服务器与应用之间的交互,则需要一定的协议来支持。java中使用servlet接口,作为所有的业务功能的基类。以此,将服务器和应用解耦。

5.2 web服务器:处理HTTP协议及WEB应用交互。

目标:处理HTTP协议,完成与WEB应用的交互。

方法:实现Servlet规范,Tomcat。

参见:..\Java\Tomcat.docx

5.3 Servlet:容器与服务独立的规范。

由Java提出规范。由Tomcat等实现方案。并提供部分常用实现类。

参见:..\Java\Servlet.docx

5.4 Web应用:请求与业务。

参见:..\Java\Servlet.docx

5.5 过滤器:在调用业务servlet之前调用的特殊servlet。

参考:http://www.oschina.net/question/12_52027

目标:全局范围内,业务调用之前预处理请求,在业务处理完成后处理响应。

方法:Filter。

Filter的配置必须在servlet配置之前。

Filter的接口与servlet相似,只是使用doFilter()代替service()。

6 示例:主页链接到指定Servlet。

打开主页,点击超链接请求servlet,服务器返回处理结果。

6.1 共享主页:index.htm

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

 

<html>

<head>

      <title>TestServlet</title>

</head>

 

<body>

 

Hello World!

<ahref="TestServlet">TestServlet</a>

 

</body>

</html>

6.2 请求url映射:web.xml

<?xmlversion="1.0" encoding="ISO-8859-1"?>

<web-appxmlns="http://java.sun.com/xml/ns/javaee"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

                     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

  version="3.0"

  metadata-complete="true">

 

    <description>

      Servlet and JSP Examples.

    </description>

    <display-name>Servlet and JSPExamples</display-name>

 

    <servlet>

     <servlet-name>HelloServlet</servlet-name>

      <servlet-class>com.thbd.HelloServlet</servlet-class>

    </servlet>

 

    <servlet-mapping>

       <servlet-name>HelloServlet</servlet-name>

       <url-pattern>/helloservlet</url-pattern>

    </servlet-mapping>

</web-app>

6.3 业务实现Servlet:com.thbd.Servlet

在Eclipse里生成servlet会自己进行编译(或者手动到project里编译)生成class文件。

参考:

http://theopentutorials.com/examples/java-ee/servlet/how-to-create-a-servlet-with-eclipse-and-tomcat/

package com.thbd;

 

import java.io.IOException;

import java.io.PrintWriter;

 

importjavax.servlet.ServletException;

importjavax.servlet.annotation.WebServlet;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

/**

 * Servlet implementation class TestServlet

 */

@WebServlet("/TestServlet")

public class TestServletextends HttpServlet {

      private static final long serialVersionUID = 1L;

 

    /**

     * Default constructor.

     */

    public TestServlet() {

        // TODO Auto-generated constructor stub

    }

 

      /**

       * @seeHttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

       */

      protected void doGet(HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException {

           // TODO Auto-generated method stub

           response.setContentType("text/html");

           PrintWriter pw=response.getWriter();

           pw.println("<h1>Hello,I amServlet.</h1>");

      }

 

      /**

       * @see HttpServlet#doPost(HttpServletRequestrequest, HttpServletResponse response)

       */

      protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {

           // TODO Auto-generated method stub

      }

 

}

6.4 发布Web应用:将servlet的class复制到web-inf/classes文件夹。

6.5 启动Tomcat。

6.6 请求共享主页:

6.7 点击超链接,链接到Servlet。

 

6.8 增加高德地图:amap.htm。

将amap.htm和高德js sdk复制到webapp文件夹。

<!DOCTYPE HTML>

<html>

<head>

<metaname="viewport" content="initial-scale=1.0,user-scalable=no" >

<metahttp-equiv="Content-Type" content="text/html;charset=utf-8">

<title>Hello,world</title>

<styletype="text/css">

      html { height:50% }

      body { height:100%; width:50%;margin:0px; padding:0px }

      #container { height:100% }

</style>

<scripttype="text/javascript"    src="amap.js"></script>  

<scripttype="text/javascript">

      function initialize() {

           var mapObj = new AMap.Map("container"); // 创建地图实例

           var point = new AMap.LngLat(116.404, 39.915); // 创建点坐标,这是个火星坐标,真实坐标对应的火星坐标为116.410251,39.916412

           mapObj.setCenter(point); // 设置地图中心点坐标

           mapObj.setZoom(11);//设置缩放级别

           mapObj.setZoomAndCenter(11,point);

      }

</script>

</head> 

 

<bodyonload="initialize()"> 

      <a href="TestServlet">TestServlet</a>

      <div id="container"></div>

</body>

</html>

7 HTTP状态:保存无状态的HTTP协议的状态

目标:HTTP协议无状态,所有的HTTP连接都一视同仁。但是web应用中,很多操作具有连续性,需要保存操作状态。

原理:使用key-value保存各种状态。这些状态可以放在服务器或客户端。

方法:服务器端使用session,客户端使用cookie。

参考:http://www.2cto.com/kf/201206/135471.html

http://lavasoft.blog.51cto.com/62575/275589/

7.1 cookie:服务器发给客户端的小点心。

7.1.1目标:在客户端保存连接状态的键值对。

7.1.2原理:服务器通过HTTP协议设定由客户端生成cookie,客户端在请求时检查所有cookie,如果有此域内的cookie就发送到服务器,供服务器读写状态。

7.1.3方法:创建、内容。

7.1.3.1  创建:服务器响应创建cookie(Set-Cookie),保存在客户端,带有不同的域名。

7.1.3.2  内容:内容(键值对),时间范围(过期时间),url范围(域名、路径)。

7.1.4流程:客户发起请求时检查cookie,有就随http请求发送到服务器。服务器读取cookie并写入相关信息。

连接只操作其域名下的cookie。

cookie单个数据量不得超过4k,总数一般为20个。

如果设置过期时间,则cookie存储在硬盘中。如果不设置,则为内存时间,关闭窗口则清除。

7.1.5示例:百度cookie。

"BAIDUID=2F3C13400F2C5E73641850E8AD3059DE:FG=1;BIDUPSID=2F3C13400F2C5E73641850E8AD3059DE; PSTM=1440482634; BD_UPN=133352;H_PS_PSSID=12896_1421_16991_12826_14430_12867_16938_14951_17001_16936_17003_17073_15786_12121_13932_16950_16969_16866_17050;H_PS_645EC=87996Fvlo1HgcFKR1oVkt45Id%2FbFdO7%2FRLtp%2FSdo3GU6nMvpcGpCC1JVWJ0;BD_CK_SAM=1; BD_HOME=0"

7.2 session:连接会话。

7.2.1目标:服务器端保存连接状态的键值对。

7.2.2原理:服务器为每个连接创建唯一的ID,SessionID。

为了区分不同的连接,服务器端使用SessionID作为连接的标识。SessionID由服务器为首次连接的客户端创建并发送给客户端保存。

7.2.3方法: 创建SessionID,保存SessionID,使用。

创建:由服务器创建。

保存:由客户端保存,一般保存为cookie。但是由于cookie可以禁止,所以也可以在cookie被禁止时使用其它的方式保存,如url参数,表单隐藏数据等。

使用:发送此ID给服务器,以供身份识别。服务器可以设置一个过期时间强制SessionID的时间范围。

servlet使用HttpSession管理Session。

7.2.4流程:客户端请求,服务器检查SessionID,发送此ID给客户端。客户端保存,供以后再请求时作为身份识别依据。

参考:http://blog.csdn.net/fangaoxin/article/details/6952954

http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html

8  WEB服务:web方法调用规范。

参见:..\Java\java-web服务.docx

9  服务器推送:服务端主动向客户端发消息。

参见:..\Java\Web-服务器推送WebSocketandAjax轮询.docx

 

你可能感兴趣的:(http,Web,javaee,servlet)