JSP相关知识二

    学习JSP之前,首先要了解一个JSP页面到底有哪些内容构成?从一个页面上看,它由指令、表达式、小脚本、声明、注释,静态内容六部分构成,其中表达式、小脚本、声明和注释都是可以选择。接下来就分别说一下这六部分:

    1. 指令

    在JSP页面中指令的书写形式为<%@指令名 属性="属性值"%>,一共有三种指令:

    Page指令:通常位于jsp页面的顶端,同一个页面可以有多个page指令,书写形式为<%@page 属性1="属性值" 属性2="属性值1,属性值2"...属性n="属性值n"%>,属性值有:language,指定jsp页面使用的脚本语言,默认值为java,该属性不需要写也行;import,通过该属性来引用脚本语言中使用到的类文件,无默认值,下面给出的包在JSP编译时已经导入了,所以就不需要再指明了:java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*;contentType,用来指定jsp页面所采用的编码格式及文件类型,默认值为text/html,ISO-8859-1;pageEncoding:默认值为ISO-8859-1;

    特别说明:pageEncoding是jsp文件本身的编码,contentType的charset是指服务器发给客户端时的内容编码,contentType更常用。

    include指令:将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句,采用指令形式的包含叫做静态包含。语法格式:<%@ include file="绝对路径或相对路径" %>。
    taglib指令:引用自定义的标签库;使用标签库定义新的自定义标签,在JSP页面中启用定制行为。

    2. 注释

    JSP注释也有三种:a. HTML注释,书写为 <!--注释-->,这种注释在客户端可见的(通过查看源代码可以看到);b. JSP注释,书写为<%--注释--%>,这种注释在客户端不可见,又叫做服务器端注释;c. JSP脚本注释://单行注释   /**/多行注释。

    3. 小脚本

    在JSP页面可执行的java代码,书写形式为<%java代码%>。

    4. 声明

    在jsp中定义变量或方法,书写形式为<%! java代码 %>,很少使用它来定义变量,原因是Servlet是一个单实例对象,用声明语句定义的变量只有一个,每个用户都可访问到它,在多用户访问时会造成不可预料的错误。

    5. 表达式

    在jsp页面中执行的表达式,<%=表达式%>表达式不以分号结尾,以分号结尾会报错,使用较少,后面会用EL表达式来替代。

    6. 静态内容

    JSP页面中的静态内容指的是JSP页面在建立时包含的html代码。

    了解JSP页面的构成后,接下来说一下JSP页面的生命周期:

    了解了JSP的生命周期后,接下来看一下JSP中的九大内置对象。什么是内置对象呢?JSP内置对象就是Web容器创建的一组对象,不使用new关键字就可以实现内置对象的使用。

    在JSP中有九大内置对象:out,request,response,session,application,page,pageContext,exception,config,其中常用的有request,response,session,application,out。接下来将详细说明常用的内置对象,简单了解下非常用内置对象。

    a. request对象

    客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。常用方法如下:

返回值类型 方法 说明
String getParameter(String name) 返回name指定参数的参数值
String[] getParameterValues(String name)  返回包含参数name的所有值得数组
void setAttribute(String,Object) 存储此请求中属性
Object  getAttribute(String name)  返回指定属性的属性值
  getRequsetDispatcher() 实现服务器端的请求转发
String  getContentType()  得到请求体的MIME类型
String getProtocol() 返回请求用的协议类型及版本号
String  getServerName() 返回接受请求的服务器主机名
String getRemoteAddr() 请求客户端的IP地址

    在使用request内置对象时,可能会出现中文乱码问题,可以这么解决:<%requset.setCharacterEncoding("utf-8")%>,但是此方法解决不了url传递中文产生的乱码问题,要想解决,还需修改Tomcat的配置文件,URIEncoding="utf-8"。

    b. response对象

    response对象包含了响应客户请求的有关信息,但在jsp中很少直接用到它(在实现下载时会用到)。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次的访问有效,其他页面的response对象对当前页面无效。常用方法如下:

返回值类型 方法 说明
String getCharacterEncoding()  返回响应用的是何种字符编码
void setContentType(String type)   设置响应的MIME类型
PrintWriter getWriter()  返回可以向客户端输出字符的一个对象
  sendRedirect(java.lang.String location)  重新定向客户端的请求

    Tips:printwriter对象打印输出 总是先于out内置对象打印输出。

    c. session对象

    session表示客户端与服务器的一次会话;Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览整个网站所花费的时间;session实际上是一个特定的时间概念。session保存在服务器的内存当中。session对象是一个jsp内置对象;session对象在第一个jsp页面被装载时自动创建,完成会话期管理;从一个客户打开浏览器并连接到服务器开始,到客户端浏览器关闭,被称为一个会话;当一个客户访问一个服务器时,可能会在服务器几个界面之间切换,服务器应当通过某种方法知道这是一个客户,就需要session对象;session对象是HttpSession类的实例。session对象常用的方法:

返回值类型 方法 说明
long getCreateTime() 返回session创建时间
String getId() 返回session创建时jsp引擎为它设的唯一ID号
Object  setAttribute(String name,Object value)  使用指定名称将对象绑定到此会话
Object getAttribute(String name) 返回与此会话中的指定名称绑定在一起的对象,如
果没有对象绑定在该名称下,则返回null
String[] getValueNames() 返回一个包含此session中所有可用属性的数组
int  getMaxInactiveInterval() 返回两次请求间隔多长时间此session被取消(单位秒)

    Session的生命周期

    Session的生命周期分为三个阶段:创建,活动,销毁

    创建阶段:当客户端第一次访问某个jsp或者Servlet时候,服务器会为当前会话创建一个SessionId,每次客户端向服务端发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验。

    活动阶段:某次会话当中通过超链接打开的新页面属于同一次会话。只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话;除非本次会话的所有页面都关闭后再重新访问某个jsp或者Servlet将会创建新的会话。

   Warning当关闭浏览器后,原有会话还存在,旧的sessionId仍然存在于服务端(除非session超时才会销毁),只不过再也没有客户端会携带它然后交与服务端校验。

    销毁阶段:session销毁有三种方式:1. 调用了session.invalidate()方法;2. session过期(超时);3. 服务器重新启动,服务器重启后所有session销毁。实际上这里有个

session持久化问题,持久化为FALSE的情况下,Tomcat关闭时,触发Session destroy事件,否则只有等到设置的超时时间才触发。设置持久化的位置在$TOMCAT_HOME$/conf/context.xml这个文件中有个注释<!-- <Manager pathname="" /> --> 默认为注释掉的,即配置为持久化,此时重启服务器不销毁。如果取消注释也就是取消持久化,重启服务器就会销毁session。

    给session设置过期时间:
    Tomcat默认session超时时间为30分钟;设置session超时有两种方式:1. session.setMaxInactiveInterval(时间);单位是秒;2. 在web.xml中配置

1 <session-config>
2 <session-timeout>
3 10(单位是分钟)
4 </session-timeout>
5 </session-config>
View Code

    d. application对象

    application对象实现了用户间数据的共享,可存放全局变量;application开始于服务器的启动,终止于服务器的关闭,是存活范围最大的对象;在整个服务器运行过程中,application对象只有一个。在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作;在任何地方对application对象属性的操作,都将影响到其他用户对此的访问;服务器的启动和关闭决定了application对象的生命;application对象是ServletContext类的实例。

返回值类型 方法 说明
void  setAttribute(String name,Object value) 使用指定名称将对象绑定到此会话
Object getAttribute(String name) 返回与此会话中指定名称绑定在一起的对象,如果没有对象
绑定在该名称下,则返回null
String  getRealPath()  返回资源在服务器上的绝对路径

    e. out对象

    out对象是jspWriter类的实例,是向客户端输出内容常用的对象。out对象内部实现了一个缓冲对象,用以实现数据的缓冲,解决缓冲区两边的速度不对等问题。

    Tips:out.println()和<br>两个都是换行,一个是源代码的换行,一个是页面元素的换行

    out对象常用的方法:

返回值类型 方法 说明
void println() 向客户端打印字符串
void clear() 清除缓冲区的内容,如果在flush之后调用会抛出异常
void clearBuffer()  清除缓冲区的内容,如果在flush之后调用不会抛出异常
void flush() 将缓冲区内容输出到客户端
void close() 关闭输出流

    f. page对象

    page对象就是指向当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例。

    g. pageContext对象

    pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,pageContext对象可以访问到本页所在的session,也可以取本页面所在的application的某一属性值,pageContext对象相当于页面中所有功能的集大成者,pageContext对象的本类名也叫pageContext。pageContext对象常用方法:

返回值类型 方法 说明
JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out)
HttpSession getSession() 返回当前页中的HttpSession对象(session)
Object getPage() 返回当前页的Object对象(page)
ServletRequest getRequest() 返回当前页的ServletRequest对象(request)
ServletResponse getRespnese() 返回当前页的ServletResponse对象(response)
void setAttribute(String name,Object attribute)  设置属性及属性值
Object getAttribute(String name,int scope)  在指定范围内取属性的值

    h. Config对象

    config对象是在一个Servlet初始化时,jsp引擎向它传递消息用的,此消息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)。

    i.  Exception对象

    exception对象是一个异常对象,当一个页面在运行过程中发生了一个异常,就产生这个对象。如果一个jsp页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象。

  
  








posted @ 2017-07-03 16:29  守明  阅读(132)  评论(0编辑  收藏  举报