JSP的3大指令和9大内置对象

3、JSP三大指令

一个jsp页面中可以有0-N个指令的定义。

3.1、page指令

通常位于JSP页面的顶端,同一个页面可以有多个page指令。

语法:<%@ page ....%>

  • pageEncoding和contentType属性:

pageEncoding:它指定当前jsp页面的编码,在服务器要把jsp编译成.java时需要使用pageEncoding;

contentType:表示添加一个响应头Content-Type,等同于

response.setContentType("text/html;charset=utf-8");

如果两个属性只提供一个,那么另一个的默认值为设置的那一个,如果两个属性都没有设置,那么默认为iso-8859-1

  • import属性:导包,可以重复出现
  • errorPage和isErrorPage属性:

errorPage:当前页面如果抛出异常,那么要转发到哪一个页面,由errorPage来指定;

isErrorPage:指定当前页面是否为处理错误的页面,当属性为true时,这个页面会设置状态码为500,而且这个页面可以使用九大内置对象中的exception

配置web.xml文件

  <error-page>

    <error-code>404</error-code>

    <location>/error/error404.jsp</location>

  </error-page>

  <error-page>

    <error-code>500</error-code>

    <location>/error/error500.jsp</location>

  </error-page>

  <error-page>

    <exception-type>java.lang.RuntimeException</exception-type>

    <location>/index.jsp</location>

  </error-page>

  • autoFlush和buffer属性:

autoFlush:指定jsp的输出流缓冲区满时,是否自动刷新,默认为true,如果为false,那么在缓冲区满时抛出异常;

buffer:指定缓冲区大小,默认为8kb,通常不需要修改。

  • isELIgnored属性:是否忽略el表达式,默认值为false,不忽略,即支持。

3.2、include指令

与RequestDispatcher的include()方法的功能相似,将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。

  1. include指令是在jsp编译成java文件时完成的,他们共同生成一个java(就是一个Servlet)文件,然后再生成一个class;
  2. RequestDispatcher的include()是一个方法,包含和被包含的是两个Servlet,即两个.class,他们只是把响应的内容在运行时合并了。
  3. 作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立jsp,而我们只需要处理变化的页面。

7.3、taglib指令

  1. prefix属性:指定标签库在本页面中的前缀,由我们自己起名字;
  2. uri属性:指定标签库的位置

<%@ taglib prefix="s" uri="/struts-tags" %>

<s:out>

3.3、taglib指令

使用标签库定义新的自定义标签,在JSP页面中启动定制行为。

以导入JSTL标签库为例

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

 

4、JSP九大内置对象

 

4.1、JSP内置对象简介

JSP内置对象是web容器创建的一组对象,不用使用new关键字就可以使用的对象。

例如:

<%  out.println(“hello”);   %>

4.2、web程序的请求与响应模式

用户请求:request

服务器响应:response

(以登陆为例讲解)

4.3、out对象

缓冲区:Buffer,所谓缓冲区就是内存的一块区域用来保护临时数据。

out对象是javax.servlet.jsp.JspWriter类的实例,是向客户端输出内容常用的对象。

常用方法:

  • void println() 向客户端打印字符串
  • void clear() 清除缓冲区的内容,如果在flush之后调用会抛出异常
  • void clearBuffer() 清除缓冲区的内容,如果在flush之后调用不会抛出异常
  • void flush() 将缓冲区内容输出到客户端
  • int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0
  • int getRemaining() 返回缓冲区还剩余多少可用
  • boolean isAutoFlush() 返回缓冲区满时,是自动清空还剩抛出异常
  • void close() 关闭输出流

4.4、request对象

request对象是javax.servlet.http.HttpServletRequest类的实例,表示客户端的一次请求,客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。

常用方法:

  • String getParameter(String name) 返回name指定参数的参数值
  • String[] getParameterValues(String name) 返回包含参数name的所有值的数组
  • void setAttribute(String,Object) 存储此请求中的属性
  • object getAttribute(String name) 返回指定属性的属性值
  • String getContentType() 得到请求体的MIME类型
  • String getProtocol() 返回请求用的协议类型及版本号
  • String getServerName() 返回接受请求的服务器主机名
  • void setCharacterEncoding(String) 设置接收客户端请求内容的字符集
  • int getServerPort() 返回服务器接受此请求所用的端口号
  • String getCharacterEncoding() 返回字符编码方式
  • void setCharacterEncoding() 设置请求的字符编码方式
  • int getContentLength() 返回请求体的长度(以字节数)
  • String getRemoteAddr() 返回发送此请求的客户端IP地址
  • String getRealPath(String path) 返回一虚拟路径的真实路径
  • String request.getContextPath() 返回上下文路径

补充:

设置URL传参的字符集问题:打开apache安装目录,conf-->server.xml,找到Connector标签,在该标签内添加URIEncoding="utf-8"属性

4.5、response对象

response对象是javax.servlet.http.HttpServletResponse类的实例,包含了响应客户请求的有关信息,但在JSP中很少直接用到它。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。

常用方法:

  • String getCharacterEncoding() 返回响应用的是何种字符编码
  • void setContentType(String type) 设置响应的MIME类型
  • PrintWriter getWriter() 返回可以向客户端输出字符的一个对象(比较PrintWriter与内置out对象的区别)

PrintWriter对象输出的内容总是提前与out内置对象,解决方法是在out对象输出完后加上out.flusht()清空缓冲区

  • sendRedirect(String location) 重新定向客户端的请求

4.6、session对象

session表示客户端与服务器的一次会话,Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间,即session实际上是一个特定的时间概念。在服务器的内存中保存着不同用户的session。

session对象是javax.servlet.http.HttpSession类的实例,是一个JSP内置对象,在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。

当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,这就需要session对象。

 

 
 

 

 

常用方法

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

session的生命周期

  1. 创建
  • 当客户端第一次访问某个JSP或者Servlet时候,服务器会为当前会话创建一个SessionId,每次客户端向服务端发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验。
  1. 活动
  • 某次会话当中通过超链接打开的新页面属于同一次会话,只有当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。除非本次会话的所有页面都关闭后再重新访问某个JSP或者Servlet将会创建新的会话。(注意原有会话还存在,只是这个旧的SessionId仍然存在于服务端,只不过再也没有客户端会携带它然后交予服务端校验)
  1. 销毁
  • session的销毁只有三种方式:
  • 调用session.invalidate()方法
  • session超时过期
  • 服务器重新启动

设置session有效期

Tomcat默认session超时时间为30分钟

设置session超时有两种方式:

  • session.setMaxInactiveInterval(时间); //单位是秒
  • 在web.xml配置

<session-config>

<session-timeout>

10  //单位是分钟

</session-timeout>

</session-config> 

 

4.7、application对象

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

常用方法

  • void setAttribute(String name,Object value) 使用指定名称将对象绑定到此会话
  • Object getAttribute(String name) 返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null
  • Enumeration getAttributeNames() 返回所有可用属性名的枚举
  • String getServerInfo() 返回JSP(SERVLET)引擎名及版本号

4.8、page对象

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

4.9、pageContext对象

pageContext对象是javax.servlet.jsp.PageContext类的实例,提供了对JSP页面内所有的对象及名字空间的访问,可以访问到本页所在的session,也可以取本页面所在的application的某一属性值,相当于页面中所有功能的集大成者。

常用方法

  • JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out)
  • HttpSession getSession() 返回当前页面中的HttpSession对象(session)
  • Object getPage() 返回当前页的Object对象(page)
  • ServletRequest getRequest() 返回当前页的ServletRequest对象(request)
  • ServletResponse getResponse() 返回当前页的ServletResponse对象(response)
  • void setAttribute(String name,Object attribute) 设置属性及属性值
  • Object getAttribute(String name,int scope) 在指定范围内取属性的值
  • int getAttributeScope(String name) 返回某属性的作用范围
  • void forward(String relativeUrlPath) 使当前页面重导到另一个页面
  • void include(String relativeUrlPath) 在当前位置包含另一个文件

4.10、config对象

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

常用方法

  • ServletContext getServletContext() 返回含有服务器相关信息的ServletContext对象
  • String getInitParameter(String name) 返回初始化参数的值
  • Enumeration getInitParameterNames() 返回Servlet初始化所需所有参数的枚举

4.11、exception对象

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

常用方法

  • String getMessage() 返回描述异常的消息
  • String toString() 返回关于异常的简短描述消息
  • void printStackTrace() 显示异常及其栈轨迹
  • Throwable FillInStackTrace() 重写异常的执行栈轨迹

实例

error.jsp页面

<!-- 在抛出异常的页面page指令中添加errorPage属性,属性值为处理异常的页面 -->

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="exception.jsp"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    ……

  </head>

 

  <body>

    <%

        //在此处抛出异常

        out.print(100/0);

     %>

 </body>

</html>

exception.jsp页面

<!-- 在处理异常的页面的page指令中,添加isErrorPage属性,值为true -->

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

      ……

  </head>

 

  <body>

   异常消息:<%=exception.getMessage() %><br>

   异常的字符串:<%=exception.toString() %><br>

   异常轨迹:<%=exception.getStackTrace() %>

</body>

</html>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是王小贱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值