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对象具有请求域,即完成客户端的请求之前,该对象一直有效。常用方法如下:

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

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

    b. response对象

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

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

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

    c. session对象

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

返回值类型方法说明
longgetCreateTime()返回session创建时间
StringgetId()返回session创建时jsp引擎为它设的唯一ID号
Object setAttribute(String name,Object value) 使用指定名称将对象绑定到此会话
ObjectgetAttribute(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)使用指定名称将对象绑定到此会话
ObjectgetAttribute(String name)返回与此会话中指定名称绑定在一起的对象,如果没有对象
绑定在该名称下,则返回null
String getRealPath() 返回资源在服务器上的绝对路径

    e. out对象

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

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

    out对象常用的方法:

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

    f. page对象

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

    g. pageContext对象

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

返回值类型方法说明
JspWritergetOut()返回当前客户端响应被使用的JspWriter流(out)
HttpSessiongetSession()返回当前页中的HttpSession对象(session)
ObjectgetPage()返回当前页的Object对象(page)
ServletRequestgetRequest()返回当前页的ServletRequest对象(request)
ServletResponsegetRespnese()返回当前页的ServletResponse对象(response)
voidsetAttribute(String name,Object attribute) 设置属性及属性值
ObjectgetAttribute(String name,int scope) 在指定范围内取属性的值

    h. Config对象

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

    i.  Exception对象

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

  
  








转载于:https://www.cnblogs.com/shouming/articles/7102923.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值