JSP篇

一、JSP中一共预先定义了9个这样的对象:

分别为:request、response、session、application、out、pagecontext、config、page、exception

1、request对象javax.servlet.http.HttpServletRequest

request对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对 象的作用域为一次请求。

2、response对象 javax.servlet.http.HttpServletResponse

response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。

具有动态响应contentType属性,当一个用户访问一个JSP页面时,如果该页面用page指令设置页面的contentType属性是text/html,那么JSP引擎将按照这个属性值做出反应。

如果要动态改变这换个属性值来响应客户,就需要使用Response对象的setContentType(String s)方法来改变contentType的属性值。response.setContentType(String s);参数s可取text/html,application/x-msexcel,application/msword等。

在某些情况下,当响应客户时,需要将客户重新引导至另一个页面,可以使用Response的sendRedirect(URL)方法实现客户的重定向。

例如response.sendRedirect(index.jsp);

3、session对象 javax.servlet.http.HttpSession

Session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要Session对象。

当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个Session对象,同时分配一个String类型的ID号,JSP引擎同时将这换个ID号发送到客户端,存放在Cookie中,这样Session对象,直到客户关闭浏览器后,服务器端该客户的Session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的Session对象。

session对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”, session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

4、application对象javax.servlet.ServletContext

application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

服务器启动后就产生了这个Application对象,当客户再所访问的网站的各个页面之间浏览时,这个Application对象都是同一个,直到服务器关闭。但是与Session对象不同的时,所有客户的Application对象都时同一个,即所有客户共享这个内置的Application对象。

setAttribute(String key,Object obj):将参数Object指定的对象obj添加到Application对象中,并为添加的对象指定一个索引关键字。

getAttribute(String key):获取Application对象中含有关键字的对象。

5、out 对象javax.servlet.jsp.jspWriter

out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

Out对象时一个输出流,用来向客户端输出数据。Out对象用于各种数据的输出。其常用方法如下。

out.print():输出各种类型数据。

out.newLine():输出一个换行符。

out.close():关闭流。

6、pageContext 对象javax.servlet.jsp.PageContext

pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。

pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

7、config 对象javax.servlet.ServletConfig

config 对象的主要作用是取得服务器的配置信息。通过pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

8、exception 对象java.lang.Throwable

exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。

9、page 对象代表JSP本身,只有在JSP页面内才是合法的。page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的this指针。

二、JSP四种范围对象的作用域:

作用域范围从小到大顺序:

pageContext----request----session----application

pageContext:

作用域仅限于当前页面对象,可以近似于理解为java的this对象,离开当前JSP页面(无论是redirect还是forward),则pageContext中的所有属性值就会丢失。

request:

作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。如果通过redirect方式进行页面跳转,由于redirect相当于重新发出的请求,此种场景下,request中的属性值会丢失。

session:

session的作用域是在一个会话的生命周期内,会话失效,则session中的数据也随之丢失。

application:

作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。Application不仅可以用于俩个JSP页面之间共享数据,还可以用于Servlet和JSP之间共享数据。可以把application理解成一个Map对象,任何JSP,Servlet都可以把某个变量放入application中保存,并为之指定一个属性名,而该应用里的其他的JSP,Servlet就可以根据该属性名来得到这个变量。

三、jsp静态引入<%@include%>动态引入<jsp:include>区别:

<%@include%>:

页面请求之前预编译,所有代码包含进来之后,一起进行处理,把所有代码合在一起,编译成一个servlet

<jsp:include>:

所有代码分别处理,在页面被请求的时候才编译,被编译成多个servlet,页面语法相对独立,处理完成之后再将代码的显示结果(处理结果)组合进来。同时可以用param来传参。

静态导入是将被导入页面的代码完全融入,俩个页面融合成一个整体的Servlet;而动态导入则在Servlet中使用include方法引入被导入页面的内容。静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则会失去作用,只是插入被导入页面的body内容,动态的分导还可以增加额外的参数。静态包含还会将被包含的页面的编译指令也包含进来,如果俩个页面的编译指令发生冲突,那么页面将会报错。

四、redirect和forward的区别:

forword是一次请求,地址的URL没有变化,请求的参数和属性是不会丢的

redirect重新发送一次新请求,地址的URL会变,请求的参数和属性全部会丢失

1.从地址栏显示来说

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

2.从数据共享来说

forward:转发页面和转发到的页面可以共享request里面的数据.redirect:不能共享数据.

3.从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等

4.从效率来说forward:高.redirect:低.

    实际上,forword动作指令和include动作指令十分相似(他们的语法就很相似),它们采用方法来引入目标页面,通过查看JSP页面所生成Servlet代码可以得出:forword指令使用_jspx_page_context的forword()方法来引入目标页面,而include指令则使用通过JspRuntimeLibrary的include()方法来引入目标页面。区别在于:执行forword时,被forword的页面将完全代替原有页面;而执行include时,被include的页面只是插入原有页面。简而言之,froword拿目标页面代替原有页面,而include则拿目标页面插入原有页面。

五、JSP中声明脚本,普通脚本,表达式脚步分别用什么标签表示

1.表达式

表达式: 是对数据的表示,系统将其作为一个值进行计算。

语法:<%= expression %>

例如:<%= user.getName()%>

表达式的本质:在将JSP页面转换成Servlet后,使用out.print()将表达式的值输出。这样如果user.getName()的返回值是"liky", 那么实际上在servlet中就将转换成out.print("liky");
因此这里要注意以下两点:

1) 如果表达式是调用一个方法,那么这个方法必须要有返回值,而不应是void,也就是说void getName()这样的方法是不能被调用的。

2) 在方法的后面不能有分号;例如<%=getName();%>这是不允许的。

2. 脚本

脚本:就是在<% %>里嵌入Java代码,这里的Java代码和我们一般的Java代码没有什么区别,所以每一条语句同样要以";"结束,这和表达式是不相同的
语法:<% code %>
脚本的本质:就是将代码插入到Servlet的service方法中。
3. 声明

声明:就是允许用户定义Servlet中的变量、方法
语法:<%! code %> 例如:<%! String getName() {return name;%}>
声明的本质:其实就是将声明的变量加入到Servlet类(在任何方法之外),方法就成了Servlet的方法。

六、声明脚本中定义的变量和普通脚本中定义的变量有何区别,使用时要注意什么

JSP声明中定义的变量是全局的。脚本程序中定义的变量是局部的。

七、JSP的注释

   <%-- 注释的内容 --%>  jsp的注释不会显示在客户端

   <!—注释的内容 -->    Html的注释会显示在客户端

八、JSP的指令分为:

   3个编译指令: page   include   taglib

   7个动作指令:

Jsp:forword : 执行页面转向,将请求的处理转发到下一个页面。

     Jsp:param  :  用于传递参数,必须与其他支持参数的标签一起使用。

     Jsp:include ,forword ,plugin.

     Jsp:include:用于动态引入一个JSP页面

     Jsp:plugin : 用于下载JavaBean或Applet

      Jsp:useBean :创建一个JavaBean的实例

     Jsp:setProperty :设置JavaBean实例的属性值

      Jsp:getProperty: 输出JavaBean实例的属性值。

九、对于客户端的请求而言web服务器大致需要完成如下几个步骤

     1、启动单独的线程

     2、使用I/O流读取用户请求的二进制数据流

     3、从请求数据中解析参数

     4、处理用户请求

     5、生成相应数据

     6、使用I/O流向客户端发送请求数据(其中 1,2,6是通用的,要用web服务器来完成)

十、cookie和session最大的区别在于:

cookie是把积分卡发给顾客,上面记录了顾客所有的消费信息。Session则是把只有卡号(session id)的积分卡发给顾客,自家记录了顾客所有的消费信息。Cookie是保存在客户端的;session是保存在服务器端,而session id则是保存在客户端,通常也是一个cookie小文件,由于这个小文件除了session id(好比卡号)外什么也没有,因此比cookie安全多了。

posted @ 2016-12-27 09:16  静醉丶那份默念  阅读(71)  评论(0)    收藏  举报