WEB
2015-12-16 20:26
676 查看
WEB
sf2gis@163.com
2015年7月9日
客户端:浏览器生成HTTP请求、解析HTTP响应,解析HTML。HTML进行展示和交互。
服务器端:服务器端解析HTTP请求,生成HTTP响应,生成HTML并提供资源。
参考:《Tomcat与Java Web开发技术详解(第2版)》。
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请求和响应进行通信。
浏览器在接受URL后,开始按照HTTP请求的规范构造请求内容。通过Socket发送到指定主机的指定端口。
服务器在服务端监听指定的端口,当有请求时,解析请求内容。
根据请求,读取指定URI的服务器资源,并将二进制流数据发送回客户端。
HTTP协议操作相关的软件称为Web服务器,而与业务相关的程序称为web应用。
web服务器与应用之间的交互,则需要一定的协议来支持。java中使用servlet接口,作为所有的业务功能的基类。以此,将服务器和应用解耦。
方法:实现Servlet规范,Tomcat。
参见:..\Java\Tomcat.docx
参见:..\Java\Servlet.docx
目标:全局范围内,业务调用之前预处理请求,在业务处理完成后处理响应。
方法:Filter。
Filter的配置必须在servlet配置之前。
Filter的接口与servlet相似,只是使用doFilter()代替service()。
<html>
<head>
<title>TestServlet</title>
</head>
<body>
Hello World!
<ahref="TestServlet">TestServlet</a>
</body>
</html>
<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>
参考:
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
}
}
<!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>
原理:使用key-value保存各种状态。这些状态可以放在服务器或客户端。
方法:服务器端使用session,客户端使用cookie。
参考:http://www.2cto.com/kf/201206/135471.html
http://lavasoft.blog.51cto.com/62575/275589/
cookie单个数据量不得超过4k,总数一般为20个。
如果设置过期时间,则cookie存储在硬盘中。如果不设置,则为内存时间,关闭窗口则清除。
BD_HOME=0"
保存:由客户端保存,一般保存为cookie。但是由于cookie可以禁止,所以也可以在cookie被禁止时使用其它的方式保存,如url参数,表单隐藏数据等。
使用:发送此ID给服务器,以供身份识别。服务器可以设置一个过期时间强制SessionID的时间范围。
servlet使用HttpSession管理Session。
http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html
sf2gis@163.com
2015年7月9日
1 目标:将服务器资源通过网络在客户端共享并交互。
2 原理:客户端和服务器端之间通过网络协议通信。
网络:客户端和服务器之间通过HTTP协议进行通信。客户端:浏览器生成HTTP请求、解析HTTP响应,解析HTML。HTML进行展示和交互。
服务器端:服务器端解析HTTP请求,生成HTTP响应,生成HTML并提供资源。
参考:《Tomcat与Java Web开发技术详解(第2版)》。
3 方法:客户端,浏览器和HTML页面
参见:WEB客户端-浏览器和页面.docx3.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.docx5.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/6952954http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html
8 WEB服务:web方法调用规范。
参见:..\Java\java-web服务.docx9 服务器推送:服务端主动向客户端发消息。
参见:..\Java\Web-服务器推送WebSocketandAjax轮询.docx相关文章推荐
- java-WEB中的监听器Lisener
- RPC failed; result=22, HTTP code = 411
- GUI - Web前端开发框架
- Extjs4.0 最新最全视频教程
- MyEclipse Web Project转Eclipse Dynamic Web Project
- axis备忘
- HTTP Header 属性列表
- nginx中http核心模块的配置指令2
- nginx中http核心模块的配置指令3
- nginx中http核心模块的配置指令4
- nginx中http的fastcgi模块的配置指令1
- 如何在 Linux 中快速地通过 HTTP 提供文件访问服务
- Erlang实现的一个Web服务器代码实例
- 防止网页脚本病毒执行的方法-from web
- 深入HTTP head的使用详解
- 自学成才的秘密:115个 web Develop 资源
- ASP 中使用 HTTP 协议发送参数详解