JSP学习笔记

来源:互联网 发布:数据库 索引 编辑:程序博客网 时间:2024/06/02 10:05

JSP基本语法
JSP基本语法分为3种不同的类型:分别为脚本元素、指令元素和动作元素。

 一、JSP脚本元素:
 脚本元素主要有:声明元素、表达式元素和脚本小程序元素。
 
 1、JSP声明元素:
  声明元素是在文档中定义函数和变量。
  语法格式:<%! 声明;[声明;].... %>
  如:<%! int i=0; %>
 
 2、JSP表达式元素:
  表达式元素利用变量或函数的值在页面上输出信息。
  语法格式:<%= 表达式 %>
  如:<%! Date today=new Date(); %>
      <%=today.getDate() %>

 3、JSP脚本小程序元素:
  脚本小程序元素又称为脚本段或JSP代码片段。
  语法格式:<% 代码 %>

 二、JSP指令元素:
 JSP指令元素主要有page、include和taglib。指令主要用来提供整个JSP网页相关的信息,并且用来设定JSP页面的相关属性,包含在<%@ %>标记中。
 
 1、页面指令元素:page:
  page指令用于设定整个JSP页面的属性和相关功能,即定义JSP文件的全局属性。
  语法格式:<%@page [属性] %>
  page指令属性有:language、extends、import、errorPage、buffer、autoFlush、session、isThreadSafe、info、  

  contentType、isErrorPage。
 
 2、页面包含指令元素:include:
  include指令可以用来在JSP页面中包含另一个文件。
  语法格式:<%@include file="filename" %>或<%@ include file="相对位置" %>
  include指令只有file一个属性。
 
 3、标签指令元素:taglib:
  taglib能够让用户使用标签库定义新的自定义标签,在JSP页面中启用客户化定制行为。
  语法格式:<%@taglib uri="taglibURI" prefix="taglibfix">
  taglib指令属性有:prefix(制定了标签的前缀)和uri。
  
 三、JSP标准操作元素:
 JSP标准操作元素主要包括<jsp:include>、<jsp:forward>、<jsp:param>、<jsp:useBean>、<jsp:setProperty>。

 1、页面包含操作:include
  用来包含静态文件和动态文件。
  语法格式:①<jsp:include page="{relativeURI|<%=expression %>}" flush="true" />
                      ②<jsp:include page="" flush="true">.....</jsp:include>——通常会包含一些参数。
  属性有:page和flush(默认值为false,但必须设为true)。

 2、页面重定向操作:forward
  <jsp:forward>将会重定向到一个HTML文件、JSP文件或者是一个程序段,即将客户端的请求从一个JSP页面转向另一个JSP页面。<jsp:forward>标签以后的代码,将不能执行。
  语法格式:①<jsp:forward page={"url" | "<%= expression %>"} /> 
                      ②<jsp:forward page={"url" | "<%= expression %>"} >.....</jsp:forward>——通常会包含一些参数。
  属性有:page。

 3、参数传递操作:param
  参数传递操作param用于传递参数,通常和<jsp:include>、<jsp:forward>等一起搭配使用。
  语法格式:<jsp:param name="ParameterName" value="ParameterValue" />
  属性有:name(表示参数名字)和value(表示参数的值)。

 4、JavaBran调用操作:useBean
  标准操作元素<jsp:useBean>用来在JSP页面创建一个Bean实例,并指定其名称和作用范围。
  语法格式:<jsp:useBean id="" class="" scope="" />
  属性有:id、scope、class、beanName、type。

 5、JavaBean属性设置操作:setProperty
  <jsp:setProperty>动作通常和<jsp:useBean>动作一起搭配使用,用来设置Bean的属性值。
  语法格式:<jsp:setProperty name="" property="" />
  属性有:name、property。

 6、JavaBean属性读取操作:getProperty
  <jsp:getProperty>动作是对<jsp:setProperty>动作的补充,是用来读取Bean的属性值,读取的属性值将转化为一个 String,然后发送到输出流中,如果属性是一个对象,将调用toString()函数。
  语法格式:<jsp:getProperty name="" property="" />
  属性有:name,property。

 

JSP常用内置对象

 一、request对象
 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。

 常用方法:
 cookie[] getCookies() 返回所有在客户端存储的cookies对象,结果是一个cookie数组。

 boolean getSession(Boolean create) 返回和当前客户端请求相关联的HttpSession对象,如果当前客户端请求没有和任何  

 HttpSession对象关联,那么当create变量为true,则创建一个HttpSession对象返回,反之,返回null。

 string getHeader(String name) 获得HTTP协议定义的文件头信息。

 enumeration getHeadeNames() 获得所有request header的名称,结果集合是一个Enumeration类的实例。

 enumeration getHeaders(String name) 获得指定名称的request header的所有值,结果集合是一个Enumeration类的实例。

 string getMethod() 获得客户端向服务器传递数据的方式,一般有GET、POST、PUT、HEADER、TRACE等类型。

 string getParameter(String name) 获得客户端传送给服务器的name参数的值。当传递给此函数的参数名没有实际参数与之对应返回null

 enumeration getParameterNames() 获得客户端传送给服务器端的所有的参数名,结果集是一个Enumeration类的实例。当没有参数传递给服务器时,则返回null

 string[] getParameterValues(String name) 以字符串数组的形式返回指定参数所有的值(多用于多个参数用同一个名字时)。

 void setAttribute(String key,Object obj) 设置属性的属性值

 object getAttribute(String name) 返回指定属性的属性值

 Enumeration getAttributeNames() 返回所有可用属性名的枚举

 String getRemoteAddr() 返回发送此请求的客户端IP地址

 String getRemoteHost() 返回发送此请求的客户端主机名

 string getRequestURI() 获得发出请求字符串的客户端地址。

 string getServletPath() 获得客户端请求的脚本文件的相对路径。

 string getServerName() 获得服务器的名字。如果没有设定服务器名,则返回服务器的IP地址。

 string getServerPort() 获得服务器的端口号,例如8080。

 String getRealPath(String path) 返回一虚拟路径的真实路径

 string getQueryString() 获得查询字符串,该字符串从客户端以GET函数方式向服务器端传递。

 String getCharacterEncoding() 返回字符编码方式

 int getContentLength() 返回请求体的长度(以字节数)
 
 String getContentType() 得到请求体的MIME类型

 ServletInputStream getInputStream() 得到请求体中一行的二进制流

 String getProtocol() 返回请求用的协议类型及版本号

 String getScheme() 返回请求用的计划名,如:http.https及ftp等

 String getServerName() 返回接受请求的服务器主机名

 int getServerPort() 返回服务器接受此请求所用的端口号

 BufferedReader getReader() 返回解码过了的请求体 
  
 二、response对象
 response对象包含了响应客户请求的有关信息,即可以通过response对象来组织发送到客户端的数据。它是HttpServletResponse类的实例。

 常用方法:
 void addCookie(Cookie cookie) 在客户端添加一个cookie,用来保存客户端的信息。

 String getCharacterEncoding() 返回响应用的是何种字符编码。
 
 void addDateHeader(String name,long value) 添加一个日期类型的HTTP头信息,覆盖同名的HTTP头信息。

 void addIntHeader(String name,int value) 添加一个整型的HTTP头,覆盖旧的HTTP头。
 
 ServletOutputStream getOutputStream() 返回响应的一个二进制输出流

 PrintWriter getWriter() 返回可以向客户端输出字符的一个对象

 void setContentLength(int len) 设置响应头长度

 void setContentType(String type) 设置响应的MIME类型

 sendRedirect(java.lang.String location) 重新定向客户端的请求

 void flushBuffer() 强制把当前缓冲区的数据发送到客户端。

 三、session对象
 session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止,用来保存每个用户的用户信息和会话状态,它由服务器端自动创建,可以跟踪每个用户的操作状态。session对象一般在需要在不同的JSP页面中记录用户信息、传递共享数据的情况下使用。它是HttpSession类的实例.
 
 常用方法:
 long getCreationTime() 返回SESSION创建时间
 
 public String getId() 返回SESSION创建时JSP引擎为它设的惟一ID号

 long getLastAccessedTime() 返回此SESSION里客户端最近一次请求时间

 void setAttribute(String name,Object value) 设置指定名称name的属性值value,并将其存储在session对象中。

 Object getAttribute(String name) 获得指定名称name相联系的属性值。

 void putValue(String name,Object object) 添加一个session变量的值,不推荐使用。

 object getValue(String name) 获得session中名为name的对象的值,name不存在,返回null。

 void removeValue(String name) 删除一个名为name的值。

 int getMaxInactiveInterval() 返回两次请求间隔多长时间此SESSION被取消(ms)
 
 String[] getValueNames() 返回一个包含此SESSION中所有可用属性的数组

 void invalidate() 取消SESSION,使SESSION不可用

 boolean isNew() 检查客户端使用参加了会话,返回boolean类型。

 void removeValue(String name) 删除SESSION中指定的属性

 void setMaxInactiveInterval() 设置两次请求间隔多长时间此SESSION被取消(ms)
 
 四、out对象
 out对象是JspWriter类的实例,主要用来向客户端输出各种数据类型的内容,并且管理应用服务器上的输出缓冲区。
 
 常用方法:
 void print(类型)或println(类型) 前者输出后,并不结束该行,而后者在输出完毕后,会结束当前行,并且换行。
 
 void newLine() 输出一个换行符号。
 
 void clear() 清除缓冲区的内容,但不把数据写到客户端去。

 void clearBuffer() 清除缓冲区的当前内容,并且把数据写到客户端去。

 void flush() 清空流

 int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0

 int getRemaining() 返回缓冲区还剩余多少可用

 boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常。

 void close() 关闭输出流,从而可以强制终止当前页面的剩余部分向浏览器输出。

 五、page对象
 page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例。
 
 常用方法:
 class getClass() 返回page对象的类

 int hashCode() 返回page对象的hash码

 boolean equals(Object obj) 判断page对象是否与指定的Object对象相等

 void copy(Object obj) 把此page对象拷贝到指定的Object对象中

 Object clone() 克隆此page对象

 String toString() 把此page对象转换成String类的对象

 void notify() 唤醒一个等待的线程

 void notifyAll() 唤醒所有等待的线程

 void wait(int timeout) 使一个线程处于等待直到timeout结束或被唤醒

 void wait() 使一个线程处于等待直到被唤醒

 void enterMonitor() 对Object加锁

 void exitMonitor() 对Object开锁

 六、application对象
 application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。application对象与session对象有所区别,session对象和用户会话相关,不同用户的session是完全不同的对象,而所有用户的application对象都是相同的一个对象,即共享这个内置的application对象,application对象里的数据都是相同的。
 
 常用方法:
 void setAttribute(String name,Object obj) 设定属性的属性值

 Object getAttribute(String name) 返回给定名的属性值

 Enumeration getAttributeNames() 返回所有可用属性名的枚举

 void removeAttribute(String name) 删除一属性及其属性值

 String getServerInfo() 返回JSP(SERVLET)引擎名及版本号

 String getRealPath(String path) 返回一虚拟路径的真实路径

 ServletContext getContext(String uripath) 返回指定WebApplication的application对象

 int getMajorVersion() 返回服务器支持的Servlet API的最大版本号

 int getMinorVersion() 返回服务器支持的Servlet API的最大版本号

 String getMimeType(String file) 返回指定文件的MIME类型

 URL getResource(String path) 返回指定资源(文件及目录)的URL路径

 InputStream getResourceAsStream(String path) 返回指定资源的输入流

 RequestDispatcher getRequestDispatcher(String uripath) 返回指定资源的RequestDispatcher对象

 Servlet getServlet(String name) 返回指定名的Servlet

 Enumeration getServlets() 返回所有Servlet的枚举

 Enumeration getServletNames() 返回所有Servlet名的枚举

 void log(String msg) 把指定消息写入Servlet的日志文件

 void log(Exception exception,String msg) 把指定异常的栈轨迹及错误消息写入Servlet的日志文件
 
 void log(String msg,Throwable throwable) 把栈轨迹及给出的Throwable异常的说明信息写入Servlet的日志文件

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

 常用方法:
 String getMessage() 返回描述异常的消息

 String toString() 返回关于异常的简短描述消息

 void printStackTrace() 显示异常及其栈轨迹

 Throwable FillInStackTrace() 重写异常的执行栈轨迹

 八、pageContext对象
 pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext。

 常用方法:
 JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out)

 HttpSession getSession() 返回当前页中的HttpSession对象(session)

 Object getPage() 返回当前页的Object对象(page)

 ServletRequest getRequest() 返回当前页的ServletRequest对象(request)

 ServletResponse getResponse() 返回当前页的ServletResponse对象(response)

 Exception getException() 返回当前页的Exception对象(exception)

 ServletConfig getServletConfig() 返回当前页的ServletConfig对象(config)

 ServletContext getServletContext() 返回当前页的ServletContext对象(application)

 void setAttribute(String name,Object attribute) 设置属性及属性值

 void setAttribute(String name,Object obj,int scope) 在指定范围内设置属性及属性值

 public Object getAttribute(String name) 取属性的值

 Object getAttribute(String name,int scope) 在指定范围内取属性的值

 public Object findAttribute(String name) 寻找一属性,返回起属性值或NULL

 void removeAttribute(String name) 删除某属性

 void removeAttribute(String name,int scope) 在指定范围删除某属性

 int getAttributeScope(String name) 返回某属性的作用范围

 Enumeration getAttributeNamesInScope(int scope) 返回指定范围内可用的属性名枚举
 
 void release() 释放pageContext所占用的资源

 void forward(String relativeUrlPath) 使当前页面重导到另一页面

 void include(String relativeUrlPath) 在当前位置包含另一文件

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

 常用方法:
 ServletContext getServletContext() 返回含有服务器相关信息的ServletContext对象

 String getServletName() 获得当前servlet的名字。

 String getInitParameter(String name) 获得名称为name的初始参数的值。

 Enumeration getInitParameterNames() 返回Servlet初始化所有参数名称的枚举。

 

三种数据共享方式
 1、基于请求的共享
 基于请求的数据共享其实就是共享用户的请求数据。请求数据实际上就存放在request对象中,共享的范围是:用户请求访问的当前Web组件,和当前的Web组件共享同一请求的其他Web组件。基于请求的共享适宜于应用在实现单个请求动作的跟踪上。
 
 2、基于会话的共享
 基于会话的共享就是在同一个HTTP会话中的Web组件间共享数据。一个HTTP会话启动时开始共享,HTTP会话结束时结束该共享。基于会话的数据共享的时效就是整个HTTP会话的周期。会话范围内的共享数据实际上就存放在HttpSession对象中。基于会话的数据共享适宜应用在维护客户端与服务器之间的会话状态上。显然,基于会话的数据共享的时效和范围要远远大于基于请求的数据共享实际上可以看作是在一系列持续性的HTTP请求和响应动作之间共享数据。

 3、基于应用的共享
 基于应用的共享就是在同一个Web应用间共享数据。Web应用中的所有Web组件都能共享该范围内的共享数据,共享时效就是整个Web应用的生命周期。共享数据实际上就存放在ServletContext对象中。

 三种数据共享方式的对比:基于请求的共享方式可以看做是基于客户端的请求动作的,生命周期和共享范围都是基于“动作”的。基于会话的共享方式可以看作是基于与客户端的会话状态的,生命周期和共享范围都是基于“状态”的,这种状态是针对特定的客户端的,因而状态的维持也相当程度上依赖于客户端。而基于应用的共享可以看做是基于服务器上整个Web应用程序的,生命周期和共享范围都不依赖于客户端。

 

Web组件的三种关联关系
 单个Web组件所提供的信息和功能是有限的,因此需要通过Web组件间的关联来实现信息资源和功能的聚合。Web组件三种关联关系有:请求转发、请求重定向、包含。

 1、请求转发
 请求转发方式允许把客户端的请求转发给同一个应用程序中的其他Web组件。在Servlet中使用RequestDispatcher.forward()函数来转发收到的HTTP请求,并将来自客户端的最初请求的ServletRequest和ServletResponse对象传递给转发目标组件。如:
  RequestDispatcher rd=request.getRequestDispatcher("HelloWorld.jsp");
  rd.forward(request,response);
 请求转发方式通常用于Web应用控制层的Servlet控制器,而在JSP页面中可以通过<jsp:forward page="HelloWorld.jsp" />标签来实现转发。请求转发方式只能把请求转发给同一Web应用中的组件,并不能转发给其他Web应用的组件。同时,请求转发的源组件和目标组件共享request范围 内的共享数据。请求转发方式其实就是一种以链接来聚合页面资源的方法:用一个JSP接受用户请求,向另一个JSP转发请求,另一个JSP负责将响应返回给用户,这种链接可以有任意多个。
 
 2、请求重定向
 请求重定向类似于请求转发。与请求转发相比,请求重定向的主要区别在于:①Web组件可以将请求重定向到任何一个URL,而不仅仅是同一Web应用中的URL。②重定向的源组件和目标组件之间不共用一个Request对象(请求重定向将产生两个不同的Request对象),因此不能共享Request的资源。③重定向是返回一个应答给客户端,然后再重新发送一个请求给目标URL,所以地址栏会有显示,而请求转发是直接把这个请求转发给另一个URL,所以地址栏没有显示。可以在Servlet中用response.sendRedirect("URL")来实现请求重定向。请求重定向的特点是可以从当前页面重定向到任意URL,无法使用前面的Request对象,因而适合于转到外部网站页面上。

 3、包含
 包含关联允许一个Web组件把来自同一应用中的多个其他Web组件的输出数据聚集起来,并使用聚集起来的输出数据来创建一个响应结果。在Servlet中可以用RequestDispatch.include()函数来包含其他的Web组件,如:
  RequestDispatch rd=request.getRequestDispatch("HelloWorld.jsp");
  rd.include(request,response);
 包含关联通常用于模板处理器,可控制网页的布局。在JSP页面中使用标签<%@include file="文件" %>来实现包含一个文件。
 

原创粉丝点击