Web服务技术与应用
一些基本的Web理论知识适当结合了一些实例。
主要涵盖内容有:HTML+CSS+JSP+JDBC+AJAX+XML+WebService+EJB+Servlet。
- Web 概述
- Web是Internet上一种应用或者服务,使人们能方便快速的发布和获取信息。Web服务由Web服务器和浏览器共同提供。
- Web服务器就是由软件和硬件构成的能提供Web服务(相应用户请求,处理请求并返回处理结果的)的系统。
- 静态页面和动态页面:静态页面是网站发布时就写好的,动态页面是用户请求时生成的。
- Web服务器与浏览器之间通过HTML进行交互。
- Web站点体系结构:静态模式(所有页面都是提前编辑好的静态页面),一般动态(增加了数据库服务器,通过实时获取数据库信息更新页面),多层动态(增加了一层服务器,将显示和逻辑分离同时减轻了Web服务器的负担:ASP.net,EJB).
- URL:统一资源定位术:protocol :// hostname[:port] / path / [;parameters][?query]#fragment
- HTTP:超文本传输协议,定义了浏览器怎么将请求发送给服务器以及服务器怎么将响应返回给客户端:
GET :浏览器将参数和值通过?附加在URL后面进行传递,服务器将资源放在响应报文的数据部分
POST :将用户请求以键值对形式封装在保温数据部分,用于传输大量数据
HEAD PUT DELETE OPTIONS TRACE CONNECT 8
- 客户端动态技术:JS,由浏览器解释执行的脚本代码(这里应该有JS代码)
服务器端动态技术:JavaBean,JSP,Servlet,ASP,PHP
异步刷新技术Ajax:异步JS和XML,不刷新整个页面而更新其中的一部分
- Applet是下载到本地运行的.class为后缀的JAVA编写的小程序,出于安全考虑访问本地信息受限
- JavaScript是位于Java和HTML之间的事件驱动的编程语言,由浏览器而非JVM*解释*执行
- DHTML在下载网页后仍能实现实时的元素变换,是CSS,HTML4.0,HTML DOM(文档对象模型)技术的体现
- Servlet,在服务器端运行,能处理HTTP请求产生响应的动态页面,缺点是页面和逻辑交织,自己写的Servlet应继承HttpServlet类并重写doGet(),doPost()
- JSP(Java Server Page)服务器的JSP引擎解释JSP,并以HTML形式返回浏览器,JSP可通过JDBC链接数据库。JSP和其他服务器端动态技术的区别是它最终被编译为Servlet并由JVM执行,且编译只发生在第一次请求JSP页面时,所以执行效率高。
- JavaBean:可重用组件。
- WebService:向外界暴露一组能通过Web调用的API,实现通过Web调用完成一些功能。可被描述,发布,查找以及调用:
XML做数据的基本格式+SOAP做信息交换的协议+WSDL做描述文档的语言+使用RPC调用WebService+UDDI实现注册,查找,调用。
Question:脚本语言的工作原理是什么?
客户端动态技术和服务器端动态技术的区别?
- HTML
- 每个HTML元素都可以看成是一个在浏览器中显示的对象。HTML是一种文档结构语言,HTML文件结构包含HEAD(描述浏览器所需信息)和BODY两部分.
- HTML文档中标签的id属性和name属性有什么区别①Id是html中所有元素都有的元素,而非表单元素没有name属性,如:div,span等。②使用css是通过元素id来选择元素的,而request对象是操纵name属性获取元素的。(比如表单发送给Servlet,Servlet调用request.getParam()中参数是表单元素的name名)③id在整个页面中应是唯一的,而不同表单中可以出现相同name属性的元素。
- 对于HTML中的单选框radio,value="aihao1"都是name属性一样时表示为同一组单选框,用checked表示默认选中。
- CSS层叠样式表
- Cascading Style Sheets使用CSS的好处:①将样式与结构分离,使得样式得到复用,一个html中可以包含多个样式文件,实现了对样式的集中管理。②对网页上的元素精准定位。
- CSS中的三种选择器:类选择器,id选择器,元素选择器。
元素选择器就是直接是元素名称,如p,div,span......
类选择器的格式是“.类名”
Id选择器是“#id名”
交集选择器格式:元素选择器.类选择器/id选择器,选择该元素下特定id或class的元素
并集选择器:使用“,”将三种选择器相连
后代选择器:一种表示嵌套关系的选择器,用space来连接各个选择器名,如:div div .class 选中的是div下div下的所有具有类名的元素
子代选择器:使用大于号表示:父代>子代,且只选中直接子代,若父代和子代还有其他层的则不被选中
*行内样式>ID样式>类别样式>元素样式
以下两个有些浏览器中并不兼容。(虚元素和虚类都是用:连接的)
虚类:选择符:虚类(link,visited,active,hover)一般用于<a>元素
虚元素:一般用于p,div,span的首行或首字母的显示。选择符/选择符.类:first-letter/first-line
- 链入外部样式表的文件以.css为文件后缀名文件中只包含样式,通过在html中用:
<link href="style.css" rel="stylesheet" type="text/css" />
导入外部样式表(通常用于CSS文件中导入另一CSS文件)在CSS文件中可以通过@import url("public.css");导入另一个CSS文件,但是需要将该指令放在CSS文件的第一句。
联入样式表:写在页面的<Head>下的<Style>
内联样式:混合在HTML标记中使用,最不推荐这种写法,通过style=”属性:值;......”
*内联样式>联入(<style>)样式>导入外部样式,同级之间后定义优先。
- CSS中的margin和padding的区别:
- CSS元素的定位position:absolute/relative
- CSS的滤镜:alpha,blue通过“opacity:0.2;”设置透明度
- 动态网页制作(主要就是JavaScript技术的应用)
1.JavaScript能对浏览器中用户事件做出响应,JS的特性:简单性 JavaScript是简化的编程语言,不像高级语言有严格的使用限制,使用简洁灵活。例如在JavaScript中可直接使用变量,不必事先声明,变量类型规定也不十分严格。
基于对象 JavaScript是一种基于对象(object-based)的语言,允许用户自定义对象,同时浏览器还提供大量的内建对象,可以将浏览器中不同的元素作为对象处理,体现了面向对象编程的思想。但JavaScript并不完全面向对象,不支持类和继承。
可移植性 JavaScript可在大多数浏览器上不经修改直接运行。
动态性 JavaScript是DHTML的重要组成部分,是设计交互式动态特别是客户端动态页面的重要工具。
安全性 JavaScript是一种安全性语言,它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互,从而有效地防止数据的丢失。
2.Java与JS的区别:
①Java是SUN公司推出的新一代面向对象的程序设计语言,主要应用于网络编程;JavaScript主要用于Web页面编写脚本,是Netscape公司的产品。
②JavaJava虚拟机去执行。JavaScript源代码嵌入HTML文件中,由浏览器对它进行识别、解释并执行.
③Java采用强变量检查,即所有变量在编译之前必须声明。JavaScript中变量声明,采用弱变量,在使用前不需作声明,而是解释器在运行时检查其数据类型。
④Java程序可单独执行,而JavaScript程序只能嵌入HTML中,不能单独执行。
⑤Java程序的编写、编译需要专门的开发工具,如JDK(Java Development Kit)、Visual J++等;而JavaScript程序只是作为网页的一部分嵌入HTML中,编写JavaScript程序只要用一般的文本编辑器即可。
- 理论上JS可以插入HTML的任何位置,但一般将他放在<Head>标签下的<Script>标签下。或者通过<script src=””>来引入一段JS代码。<!-- //-->用来兼容不支持JS的浏览器,不支持则不执行。
- JS的数据类型有字符型,数值型和布尔型。字符型用单引号或双引号包围,如果字符串中有单引号,则用双引号包围,如果有双引号则用单引号包围。JS默认所有数值型为浮点数,以0打头表示8进制数,以0x打头为16进制数。冷知识!JS没有8进制和16进制的小数形式。JS中的null表无值/无对象,undefined表示对象属性不存在或者未赋值。变量命名和C相同,无最大长度限制。 JavaScript 中 null 和 undefined 的主要区别是 null的操作如同数字0,而 undefined 的操作如同特殊值NaN (不是一个数字)。对null 值和undefined值作比较总是相等的。(55=='55') è true,JS中“===”来判断相等
JS函数中变量作用域:在函数内用var保留声名的变量是局部变量,作用域仅局限于该函数;在函数外用var声明的变量是全局变量,作用域是整个HTML文件。函数内未用var声明的变量也是全局变量。局部变量与全局变量同名时,其操作互不影响。
天哪!一定要注意中间的大小写行嘛!!!!坑skr人!!!!!!!!!且JavaScript脚本程序必须放在按钮和文本框定义之后
- Number.NaN 是一个特殊的属性,被定义为“不是数值”。例如被0除返回 NaN。试图解析一个无法被解析为数字的字符串同样返回Number.NaN。把NaN与任何数值或本身作比较的结果都是不相等。不能通过与Number.NaN比较来测试 NaN 结果,而应该使用isNaN() 函数。PurseInt函数用来将String类型转换为Int类型。
- escape函数和unescape函数用于将URL中的非ASCII字符进行编码和解码:(在用于发送中文数据的时候很有作用)
escape(string) //用%xx 16进制形式编码
unescape(string) //将用escape编码过的字串复原
- JS创建自定义对象的几种方法:
①对象字面常量的方式,创建的对象不能复用,创建时就完成初始化工作。赋予一组属性和方法,在后面的使用中调用方法操作对象:
图1 图2 图3
②工厂模式创建自定义对象:先创建一个Object类型对象,再使用实参为它初始化属性。返回这个对象,并在以后使用它。
③构造函数方式。
- HTML DOM:HTML的文档对象模型,是一种结构化的文档对象。HTML DOM将网页上的各个元素也看成是对象,可以通过JS获取各个对象,动态的完成对文档中元素的控制。提供存取和更新文挡内容、结构和样式的编程接口。W3C推荐使用document.getElementById(“...”);来操纵对象
- DOM的浏览器对象navigator,使用它可以获取有关浏览器信息和实现窗口的跳转打开关闭等操作:alert("浏览器平台:"+navigator.platform+"浏览器语言:"+navigator.language+"浏览器版本:"+navigator.appVersion);
使用location对象可以实现网页的定位:
window.location.href="http://www.qq.com"; //在同一页面中打开网页
window.location.assign("http://www.qq.com");//前进后退功能不丧失
window.location.replace("http://www.qq.com");//后退功能丧失,回到主页
window.navigate("http://www.qq.com?x=5");
在页面中使用location.search就可以获得上面传递的参数
history.go(-1); //实现返回以前页面的过程
简单的用于在cookie中保存用户名和密码等信息使用的代码:
设置cookie信息,获取cookie信息并设置cookie有效时间的方法:
<script type="text/javascript">
var cookie = {
set:function(key,val,time){//设置cookie方法
var date=new Date(); //获取当前时间
var expiresDays=time; //将date设置为n天以后的时间
date.setTime(date.getTime()+expiresDays*24*3600*1000); //格式化为cookie识别的时间
document.cookie=key + "=" + val +";expires="+date.toGMTString(); //设置cookie
},
get:function(key){//获取cookie方法
/*获取cookie参数*/
var getCookie = document.cookie.replace(/[ ]/g,""); //获取cookie,并且将获得的cookie格式化,去掉空格字符
var arrCookie = getCookie.split(";") //将获得的cookie以"分号"为标识 将cookie保存到arrCookie的数组中
var tips; //声明变量tips
for(var i=0;i<arrCookie.length;i++){ //使用for循环查找cookie中的tips变量
var arr=arrCookie[i].split("="); //将单条cookie用"等号"为标识,将单条cookie保存为arr数组
if(key==arr[0]){ //匹配变量名称,其中arr[0]是指的cookie名称,如果该条变量为tips则执行判断语句中的赋值操作
tips=arr[1]; //将cookie的值赋给变量tips
break; //终止for循环遍历
}
}
return tips;
},
todelete:function(key){ //删除cookie方法
var date = new Date(); //获取当前时间
date.setTime(date.getTime()-10000); //将date设置为过去的时间
document.cookie = key + "=v; expires =" +date.toGMTString();//设置cookie
}
}
function save(){
var uname = document.getElementById("name").value;
var upwd = document.getElementById("pwd").value;
cookie.set("uname",uname,24);//设置为24天过期
cookie.set("upwd",upwd,24);
alert("您的信息已经保存啦!");
}
function put(){
alert(cookie.get("uname")+cookie.get("upwd")+cookie.get("expires"));
}
</script>
</head>
<body>
<input type="text" id="name" placeholder="请输入用户名"></br>
<input type="password" id="pwd" placeholder="请输入密码"></br>
<input type="button" value="点击保存cookie" Onclick="save()"></br>
<input type="button" value="点击查看cookie" Onclick="put()">
</body>
14.JQuery是JS的一个框架,JQuery对于JS的优化是:
获取文档中的元素。jQuery为准确地获取需要检查或操作的文档元素,提供了可靠而富有效率的选择符机制。
修改页面外观。jQuery提供了跨浏览器的标准解决方案,即使在页面呈现以后,仍能改变文档中某个部分的类或者个别的样式属性。
改变文档的内容。jQuery能够影响的范围并不局限于简单的外观变化,使用少量的代码,jQuery就能改变文档的内容。
响应用户的交互操作。jQuery提供了形形色色的页面事件的适当方式,而不需要使用事件处理程序使HTML代码看起来杂乱。此外,它的事件处理API也消除了经常困扰Web开发人员的浏览器不一致性问题。
为页面添加动态效果。为了实现某种交互行为,设计者必须向用户提供视觉上的反馈。jQuery内置的一批淡入、擦除之类的效果,以及制作新效果的工具包,为此提供了便利。
无需刷新页面从服务器获取信息。这种编程模式就是众所周知的AJAX,它能帮助Web开发人员创建出反应敏感、功能丰富的网站。jQuery通过消除这一过程中的浏览器特定的复杂性,使开发人员得以专注于服务器的功能设计。
简化常用的JavaScript任务。除了这些完全针对文档的特性之外,jQuery也提供了对基本的JavaScript结构(例如迭代和数组操作等)的增强。
- JQ选择器::$()。所有能在样式表中使用的选择器,都能放到这个圆括号中的引号内
$(“#div1”).addClass(“green”); //向div1添加green类
$(“#div1”).removeClass(“red”); //向div1删除red类
jQuery就是用$(document).ready()方法来代替传统JavaScript的window.onload方法的。
JQ事件绑定的例子:
$(document).ready(function(){
$(‘#panel’).bind(‘click’,function(){ //绑定click事件
$(‘body’).addClass(‘large’); //单击ID为#panel的元素时添加large类样式
});
});
JQ的hover,连续定义了鼠标覆盖和鼠标移除的操作
$(document).ready(function(){
$(‘#panel’).hover(function(){
$(this).addClass(‘large’); //鼠标移动到该元素上时添加large类样式
}, function(){
$(this).removeClass(‘large’); //鼠标移出该元素时移除large类样式
});
});
- JSP与数据库
1.JSP的优势:
与ASP相比:JSP有两大优势。首先,动态部分用Java编写,而不是VB或其他MS专用语言,所以更加强大与易用。第二点就是JSP易于移植到非MS平台上。
与纯Servlets相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
与SSI相比:SSI无法使用表单数据、无法进行数据库链接。
与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
与静态HTML相比:静态HTML不包含动态信息。
- JSP的处理流程:
- 就像其他普通的网页一样,您的浏览器发送一个HTTP请求给服务器。
- Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。
- JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,并且将所有的JSP元素转化成Java代码。
- JSP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎。
- Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行过程中,servlet产生HTML格式的输出并将其内嵌于HTTP response中上交给Web服务器。
- Web服务器以静态HTML网页的形式将HTTP response返回到您的浏览器中。
- 最终,Web浏览器处理HTTP response中动态产生的HTML网页,就好像在处理静态网页一样。
- JSP的生命周期:
JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。
编译阶段:servlet容器编译servlet源文件,生成servlet类
初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
执行阶段:调用与JSP对应的servlet实例的服务方法
销毁阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例
- JSP声明<%! %> JSP表达式<%= %> JSP代码<% %> JSP注释<%-- --%>
JSP指令<@% page/include/taglib ...%>
- JSP的九种自定义对象
Request对象
request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。
getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。
getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkobx类型
getParameterNames():该方法可以取得所有变量的名称,该方法返回一个Emumeration。
getInputStream():调用此方法来读取来自客户端的二进制数据流。
response对象
response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。
out对象
out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。最初的JspWriter类对象根据页面是否有缓存来进行不同的实例化操作。可以在page指令中使用buffered='false'属性来轻松关闭缓存。JspWriter类包含了大部分java.io.PrintWriter类中的方法。不过,JspWriter新增了一些专为处理缓存而设计的方法。还有就是,JspWriter类会抛出IOExceptions异常,而PrintWriter不会。
session对象
session对象是 javax.servlet.http.HttpSession类的实例。和Java Servlets中的session
对象有一样的行为。每个客户端维持一个session对象
application对象
服务器启动后就产生了一个application对象,不同客户在所访问的各个页面间只有这一个对象。(整个应用中只有一个Application对象)
Cookies
Web服务器保存在用户硬盘上的一段文本。Cookies允许一个Web站点在用户电脑上保存信息并且随后再取回它
- JDBC整体架构(Java Database connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库人员能够编写数据库应用程序,同时,JDBC也是个商标名。
数据库连接过程:导入JDBC包: 添加import语句到Java程序导入所需的类在Java代码中。import java.sql.* ; // for standard JDBC programs
注册JDBC驱动程序:这一步会导致JVM加载所需的驱动程序实现到内存中,因此它可以实现JDBC请求。try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch(ClassNotFoundException ex)
{
System.out.println("Error: unable to load driver class!");
System.exit(1);
}
指定数据库URL:这是创建格式正确的地址指向到要连接的数据库。
- Ajax(异步JS和XML)
1.Ajax基本概念:
将javaScript和XML联合应用并称作AJAX,Ajax并不是一门新的语言,而是一种用于创建更好、更快及交互性更强的Web应用程序的技术。
通过Ajax,可以用JavaScript的XMLHttpRequest对象来直接与服务器进行通信,无需重新加载页面。
Ajax和Web服务器之间通过异步数据传输,实现只请求部分信息,而不是整个页面。
它实际上是几项技术按一定的方式组合在一起共同协作: HTML、CSS 、DOM、JavaScript、 XML 、XSLT和 XMLHttpRequest 。
2.使用Ajax技术和普通网页技术的差别点:
创建连接对象:最后,代码调用DriverManager对象的getConnection()方法来建立实际的数据库连接。
String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);
在客户端与服务器之间传输的数据不再是样式+结构和XML,而是同一用XML作为传输的格式,在客户端根据Ajax引擎进行解释得到所需的数据。
- XMLHttpRequest对象
Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。XmlHttpRequest使开发者可以使用JavaScript向服务器提出异步请求并处理响应,而不阻塞用户。
- Ajax使用步骤:
需要进行Aj'a'x请求的页面,实现刷新局部页面来响应用户请求:当前两个页面同样处于/Ajax文件夹下!!!
<script type="text/javascript">
function check(){
var xmlHttp;
try{
xmlHttp=new XMLHttpRequest();
}catch(e){
try{
xmlHttp=new ActiveXObject("Msxml12.XMLHTTTP");
}catch(e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTTP");
}catch(e){
alert("您的消息不支持AJax");
return false;
}
}
}
var name=document.getElementById("name").value;
var url="ajax/helloworld.jsp?name="+name; //相对于应用程序WebRoot的相对路径
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=myfunc;
xmlHttp.send();
function myfunc(){
if(xmlHttp.readyState==4)
if(xmlHttp.status==200){
var data=xmlHttp.responseText;
//alert(data);
if(data)
document.getElementById("namestatue").innerHTML=data;
else
alert("false");
}
}
}
//作业,使用ajax完成一个判断是否登陆的页面,jsp的调试方法,js的调试
</script>
<body>
<form>
<input type="text" id="name" placeholder="用户名" onchange="check()"><span id="namestatue"></span><br>
<input type="password" placeholser="密码">
<input type="submit" value="提交">
</form>
</body>
进行Ajax处理的页面:
<%@ page language="java" contentType="text/html" import="java.util.*,java.sql.*" pageEncoding="UTF-8"%>
<%
String username=request.getParameter("phone");
Connection con;
//驱动程序名
String driver = "com.mysql.jdbc.Driver";
//URL指向要访问的数据库名mydata
String url = "jdbc:mysql://localhost:3306/patent";
//MySQL配置时的用户名
String user = "root";
//MySQL配置时的密码
String password = "123654";
//遍历查询结果集
try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()方法,连接MySQL数据库!!
con = DriverManager.getConnection(url,user,password);
//if(!con.isClosed())
// System.out.println("Succeeded connecting to the Database!");
//2.创建statement类对象,用来执行SQL语句!!
Statement statement = con.createStatement();
//要执行的SQL语句
String sql = "select * from user";
ResultSet rs = statement.executeQuery(sql);
while(rs.next()){
String username1 = rs.getString("username");
if(username1.equals(username)) out.print("exist");
//输出结果
//System.out.println(username);
}
rs.close();
con.close();
} catch(ClassNotFoundException e) {
//数据库驱动类异常处理
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
//数据库连接失败异常处理
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
}
%>
1)创建XMLHttpRequest对象;
(2)指定处理函数:给XMLHttpRequest对象的onreadystatechange属性赋值,指示哪个函数处理XMLHttpRequest对象状态的改变;
(3)指定请求的属性。open方法的三个参数分别指定将发送请求的方法(通常是GET或POST)、目标资源URL串以及是否异步请求;
(4)发送请求到服务器:send方法把请求传送到指定的目标资源,send方法接受一个参数,通常是一个串或DOM对象。这个参数会作为请求体的一部分传送到目标URL。向send方法提供参数时,要确保open中指定的方法是POST。如果没有数据要作为请求体的一部分发送,则使用null
5.传统的WebFrom和Ajax方式实现区别对比:
传统的Web应用允许客户端填写表单,当提交表单时就向Web服务器发送一个请求。服务器接收并传递传来的表单,然后送回一个新的网页,但这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML码往往是相同的。由于每次应用的沟通都需要向服务器发送请求,应用的响应时间久依赖于服务器的响应时间。这导致了用户界面的响应比本机应用慢得多。
- XML
- XML语法要求:
了解了XML文档的基本结构后,接下来还需要熟悉创建XML文档的语法要求。创建XML文档的语法要求如下:
þ (1)XML文档必须有一个顶层元素,其他元素必须嵌入在顶层元素中。
(2)元素嵌套要正确,不允许元素间相互重叠或跨越。
þ (3)每一个元素必须同时拥有起始标记和结束标记。这点与HTML不同,XML不允许忽略结束标记。
þ (4)起始标记中的元素类型名必须与相应结束标记中的名称完全匹配。
þ (5)XML元素类型名区分大小写,而且开始和结束标记必须准确匹配。例如,分别定义起始标记<Title>、结束标记</title>,由于起始标记的类型名与结束标记的类型名不匹配,说明元素是非法的。
þ (6)元素类型名称中可以包含字母、数字以及其他字母元素类型,也可以使用非英文字符,但不能以数字或符号“-”开头,同时也不能包含空格符和冒号“:”。
þ (7)元素可以包含属性,但属性值必须用单引号或双引号括起来(前后两个引号必须一致,不能一个是单引号,一个是双引号)。在一个元素节点中,属性名不能重复。
2.XML中的注释
XML文档的注释以字符串“<!--”开始,以字符串“-->”结束。由于XML解析器将忽略注释中的所有内容,这样便可以在XML文档中添加注释说明文档的用途,或者临时注释掉没有准备好的文档部分。
3.特殊字符的处理方式:
在XML文档中,有些字符会被XML解析器当作标记进行处理。如果希望把这些字符作为普通字符处理,就需要使用实体引用或CDATA段。
(1)使用实体引用。为了避免系统将字符串中的特殊字符当成XML保留字符,XML提供了一些实体引用。在字符串中需要使用这些特殊字符时,就可以使用这些实体引用。
- 使用CDATA段。CDATA段是一种用来包含文本的方法,其内部的所有内容都会被XML解析器当作普通文本,所以任何符号都不会被认为是标记符。在CDATA标记下,实体引用将失去作用。"<![CDATA[" 开始,由 "]]>" 结束
- WebService WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序.XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。
3.1、XML+XSD
WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的 返回结果是什么)。XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关 的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。
XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这 些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就 是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准,所 有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。
3.2、SOAP
WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明 HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。
SOAP协议 = HTTP协议 + XML数据格式
SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比 喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。
3.3、WSDL
好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方 法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受 的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都 能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的 Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。
WSDL 文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。 WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。
- EJB
- J2EE和EJB概念:
EJB就是一组用Java语言编写的包含字段和方法的代码体,而这些代码的核心任务就是实现纯粹的业务逻辑。J2EE是Sun公司提出的一种多层次的分步式的软件体系结构 - J2EE的四层应用结构以及各层功能:
一个多层次的J2EE应用结构包含如下4个层次
客户层(Client) Web层(Web) 业务层(Business) 企业信息系统层(EIS)
业务层的业务逻辑由EJB组件来显示
客户层:
运行在客户机器上。客户层可以是普通的应用程序,直接访问业务层的EJB组件;也可以是浏览器程序,访问Web层的JSP和Servlet组件。
Web层:
运行在J2EE服务器上,Web层的组件主要包括JSP和Servlet,用户动态生成HTML页面。Web层组件会访问业务层的EJB组件。
业务层:
运行在J2EE服务器上,业务层的主要组件为EJB,它们负责实现业务逻辑。
EIS层(Enterprice Information System):
运行在数据库服务器上,用于存储业务数据。
客户层、J2EE服务器层、数据库服务器层,也称三层架构
①EJB(企业JavaBean)在EJB容器中运行,运行时环境由容器建立。
当完成EJB的开发后,需要将EJB组件部署到EJB容器中。只有正确部署后,EJB容器才能向客户提供业务服务。
②EJB对象由容器(JBoss)提供,因此不能在程序中使用创建实例的方法来生成 EJB对象,而需要要采用Java的JNDI(Java Naming and Directory Interface,Java命名和目录接口)来获得EJB对象的引用。在javax.naming包中提供了Context接口,该接口提供了通过名字检索对象的方法Object lookup(String name) 返回与指定的名字绑定的对象。
- EJB的分类:(就把EJB理解成处理逻辑的中间件)
三中不同类型的EJB
1.会话Bean(Session Bean)实现会话中的业务逻辑
2.实体Bean(Entity Bean)实现一个业务实体
3.消息驱动Bean(Message-Driven Bean)作为JMS(Java Message Service)Java消息服务的API的监听者,并且异步处理其中的消息。
- 开发EJB的步骤:
开发EJB3.0组件的步骤,编写业务接口代码、Bean类,编译代码,提供部署描述符(不是必须),创建Ejb.jar文件,将Ejb-jar文件部署到容器中,编写并执行客户应用
- 一个具体的EJB的例子:
- Servlet
1.Servlet与Jsp的不同之处:
Servlet是使用Java Servlet接口(API)运行在Web应用服务器上Java程序,其功能十分强大,它不但可以处理Http请求中的业务逻辑,而且还可以输出HTML代码来显示指定页面。而JSP是一种在Servlet规范之上的动态网页技术,在JSP页面之中,同样可以编写业务逻辑处理Http请求,也可以通过HTML代码来编辑页面,在实现功能上,Servlet与JSP貌似相同,实质存在一定的区别,表现在以下方面:
þ 1、角色不同2、编程方法不同3、Servlet需要编译后运行4、速度不同
- Servlet的技术要点:
Servlet使用Java语言编写,它不仅继承了Java语言中的优点,而且Servlet还对Web的相关应用进行了封装,同时Servlet容器还提供了对应用的相关扩展,无论是在功能、性能、安全等方面都十分优秀,其技术特点表现在以下方面。
1、功能强大2、可移植3、性能高效4、安全性高5、可扩展
- Servlet在web.xml中的配置:
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.njust.Servlet.myServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/servlet/myServlet</url-pattern>
</servlet-mapping>
- 过滤器与监听 ①Servlet过滤器与Servlet十分相似,但它具有拦截客户端(浏览器)请求的功能,Servlet过滤器可以改变请求中的内容,来满足实际开发中的需要。
②Servlet监听器的功能比较接近Java的GUI程序的监听器,可以监听由于Web应用中状态改变而引起的Servlet容器产生的相应事件,然后接受并处理这些事件。
Web服务技术与应用相关推荐
- Web服务技术协议:REST与SOAP
Web服务技术就有SOAP(Simple Object Access Protocol,简单对象访问协议)和REST(Representational State Transfer,表示性状态转移) ...
- [GIS原理] 资源共享-SIG|服务篇(服务型GIS、SOA架构、Web Services技术、GIS服务、地理空间服务聚合、地理空间服务网络)
文章目录 资源共享 空间信息栅格SIG 服务篇 资源共享 空间信息栅格SIG 说明 信息格网 [what]Information Grid ①利用现有的网络基础设施.协议规范.Web和数据库技术,为用 ...
- Web 服务编程,REST 与 SOAP
2019独角兽企业重金招聘Python工程师标准>>> 为什么选择 REST 李 三红, 高级软件工程师, IBM 简介: REST 架构风格是一种全新的针对 Web 应用的开发风格 ...
- Web服务集成CRM的应用
本文讲的是Web服务集成CRM的应用,[IT168 资讯]近年来,很多企业应用集成(EAI)供应商都提供专有的适配器和集成服务器工具集,试图解决企业应用集成过程中面临的挑战.虽然EAI解决方案很有效, ...
- 用WSE在Web服务中验证用户身份
一.Web服务安全与WS-Security 毫无疑问,SOAP和XML Web服务在交互操作和标准上已经完全改变了电子商务领域的格局. 然而直到最近,在Web服务技术领域仍然存在着一些缺陷,那就是处理 ...
- jboss4 java_JBoss核心Java Web服务
jboss4 java 这篇博客文章涉及Web服务. 好吧,更确切地说,它处理JBoss上的"普通" java Web服务. 这意味着我们将创建一个没有任何其他框架(例如CXF,A ...
- JBoss核心Java Web服务
这篇博客文章涉及Web服务. 好吧,更确切地说,它处理JBoss上的"普通" java Web服务. 这意味着我们将创建一个没有任何其他框架(如CXF,Axis等)的Web服务. ...
- 使用 Ajax 调用 SOAP Web 服务,第 1 部分: 构建 Web 服务客户机
James Snell (jasnell@us.ibm.com), 软件工程师,新兴技术, IBM James Snell 是 IBM 的 software group 中的 emerging Int ...
- 六、Web服务体系结构
一.Web服务概述 什么是Web服务? Web服务作为一种新兴的Web应用模式,是一种崭新的分布式计算模型,是Web上数据和信息集成的有效机制. Web服务就像Web_上的构件编程,开发人员通过调用W ...
最新文章
- c语言删除偶数号节点,第十二周作业
- 也说c#获取windows特殊路径
- mysql匹配数据结构_MySQL索引背后的数据结构及原理
- 【神经网络与深度学习】Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning...
- SQL Server将一列的多行内容拼接成一行的实现方法
- Emacs代码补全之ycmd
- HLW8012电能测量芯片使用记录
- 网络服务器ssh、ftp、telnet、samba配置总结
- java+毕业设计+进销存管理系统+源码+论文.rar
- span超过容器自动换行
- 传说中的美丽 真实的仙境——三亚游记
- python 优雅退出_Python学习教程:Python 使用 backoff 更优雅的实现轮询
- pod install 时遇到 Automatically assigning platform `iOS` with version `11.0` on target XXX......
- (亚马逊澳大利亚)手机充电器 AS/NZS 4417.1 安全标准检测 电池产品UL2054
- vue3获取当前日期和时间
- HDU-1425 排序
- 工业4.0革命袭来 传统工人会被机器人代替吗?
- 人工神经网络结构图高清,人工神经网络结构图解
- 不只是包子铺!巴比食品:重回高增长赛道,做中式面点第一品牌
- failed to connect to ‘192.168.199.143:5555‘: Connection refused