Java Web
页面请求的工作流程
1) 用户通过浏览器输入链接地址来请求所需的资源。
2) 浏览器接受用户的请求,并把该请求组装成指定的格式发送给服务器端,客户端与服务器之间通过Http来完成具体的交互。
其中请求的数据流包括HTTP[TyperText Transfer Protocol,超文本传输协议,建立在TCP/IP基础上的一个协议,主要用来实
现客户端与服务器之间的通信]、请求方法(GET或者POST)、请求的网址(URL)以及请求的一些参数信息。
3) 服务器接收到客户端发送来的请求,并查找用户所需要的资源。
4) 服务器查找到用户请求的资源后,把该资源返回给客户端。
5) 服务器通过把响应信息组装成特定的消息格式后返回给客户端,这个过程通过HTTP来完成。响应的数据流主要包含状态编
码(代表请求成功或失败),Content-type(例如text、picture、HTML等),响应消息的内容(图片或HTML格式的内容).
6) 浏览器对HTML进行解析,并把响应结果展现给用户.
HTTP中GET和POST方法的区别
HTTP请求的方法有很多种类,例如GET,POST,HEAD,TRACE,OPTIONS等,但是GET和POST是两个最常用的方法。
GET 方法的作用主要用来获取服务器端资源信息,就如同数据库中查询操作一样,不会影响到资源自身的状态。
而POST方法提供了比GET方法更强大的功能,它除了能够从服务器端获取资源外,同时还可以向服务器上传数据。
虽然GET方法主要用来从服务器上获取数据,也可以向服务器上传数据,但是一般不建议采用GET方法来向服务器上传数据,而
是推荐POST方法实现该功能,有如下两个原因:
1) 采用GET方法向服务器上传数据时,一般将数据添加到url后面,并且二者用"?"连接,各个变量之间用"&"连接。由于对URL
的长度存在限制,因此采用这种方法能上传的数据量非常小,通常在1024Byte左右。而POST方法是通过HTTP请求的附件进行的,
传送的数据量更大一些,一般默认为不受限制的。
2) 由于GET方法上传的数据是添加在URL中的,因此上传的数据被彻底"暴漏"出来了,本身存在安全隐患,尤其是当用户需要向
服务器提交一些敏感信息时。而POST方法向服务器提交的内容在URL中并没有明文显示,对用户都是不可见的,安全性更好一点
与其他生成动态页面的技术相比,servlet的优点;
1、较好的可移植性;
2、执行效率高;
3、功能强大;
4、使用方便;
5、可扩展性强。
Servlet处理客户端请求有如下几个步骤;
1) 用户通过单机一个链接来向servlet发起请求;
2) WEB服务器接收到该请求后,会把请求交给相应的容器来处理,当容器发现这是对servlet发起的请求后,容器此时会创建两
个对象:HttpServletResponse,HttpServletRequest。
3) 容器可以根据请求消息中的url消息找到对应的servlet,然后针对该请求创建一个单独的线程,同时把第2)步创建的两个对
象以参数的形式传递到新创建的线程中。
4) 容器调用servlet的service()方法来完成客户请求的响应,service()方法会调用doPost()或doGet()方法来完成具体的响应
任务,同时把生成的动态页面返回给容器;
5) 容器把响应消息组装成HTTP格式返回给客户端。此时,这个线程运行结束,同时删除第2)步创建的两个对象。
servlet和CGI的区别
相比较于CGI,servlet处于服务器进程之中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其
实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率不如servlet.
jsp与Servle的不同点为:
1) servlet的实现方式是在java中嵌入HTML代码,编写和修改HTML非常不方便,所以它就比较适合做流程控制、业务处理;而
JSP的实现方式为在HTML中嵌入JAVA代码,比较适合页面的显示。
2) servlet中没有内置对象,JSP中内置对象都是必须通过HttpServletRequest对象、HttpServletResponse对象以及
HttpServlet对象得到。
servlet中forward和redirect的区别
servlet中主要有两种实现跳转的方式:forward方式和redirect方式;
forward是服务器内部的重定向,服务器直接访问目标地址的url,把那个url的响应的内容读取过来,而客户端不知道,因此在
客户端浏览器中不会显示跳转后的地址,还是原来的地址。由于在整个定向的过程中用的是同一个request,因此forward会将
request的信息带到被定向的jsp或servlet中使用。
redirect则是客户端的重定向,是完全的跳转,即客户端浏览器会获取到跳转后的地址,然后重新发送请求,因此浏览器中会显
示跳转后的地址。同时,由于这种方式比forward方式多了一次网络请求,因此其效率要低于forward方式,需要注意的是,客户
端的重定向可以通过设置特定的http头或写javascript脚本实现。
百度知道回答:
1,从地址显示来说
forward是服务器请求资源,服务器直接访问目标地址URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器
根本不知道服务器发送的内容从哪里来,所以它的地址栏还是原来的地址.
redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL.
2,从数据共享来说
forward:转发页面和转发到页面的可以共享request里面的数据.
redirect:不能共享数据.
3,从运用地方来说
forward:一般用于用户登录的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其他的网站等.
4,从效率来说
forward:高
redirect:低
鉴于以上区别,一般当forward方式可以满足需求时,尽可能地使用forward方式。但是在有些情况下,例如,需要跳转到一个其
他服务器上的资源,则必须使用redirect方式。
引申:filter的作用是什么?主要实现什么方法?
filter使用户可以改变一个request并且修改一个response。filter不是一个servlet,它不能产生一个response,但它能够在一个
request到达servlet之前处理request,也可以在离开servlet时处理response,filter其实是一个"servlet chaining"(servlet链)
filter的这个作用:
1) 在servlet被调用之前截获;
2) 在servlet被调用之前检查servlet request;
3) 根据需要修改request头和request数据;
4) 根据需要修改response头和response数据;
5) 在servlet被调用之后截获。
JSP的内置对象
共有9个内置对象:
request(请求对象):客户端请求,此请求包含来自get/post请求的参数。客户端的请求信息被封装在request对象中,通过它
能了解到客户的需求,然后做出响应,因此request对象是用来获取请求参数的非常重要途径。它是HttpServletRequest类的
实例;
response(响应对象):用来表示服务器端对客户端的响应,将web服务器处理后的结果返回给客户端。但在jsp中很少直接使用
到它。它是HttpServletResponse类的实例;
pageContext(页面上下文对象):提供了对JSP页面的所有对象及命名空间的访问,也就是说,用它可以访问到本页面中的所有
其他对象。
session(会话对象):用来表示客户端与服务器的一次会话。从客户端与web服务器建立连接的时候会话开始,直到关闭浏览器
时结束会话。它是 HttpSession类的实例。
application(应用程序对象): 代表jsp所属的WEB应用本身。application对象可存放全部变量,因此可以实现用户间的数据
共享。它的生命周期与服务器的生命周期一致,也就是说,服务器启动后这个对象即被创建出来,直到服务器停止后这个对
象的对象的生命周期才结束。在任何地方,对此对象属性的操作都将影响到其他用户对此的当问。它是servletContext类的
实例。
out(输出对象):用于在客户端浏览器内输出信息。它是JspWriter类的实例;
config(配置对象):主要作用是取得服务器的配置信息。当一个servlet初始化,容器把某些信息通过config对象传递给
servlet,servlet可以使用这个对象获取所需的配置信息。
page(页面对象):表示当前jsp页面,类似于java中的this指针。它是java.lang.Object类的实例
exception(例外对象):用来表示异常。当一个页面在运行过程中发生了例外,就会产生这个对象。如果JSP需要使用这个对
象,就必须把isErrorPage设为true,否则将无法编译。它是java.lang.Throwable的对象。
request对象主要的方法
request对象就是用来封装用户请求数据的,每当有请求到达服务器时,系统都会创建一个request对象。在服务器进行处理
时可以通过获取request对象的属性来获取用户的请求数据。
JSP有哪些动作?
1) jsp:include.用来在页面被请求时引入一个文件。include指令是在jsp文件被转换成servlet时引入文件,而jsp:include
插入文件的时间是在页面被页面请求时,而且被引用文件不能包含某些jsp代码(例如不能设置http头);
2) jsp:bean.用来寻找或者实例化一个JavaBean. 它使得开发人员既可以发挥java组件重用的优势,同时也避免了损失jsp区
别于servlet的方便性。
3) jsp:setProperty 用来设置已经实例化的Bean对象的属性。
4) jsp:getProperty 用来获取某个JavaBean的属性。
5) jsp:forward 用来把请求转到一个新页面
6) jsp:plugin 用于在浏览器中播放或显示一个对象。使用这个动作能插入所需的特定的浏览器的object或EMBED元素来指定
浏览器运行一个java applet所需的插件。
会话跟踪技术主要有如下4种;
1) page 代表与一个页面相关的对象和属性。一个页面由一个编译好的java servlet类(可以带有任何的include指令,但是
没有include动作)表示。这既包括servlet又包括被编译成servlet的jsp页面。
2) request 代表与web客户端发送的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件。
3) session 代表与某个WEB客户端的一个用户体验相关的对象和属性,一个WEB会话可以也经常会跨越多个客户端请求。
4) application 代表与整个web应用程序相关的对象和属性。这实质上是跨越多个web应用程序,包括多个迎面、请求和会话
的一个全局作用域.
什么是AJAX?
Ajax(异步javaScript与XML)是一个结合了Java技术、xml以及JavaScript的编程技术,其主要目的是在不刷新页面的情况下
通过与服务器进行少量交互来提高页面的交互性,减少响应时间,从而改善用户体验。
AJAX技术是客户端的技术,其核心是javascript对象XMLHttpRequest,该对象是一种支持异步请求的技术,它使得开发人员
可以使用javascript向服务器提出请求并处理响应,而不阻塞用户。
AJAX模式只是通过XMLHttpRequest对象向服务器端提交希望提交的数据,即按需发送。
AJAX的不足
1、浏览器对XMLHttpRequest对象的支持度不够
Internet Explore在5.0及以后的版本才支持XMLHttpRequest对象;
2、破坏浏览器前进、“后退”的正常功能;
3、对搜索引擎的支持的不足;
4、开发和调试工具的缺乏。
AJAX的核心是XMLHttpRequest对象,他是AJAX实现的关键--发送异步请求、接收响应及执行回调都是通过它来完成的。
编写AJAX例子
var xmlHttpReq = null;
if(window.ActiveXObject){//IE5 IE6是以ActiveXObject的方式
xmlHttpReq = new Active XObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){//除IE5 IE6以外的浏览器
xmlHttpReq = new XMLHttpRequest();//实例化一个XMLHttpRequest对象
}
实例化成功后,使用open()方法初始化XMLHttpRequest对象,指定HTTP方法和要使用的服务器URL
xmlHttpReq.open("GET","test.php",true);//调用open()方法采用异步方式。
cookie和session的区别
1) cookie机制采用的是在客户端保持状态的方案,即数据存放在客户的浏览器上,而session机制采用的是在服务器端保持
状态的方案,即数据放在服务器上。
2) cookie安全性不够。由于cookie信息存放在客户端,其他人可以很容易地得到存放在本地的cookie,并进行cookie欺骗;而
session信息存放在服务器端,因此较为安全。
3) cookie性能更高一些。由于session会在一定时间内保存在服务器上,因此当访问量增多时,会降低服务器的性能。
4) 单个cookie保存的数据不能超过4kb,很多浏览器都限制一个站点最多保存20个cookie,而session不存在此问题。
鉴于以上几点区别,一般情况下,将用户登陆信息等重要信息存放在session中,而其他需要保留的信息可以存放在cookie中
页面请求的工作流程
1) 用户通过浏览器输入链接地址来请求所需的资源。
2) 浏览器接受用户的请求,并把该请求组装成指定的格式发送给服务器端,客户端与服务器之间通过Http来完成具体的交互。
其中请求的数据流包括HTTP[TyperText Transfer Protocol,超文本传输协议,建立在TCP/IP基础上的一个协议,主要用来实
现客户端与服务器之间的通信]、请求方法(GET或者POST)、请求的网址(URL)以及请求的一些参数信息。
3) 服务器接收到客户端发送来的请求,并查找用户所需要的资源。
4) 服务器查找到用户请求的资源后,把该资源返回给客户端。
5) 服务器通过把响应信息组装成特定的消息格式后返回给客户端,这个过程通过HTTP来完成。响应的数据流主要包含状态编
码(代表请求成功或失败),Content-type(例如text、picture、HTML等),响应消息的内容(图片或HTML格式的内容).
6) 浏览器对HTML进行解析,并把响应结果展现给用户.
HTTP中GET和POST方法的区别
HTTP请求的方法有很多种类,例如GET,POST,HEAD,TRACE,OPTIONS等,但是GET和POST是两个最常用的方法。
GET 方法的作用主要用来获取服务器端资源信息,就如同数据库中查询操作一样,不会影响到资源自身的状态。
而POST方法提供了比GET方法更强大的功能,它除了能够从服务器端获取资源外,同时还可以向服务器上传数据。
虽然GET方法主要用来从服务器上获取数据,也可以向服务器上传数据,但是一般不建议采用GET方法来向服务器上传数据,而
是推荐POST方法实现该功能,有如下两个原因:
1) 采用GET方法向服务器上传数据时,一般将数据添加到url后面,并且二者用"?"连接,各个变量之间用"&"连接。由于对URL
的长度存在限制,因此采用这种方法能上传的数据量非常小,通常在1024Byte左右。而POST方法是通过HTTP请求的附件进行的,
传送的数据量更大一些,一般默认为不受限制的。
2) 由于GET方法上传的数据是添加在URL中的,因此上传的数据被彻底"暴漏"出来了,本身存在安全隐患,尤其是当用户需要向
服务器提交一些敏感信息时。而POST方法向服务器提交的内容在URL中并没有明文显示,对用户都是不可见的,安全性更好一点
与其他生成动态页面的技术相比,servlet的优点;
1、较好的可移植性;
2、执行效率高;
3、功能强大;
4、使用方便;
5、可扩展性强。
Servlet处理客户端请求有如下几个步骤;
1) 用户通过单机一个链接来向servlet发起请求;
2) WEB服务器接收到该请求后,会把请求交给相应的容器来处理,当容器发现这是对servlet发起的请求后,容器此时会创建两
个对象:HttpServletResponse,HttpServletRequest。
3) 容器可以根据请求消息中的url消息找到对应的servlet,然后针对该请求创建一个单独的线程,同时把第2)步创建的两个对
象以参数的形式传递到新创建的线程中。
4) 容器调用servlet的service()方法来完成客户请求的响应,service()方法会调用doPost()或doGet()方法来完成具体的响应
任务,同时把生成的动态页面返回给容器;
5) 容器把响应消息组装成HTTP格式返回给客户端。此时,这个线程运行结束,同时删除第2)步创建的两个对象。
servlet和CGI的区别
相比较于CGI,servlet处于服务器进程之中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其
实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率不如servlet.
jsp与Servle的不同点为:
1) servlet的实现方式是在java中嵌入HTML代码,编写和修改HTML非常不方便,所以它就比较适合做流程控制、业务处理;而
JSP的实现方式为在HTML中嵌入JAVA代码,比较适合页面的显示。
2) servlet中没有内置对象,JSP中内置对象都是必须通过HttpServletRequest对象、HttpServletResponse对象以及
HttpServlet对象得到。
servlet中forward和redirect的区别
servlet中主要有两种实现跳转的方式:forward方式和redirect方式;
forward是服务器内部的重定向,服务器直接访问目标地址的url,把那个url的响应的内容读取过来,而客户端不知道,因此在
客户端浏览器中不会显示跳转后的地址,还是原来的地址。由于在整个定向的过程中用的是同一个request,因此forward会将
request的信息带到被定向的jsp或servlet中使用。
redirect则是客户端的重定向,是完全的跳转,即客户端浏览器会获取到跳转后的地址,然后重新发送请求,因此浏览器中会显
示跳转后的地址。同时,由于这种方式比forward方式多了一次网络请求,因此其效率要低于forward方式,需要注意的是,客户
端的重定向可以通过设置特定的http头或写javascript脚本实现。
百度知道回答:
1,从地址显示来说
forward是服务器请求资源,服务器直接访问目标地址URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器
根本不知道服务器发送的内容从哪里来,所以它的地址栏还是原来的地址.
redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL.
2,从数据共享来说
forward:转发页面和转发到页面的可以共享request里面的数据.
redirect:不能共享数据.
3,从运用地方来说
forward:一般用于用户登录的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其他的网站等.
4,从效率来说
forward:高
redirect:低
鉴于以上区别,一般当forward方式可以满足需求时,尽可能地使用forward方式。但是在有些情况下,例如,需要跳转到一个其
他服务器上的资源,则必须使用redirect方式。
引申:filter的作用是什么?主要实现什么方法?
filter使用户可以改变一个request并且修改一个response。filter不是一个servlet,它不能产生一个response,但它能够在一个
request到达servlet之前处理request,也可以在离开servlet时处理response,filter其实是一个"servlet chaining"(servlet链)
filter的这个作用:
1) 在servlet被调用之前截获;
2) 在servlet被调用之前检查servlet request;
3) 根据需要修改request头和request数据;
4) 根据需要修改response头和response数据;
5) 在servlet被调用之后截获。
JSP的内置对象
共有9个内置对象:
request(请求对象):客户端请求,此请求包含来自get/post请求的参数。客户端的请求信息被封装在request对象中,通过它
能了解到客户的需求,然后做出响应,因此request对象是用来获取请求参数的非常重要途径。它是HttpServletRequest类的
实例;
response(响应对象):用来表示服务器端对客户端的响应,将web服务器处理后的结果返回给客户端。但在jsp中很少直接使用
到它。它是HttpServletResponse类的实例;
pageContext(页面上下文对象):提供了对JSP页面的所有对象及命名空间的访问,也就是说,用它可以访问到本页面中的所有
其他对象。
session(会话对象):用来表示客户端与服务器的一次会话。从客户端与web服务器建立连接的时候会话开始,直到关闭浏览器
时结束会话。它是 HttpSession类的实例。
application(应用程序对象): 代表jsp所属的WEB应用本身。application对象可存放全部变量,因此可以实现用户间的数据
共享。它的生命周期与服务器的生命周期一致,也就是说,服务器启动后这个对象即被创建出来,直到服务器停止后这个对
象的对象的生命周期才结束。在任何地方,对此对象属性的操作都将影响到其他用户对此的当问。它是servletContext类的
实例。
out(输出对象):用于在客户端浏览器内输出信息。它是JspWriter类的实例;
config(配置对象):主要作用是取得服务器的配置信息。当一个servlet初始化,容器把某些信息通过config对象传递给
servlet,servlet可以使用这个对象获取所需的配置信息。
page(页面对象):表示当前jsp页面,类似于java中的this指针。它是java.lang.Object类的实例
exception(例外对象):用来表示异常。当一个页面在运行过程中发生了例外,就会产生这个对象。如果JSP需要使用这个对
象,就必须把isErrorPage设为true,否则将无法编译。它是java.lang.Throwable的对象。
request对象主要的方法
request对象就是用来封装用户请求数据的,每当有请求到达服务器时,系统都会创建一个request对象。在服务器进行处理
时可以通过获取request对象的属性来获取用户的请求数据。
JSP有哪些动作?
1) jsp:include.用来在页面被请求时引入一个文件。include指令是在jsp文件被转换成servlet时引入文件,而jsp:include
插入文件的时间是在页面被页面请求时,而且被引用文件不能包含某些jsp代码(例如不能设置http头);
2) jsp:bean.用来寻找或者实例化一个JavaBean. 它使得开发人员既可以发挥java组件重用的优势,同时也避免了损失jsp区
别于servlet的方便性。
3) jsp:setProperty 用来设置已经实例化的Bean对象的属性。
4) jsp:getProperty 用来获取某个JavaBean的属性。
5) jsp:forward 用来把请求转到一个新页面
6) jsp:plugin 用于在浏览器中播放或显示一个对象。使用这个动作能插入所需的特定的浏览器的object或EMBED元素来指定
浏览器运行一个java applet所需的插件。
会话跟踪技术主要有如下4种;
1) page 代表与一个页面相关的对象和属性。一个页面由一个编译好的java servlet类(可以带有任何的include指令,但是
没有include动作)表示。这既包括servlet又包括被编译成servlet的jsp页面。
2) request 代表与web客户端发送的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件。
3) session 代表与某个WEB客户端的一个用户体验相关的对象和属性,一个WEB会话可以也经常会跨越多个客户端请求。
4) application 代表与整个web应用程序相关的对象和属性。这实质上是跨越多个web应用程序,包括多个迎面、请求和会话
的一个全局作用域.
什么是AJAX?
Ajax(异步javaScript与XML)是一个结合了Java技术、xml以及JavaScript的编程技术,其主要目的是在不刷新页面的情况下
通过与服务器进行少量交互来提高页面的交互性,减少响应时间,从而改善用户体验。
AJAX技术是客户端的技术,其核心是javascript对象XMLHttpRequest,该对象是一种支持异步请求的技术,它使得开发人员
可以使用javascript向服务器提出请求并处理响应,而不阻塞用户。
AJAX模式只是通过XMLHttpRequest对象向服务器端提交希望提交的数据,即按需发送。
AJAX的不足
1、浏览器对XMLHttpRequest对象的支持度不够
Internet Explore在5.0及以后的版本才支持XMLHttpRequest对象;
2、破坏浏览器前进、“后退”的正常功能;
3、对搜索引擎的支持的不足;
4、开发和调试工具的缺乏。
AJAX的核心是XMLHttpRequest对象,他是AJAX实现的关键--发送异步请求、接收响应及执行回调都是通过它来完成的。
编写AJAX例子
var xmlHttpReq = null;
if(window.ActiveXObject){//IE5 IE6是以ActiveXObject的方式
xmlHttpReq = new Active XObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){//除IE5 IE6以外的浏览器
xmlHttpReq = new XMLHttpRequest();//实例化一个XMLHttpRequest对象
}
实例化成功后,使用open()方法初始化XMLHttpRequest对象,指定HTTP方法和要使用的服务器URL
xmlHttpReq.open("GET","test.php",true);//调用open()方法采用异步方式。
cookie和session的区别
1) cookie机制采用的是在客户端保持状态的方案,即数据存放在客户的浏览器上,而session机制采用的是在服务器端保持
状态的方案,即数据放在服务器上。
2) cookie安全性不够。由于cookie信息存放在客户端,其他人可以很容易地得到存放在本地的cookie,并进行cookie欺骗;而
session信息存放在服务器端,因此较为安全。
3) cookie性能更高一些。由于session会在一定时间内保存在服务器上,因此当访问量增多时,会降低服务器的性能。
4) 单个cookie保存的数据不能超过4kb,很多浏览器都限制一个站点最多保存20个cookie,而session不存在此问题。
鉴于以上几点区别,一般情况下,将用户登陆信息等重要信息存放在session中,而其他需要保留的信息可以存放在cookie中