JavaWeb学习——JSP基础

一、JSP概述

    JSP全称Java Server Pages,本质是servlet。

    运行在web容器中,接收客户端请求并产生响应。

   JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

   JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

二、JSP组成

    一个完整的.jsp后缀文件包含以下组成成分:

    1. 静态内容

     静态数据在输入文件中的内容和输出给HTTP响应的内容完全一致,即客户端浏览网页源文件所见数据。这些数据(如html)定义了网页的基本骨架,即页面的外观和结构。

    2. JSP指令

     指令是JSP语法元素的第一种类型。它们指示JSP转换器如何翻译JSP页面为Servlet。

     语法格式:

<%@...... %>  //注意'@'符号

     其中主要的指令类型有:page指令、include指令和taglib指令。

     ①page指令

     可以使用page指令来控制JSP转换器转换当前JSP页面的某些方面。

<%@ page attribute1="value1", attribute2="value2", ... %>

     一些常用的属性列表:

     import:定义一个或多个本页面中将被导入和使用的Java类型。例如:import=“java.util.*”。可以通过在两个类型间加入“ , ”分隔符来导入多个类型。此外JSP默认导入如下包:java.lang、javax.servlet、javax.servlet.http、javax.servlet.jsp。

     errorPage:定义当出错时用来处理错误的页面。

     isErrorPage:表示本页是一个错误处理页面。

     contentType:定义本页面隐式对象response的内容类型,默认是text/html。

     pageEncoding:定义本页面的字符编码,默认是ISO-8859-1。

     language:定义本页面的脚本语言类型,默认是Java,这在JSP2.2中是唯一的合法值。

     ②include指令

     可以使用include指令将其他文件中的内容包含到当前JSP页面。被包含的文件就好像是该Jsp文件中的一部分,会被同时编译执行,一个页面中可以有多个include指令。

<%@ include file="url" %>

     ③taglib指令

     允许用户使用标签库定义新的定义标签,在JSP中启用定制行为。这部分以后会在之后涉及。

    3. JSP脚本

     用于在JSP页面执行Java代码。

     语法:

<%  Java代码  %>

     可以在其中定义变量,编写方法,但不能定义方法。多个脚本片段间可以互相访问。

    4. JSP声明

     用来定义能在JSP使用的变量和方法。

     语法:

<%! Java代码  %>

     定义的变量和方法的作用域为当前页面和包含的页面。    

    5. JSP表达式

     每个表达式都会被JSP容器执行,并使用隐式对象out的打印方法输出结果。

<%= Java表达式 %>

     JSP容器首先执行表达式,并将计算结果传递给out.print()。

    6.注释

     ①隐式注释,在客户端源码中不可见

<%-- JSP注释 --%>
<% //Java注释 %>

     ②显式注释,在客户端源码可见

<!--  html注释  --> 

三、JSP生命周期

    JSP生命周期就是从创建到销毁的整个过程,类似于servlet的生命周期,区别在于JSP生命周期还包括将JSP编译成servlet。

    以下是JSP生命周期中所走过的几个阶段:

  • 编译阶段:servlet容器编译Servlet源文件,生成Servlet类。
  • 初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法。
  • 执行阶段:调用与JSP对应的servlet实例的服务方法。
  • 销毁阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例。

         

    JSP编译:当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

    编译的过程包括三个步骤:

  • 解析JSP文件。
  • 将JSP文件个转为servlet。
  • 编译servlet。

    JSP初始化:容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了。

    一般来讲程序只初始化一次,servlet也是如此。通常情况下您可以在jspInit()方法中初始化数据库连接、打开文件和创建查询表。

    JSP执行:这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。

    _jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数。_jspService()方法在每个request中被调用一次并且负责产生与之相对       应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。

    JSP清理:JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。

    jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。

四、JSP内置对象

    指不加声明和创建就可以在JSP脚本中使用的成员变量。

    JSP预先定义了9个这样的对象:

名称 类型
request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
session  javax.servlet.http.HttpSession
application javax.servlet.ServletContext
out   javax.servlet.jsp.JspWriter
page   java.lang.Object
pageContext  javax.servlet.jsp.PageContext
exception java.lang.Throwable
config javax.servlet.ServletConfig

    

   


    1. request

     request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。

  1.   服务器在接收到客户端的请求之后,会创建request对象和response对象;
  2.   服务器会通过request对象把客户的数据,包括请求信息都封装到这个对象里面;
  3.   所以我们在控制层,servlet里面就是service方法里面通过request得到很多数据,并对信息进行相应的业务处理,最后反馈给用户结果;
  4.   这个结果我们是通过response来封装的,并带到用户面前;
  5.   当这整个过程结束之后,request和response对象的周期也就结束了,他们的生命范围就是用户的一次请求和得到的一次结果的反馈。

   所提供的方法可以将它分为四大类:

     (1)储存和取得属性方法;
  • void setAttribute(String name, Object value)      设定name属性的值为value
  • Enumeration getAttributeNamesInScope(int scope)   取得所有scope 范围的属性
  • Object getAttribute(String name)   取得name 属性的值
  • void removeAttribute(String name)  移除name 属性的值
     (2)取得请求参数的方法
  • String getParameter(String name)   取得name 的参数值
  • Enumeration getParameterNames()    取得所有的参数名称
  • String [] getParameterValues(String name)    取得所有name 的参数值
  • Map getParameterMap()              取得一个要求参数的Map
     (3)能够取得请求HTTP 标头的方法
  • String getHeader(String name)      取得name 的标头
  • Enumeration getHeaderNames()       取得所有的标头名称
  • Enumeration getHeaders(String name) 取得所有name 的标头
  • int getIntHeader(String name)      取得整数类型name 的标头
  • long getDateHeader(String name)    取得日期类型name 的标头
  • Cookie [] getCookies()             取得与请求有关的cookies
     (4)其他的方法
  • String getContextPath()            取得Context 路径(即站台名称)
  • String getMethod()                 取得HTTP 的方法(GET、POST)
  • String getProtocol()               取得使用的协议 (HTTP/1.1、HTTP/1.0 )
  • String getQueryString()            取得请求的参数字符串,不过,HTTP的方法必须为GET
  • String getRequestedSessionId()     取得用户端的Session ID
  • String getRequestURI()             取得请求的URL,但是不包括请求的参数字符串
  • String getRemoteAddr()             取得用户的IP 地址
  • String getRemoteHost()             取得用户的主机名称
  • int getRemotePort()                取得用户的主机端口
  • String getRemoteUser()             取得用户的名称
  • void getCharacterEncoding(String encoding)    设定编码格式,用来解决窗体传递中文的问题

    2. response

     response对象用于动态响应客户端的请示,控制发送给用户的信息,并将动态生成响应。response具有页面作用域,即访问一个页面时,该页面的response只对这次访问有效,其他页面的response对象对当前页面无效。

     方法说明:

  • String getCharacterEncoding() 返回响应用的是何种字符编码
  • ServletOutputStream getOutputStream() 返回响应的一个二进制输出流
  • PrintWriter getWriter() 返回可以向客户端输出字符的一个对象
  • void setContentLength(int len) 设置响应头长度
  • void setContentType(String type) 设置响应的contentType类型
  • void add(Cokkie cookie) 在客服端添加cookie 
  • sendRedirect(java.lang.String location) 重新定向客户端的请求,属于客户端行为,相当于二次请求,不会保存上次请求数据。

         request.getRequestDispatcher("request.jsp").forward(request, response); 定向转发

         转发是在服务器发挥作用,forward方法将提交信息在页面间传递,request不会丢失,地址栏不会变;

         重定向是客服端发挥作用,通过请求新的地址实现页面的转向,request会丢失,地址栏会变。
    3. out
     out对象实际上是PrintWriter对象的带缓冲的版本(在out对象内部使用PrintWriter对象来输出数据),可以通过page指令的buffer属性来调整缓冲区的大小,默认的缓冲区是8kb。
     out 对象能把结果输出到网页上。
   out主要是用来控制管理输出的缓冲区(buffer)和输出流(output stream)。
     方法说明:
  • voidclear( )               清除输出缓冲区的内容
  • voidclearBuffer( )         清除输出缓冲区的内容
  • voidclose( )               关闭输出流,清除所有的内容
  • intgetBufferSize( )        取得目前缓冲区的大小(KB)
  • intgetRemaining( )         取得目前使用后还剩下的缓冲区大小(KB)
  • boolean isAutoFlush( )      回传true表示缓冲区满时会自动清除;false表示不会自动清除并且产生异常处理

 

    4. session
     在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
     方法说明:
  • long getCreationTime()             取得session产生的时间,单位是毫秒
  • String getId()                     取得session 的ID
  • long getLastAccessedTime()         取得用户最后通过这个session送出请求的时间
  • long getMaxInactiveInterval()      取得最大session不活动的时间,若超过这时间,session 将会失效
  • void invalidate()                  取消session 对象,并将对象存放的内容完全抛弃
  • boolean isNew()                    判断session 是否为"新"的会话
  • void setMaxInactiveInterval(int interval)   设定最大session不活动的时间,若超过这时间,session 将会失效
     同样session中也包含setAttribute等方法,作用域是一次完整的对话。
     session销毁的情况有三种:调用session.invalidate()、session超时、服务器重新启动。

    5. application
     主要是实现用户之间数据的共享,可存放全局变量。
     开始于服务器的启动,终止于服务器的关闭。
     在不同用户之间的连接中,可对application对象的同一属性进行操作。
     方法说明:
  • intgetMajorVersion()              取得Container主要的Servlet API版本
  • intgetMinorVersion()              取得Container次要的Servlet API 版本
  • String getServerInfo()             取得Container的名称和版本
  • String getMimeType(String file)    取得指定文件的MIME 类型
  • ServletContext getContext(String uripath)        取得指定Local URL的Application context
  • String getRealPath(String path)    取得本地端path的绝对路径
  • voidlog(String message)           将信息写入log文件中
  • voidlog(String message, Throwable throwable)    将stack trace 所产生的异常信息写入log文件中

      application对象也有setAttribute等方法。


 

    6. page
     page对象指向当前JSP页面本身,类似于类中的this指针,是java.lang.Object的实例,常用方法即Object方法。(很少使用)
    7. pageContext
     pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象(容器),可以用来        保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
     通过pageContext获得其他对象:
  • getException            返回exception隐式对象
  • getPage                   返回page隐式对象
  • getRequest              返回request隐式对象
  • getResponse           返回response隐式对象
  • getServletConfig      返回config隐式对象
  • getServletContext    返回application隐式对象
  • getSession              返回session隐式对象
  • getOut                     返回out隐式对象

     PageContext对象提供取得属性的方法:

  • Object getAttribute(String name, intscope)    回传name 属性(范围为scope;类型为Object)
  • Enumeration getAttributeNamesInScope(intscope)   回传所有属性范围为scope 的属性名称,回传类型为Enumeration
  • intgetAttributesScope(String name)   回传属性名称为name 的属性范围
  • voidremoveAttribute(String name)    移除属性名称为name 的属性对象
  • voidremoveAttribute(String name, intscope)     移除属性名称为name,范围为scope 的属性对象
  • voidsetAttribute(String name, Object value, intscope)       指定属性对象的名称为name、值为value、范围为scope
  • Object findAttribute(String name)    寻找在所有范围中属性名称为name 的属性对象

 

    8. config

     config对象是一个servlet初始化时,JSP引擎向他传送信息所用,此信息包括servlet初始化所要用到的参数以及服务器的有关信息。


    9. exception
    exception对象一个异常对象,当一个页面运行过程中发生了异常,就产生这个对象。
    如果JSP页面需要应用这个对象,必须把isErrorPage设为TRUE。
 
 
 
--- 每天积累一点点,吃水不忘挖井人 ---
 
原文地址:https://www.cnblogs.com/cardiolith/p/9431229.html