WEB
2015年7月9日
网络:客户端和服务器之间通过HTTP协议进行通信。
客户端:浏览器生成HTTP请求、解析HTTP响应,解析HTML。HTML进行展示和交互。
服务器端:服务器端解析HTTP请求,生成HTTP响应,生成HTML并提供资源。
参考:《Tomcat与Java Web开发技术详解(第2版)》。
参见:WEB客户端-浏览器和页面.docx
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
目标:建立物理连接,进行通信。
方法:使用TCP连接,使用HTTP请求和响应进行通信。
包括请求基本参数(请求类型,uri,协议),请求详细参数(请求内容类型、长度、浏览器、请求主机等),请求内容(如GET查询字符串或POST数据等)。
浏览器在接受URL后,开始按照HTTP请求的规范构造请求内容。通过Socket发送到指定主机的指定端口。
与请求对应,包括响应基本参数(协议,响应状态类型及状态),响应详细参数(响应内容的类型、长度、服务器等),响应内容(如HTML等)。
服务器在服务端监听指定的端口,当有请求时,解析请求内容。
根据请求,读取指定URI的服务器资源,并将二进制流数据发送回客户端。
目标:解析HTTP请求,处理请求,组织HTTP响应。
一般将HTTP协议操作(通用)与请求处理(业务相关)分开设计。
HTTP协议操作相关的软件称为Web服务器,而与业务相关的程序称为web应用。
web服务器与应用之间的交互,则需要一定的协议来支持。java中使用servlet接口,作为所有的业务功能的基类。以此,将服务器和应用解耦。
目标:处理HTTP协议,完成与WEB应用的交互。
方法:实现Servlet规范,Tomcat。
参见:..\Java\Tomcat.docx
由Java提出规范。由Tomcat等实现方案。并提供部分常用实现类。
参见:..\Java\Servlet.docx
参见:..\Java\Servlet.docx
参考:http://www.oschina.net/question/12_52027
目标:全局范围内,业务调用之前预处理请求,在业务处理完成后处理响应。
方法:Filter。
Filter的配置必须在servlet配置之前。
Filter的接口与servlet相似,只是使用doFilter()代替service()。
打开主页,点击超链接请求servlet,服务器返回处理结果。
<!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>
<?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>
在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
}
}
将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>
目标:HTTP协议无状态,所有的HTTP连接都一视同仁。但是web应用中,很多操作具有连续性,需要保存操作状态。
原理:使用key-value保存各种状态。这些状态可以放在服务器或客户端。
方法:服务器端使用session,客户端使用cookie。
参考:http://www.2cto.com/kf/201206/135471.html
http://lavasoft.blog.51cto.com/62575/275589/
连接只操作其域名下的cookie。
cookie单个数据量不得超过4k,总数一般为20个。
如果设置过期时间,则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"
为了区分不同的连接,服务器端使用SessionID作为连接的标识。SessionID由服务器为首次连接的客户端创建并发送给客户端保存。
创建:由服务器创建。
保存:由客户端保存,一般保存为cookie。但是由于cookie可以禁止,所以也可以在cookie被禁止时使用其它的方式保存,如url参数,表单隐藏数据等。
使用:发送此ID给服务器,以供身份识别。服务器可以设置一个过期时间强制SessionID的时间范围。
servlet使用HttpSession管理Session。
参考:http://blog.csdn.net/fangaoxin/article/details/6952954
http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html
参见:..\Java\java-web服务.docx
参见:..\Java\Web-服务器推送WebSocketandAjax轮询.docx