JSP语法

来源:互联网 发布:刘强东脸盲 知乎 编辑:程序博客网 时间:2024/06/05 05:11

JSP四个作用域

  • page-当前页面有效

page对象的作用范围仅限于用户请求的当前页面,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。page里的变量只要页面跳转了,它们就不见了。如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。

  • request-当前请求中有效

一个HTTP请求的处理可能需要多个Servlet合作,而这几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了。request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。 所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。一个request可以包含多个page页(include、forward以及filter)。

Servlet之间的信息共享是通过HttpServletRequest接口的两个方法来实现的:

// 将对象value以name为名称保存到request作用域中void setAttribute(String name, Object value)// 从request作用域中取得指定名字的信息Object getAttribute(String name)
JSP中的doGet()、doPost()方法的第一个参数就是HttpServletRequest对象,使用这个对象的 setAttribute()方法即可传递信息。那么在设置好信息之后,要通过何种方式将信息传给其他的Servlet呢?这就要用到RequestDispatcher接口的forward()方法,通过它将请求转发给其他Servlet。

// 取得Dispatcher以便转发,path为转发的目的ServletRequestDispatcher ServletContext.getRequestDispatcher(String path) // 将request和response转发void RequestDispatcher.forward(ServletRequest request, ServletResponse response)

因此,只需要在当前Servlet中先通过setAttribute()方法设置相应的属性,然后使用forward()方法进行跳转,最后在跳转到的Servlet中通过使用getAttribute()方法即可实现信息传递。

需要注意两点:

1、转发不是重定向,转发是在Web应用内部进行的。

2、转发对浏览器是透明的,也就是说,无论在服务器上如何转发,浏览器地址栏中显示的仍然是最初那个Servlet的地址。

  • session-当前会话中有效

session作用域比较容易理解,同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session作用域的体现。如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。 
session是通过HttpSession接口实现的,它提供的主要方法如下所示:

// 从session中获取信息Object HttpSession.getAttribute(String name)// 向session中保存信息void HttpSession.setAttribute(String name, Object value)// 获取当前请求所在的session的对象HttpSession HttpServletRequest.getSessio()
session的开始时刻比较容易判断,它从浏览器发出第一个HTTP请求即可认为会话开始。但结束时刻就不好判断了,因为浏览器关闭时并不会通知服务器,所以只能通过如下这种方法判断:如果一定的时间内客户端没有反应,则认为会话结束。Tomcat的默认值为120分钟,但这个值也可以通过HttpSession的setMaxInactiveInterval()方法来设置:

void setMaxInactiveInterval(int interval)

如果想主动让会话结束,例如用户单击“注销”按钮的时候,可以使用 HttpSession 的 invalidate()方法,用于强制结束当前session。

  • application-整个应用程序有效

如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。application作用域上的信息传递是通过ServletContext实现的。整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。 application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。

JSP指令

JSP指令用来设置与整个JSP页面相关的属性。

JSP指令语法格式:

<%@ directive attribute="value" %>

这里有三种指令标签:

指令描述<%@ page ... %>定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等<%@ include ... %>包含其他文件<%@ taglib ... %>引入标签库的定义,可以是自定义标签

JSP行为

JSP行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等。

行为标签只有一种语法格式,它严格遵守XML标准:

<jsp:action_name attribute="value" />

行为标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的JSP行为标签::

语法描述jsp:include用于在当前页面中包含静态或动态资源jsp:useBean寻找和初始化一个JavaBean组件jsp:setProperty设置 JavaBean组件的值jsp:getProperty将 JavaBean组件的值插入到 output中jsp:forward从一个JSP文件向另一个文件传递一个包含用户请求的request对象jsp:plugin用于在生成的HTML页面中包含Applet和JavaBean对象jsp:element动态创建一个XML元素jsp:attribute定义动态创建的XML元素的属性jsp:body定义动态创建的XML元素的主体jsp:text用于封装模板数据

JSP隐含对象

JSP支持九个自动定义的变量,江湖人称隐含对象。这九个隐含对象的简介见下表:

对象描述requestHttpServletRequest类的实例responseHttpServletResponse类的实例outPrintWriter类的实例,用于把结果输出至网页上sessionHttpSession类的实例applicationServletContext类的实例,与应用上下文有关configServletConfig类的实例pageContextPageContext类的实例,提供对JSP页面所有对象以及命名空间的访问page类似于Java类中的this关键字ExceptionException类的对象,代表发生错误的JSP页面中对应的异常对象