jsp总结

来源:互联网 发布:程序员基本算法 编辑:程序博客网 时间:2024/04/29 23:15
JSP:
1.JSP本质:HTML+Java
2.九大内置对象:
  由JSP引擎提供,不需要编写者实例化
  (1)request
  类型:javax.servlet.http.HttpServletRequest
  功能:代表了客户端的请求信息,主要用于接收通过HTTP协议传送到服务器的数据
  方法:
    a.存储和获取属性
      1>void setAttribute(String key, Object value)
      设定key属性的值为value
      2>Enumeration getAttributeNamesInScope(int scope)
      取得所有scope范围的属性
      3>Object getAttribute(String key)
      取得key属性的值
      4>void removeAttribute(String key)
      移除key属性的值
    b.获取参数的方法-参数:网页标签的内容
      1>String getParameter(String name)
      取得name的参数值-表单提交信息
      2>Enumeration getParameterNames()
      取得所有的参数名称
      3>String [] getParameterValues(String name)
      取得所有name的参数值
      4>Map getParameterMap() 
      取得一个要求参数的Map
  (2)response
  类型:javax.servlet.http.HttpServletResponse
  功能:代表服务器对客户端的响应,主要是将JSP容器处理过的对象传回到客户端
  方法:
    void sendRedirect(String url)
    使当前页面重定向到另外的JSP程序或者HTML文件中
  (3)session
  类型:javax.servlet.http.HttpSession
  功能:
    a.它在第一个JSP页面被装载时自动创建,完成会话期管理功能。
    从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
    当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象。
    b.当用户登录网站,系统将为他生成一个独一无二的session对象,用以记录该用户的个人信息,一旦该用户退出网站,那么该session对象将会被注销。session对象也可以绑定若干个参数或者Java对象,这些参数或者Java对象就相当于局部变量,不同session对象间的同名变量是不会相互干扰的。——购物车
    c.session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/Value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
  方法:
    a.获取session对象
      1>使用session关键字直接引用session对象
      2>使用request对象的getSession()方法
      3>使用PageContext对象的getSession()方法
      注意:后两种方法获取的session对象不能够被命名为session。
    b.获取session对象编号
      public String getId()
    c.存储和获取属性
      1>public void setAttribute(String key,Object obj)
        将参数Object指定的对象obj添加到session对象中,并为添加的对象指定一个索引关键字。
      2>public Object getAttribute(String key)
        获取session对象中含有关键字的对象。
      3>public Boolean isNew()
        判断是否是一个新的客户.
    d.销毁session的方法
      1>session.invalidate()
      2>session过期(超时)
      3>服务器重新启动
      补充:Tomcat默认session超时时间为30分钟。
      设置session超时有两种方式
        i.session.setMaxInactiveInterval(时间),单位是秒
        ii.在web.xml中配置时间,单位是分钟
  (4)application
  类型:javax.servlet.ServletContext
  功能:
    a.存在于服务器的内存空间中,服务器一旦启动,就会自动产生一个application对象,除非服务器被关闭,否则这个application对象将一直保持下去。application对象要由服务器自动清除它,不能被用户创建,用户也不能清除application对象,我们只能创建这个application对象的同步副本。
    b.与session对象不同的时,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。——当前在线人数、不借助数据库的聊天室
  方法:存储和获取参数
    a.setAttribute(String key,Object obj)
      将参数Object指定的对象obj添加到Application对象中,并为添加的对象指定一个索引关键字
    b.String getAttribute(String key)
      获取Application对象中含有关键字的对象
  (5)out
  类型:javax.servlet.jsp.jspWriter
  功能:用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
  方法:
    a.void clear( )
      清除输出缓冲区的内容
    b.void clearBuffer( )
      清除输出缓冲区的内容
    c.void close( ) 
      关闭输出流,清除所有的内容
    d.int getBufferSize( )
      取得目前缓冲区的大小(KB) 
    e.int getRemaining( ) 
      取得目前使用后还剩下的缓冲区大小(KB)
    f.boolean isAutoFlush( )
      回传true表示缓冲区满时会自动清除;false表示不会自动清除并且产生异常处理
  (6)page
  类型:java.lang.Object
  功能:指向当前JSP页面本身,有点像类中的this指针。更准确地说它代表JSP被转译后的Servlet,它可以调用Servlet类所定义的方法。它可以使用Object类的方法,例如,hashCode()、toString()等方法
  (7)pageContext
  类型:javax.servlet.jsp.PageContext
  功能:在一般的JSP程序中,很少用到它。pageContext对象提供了对JSP页面所有的对象及命名空间的访问。pageContext对象的方法可以访问除本身以外的8个JSP内部对象,还可以直接访问绑定在application对象、page对象、request对象、session对象上的Java对象。pageContext对象相当于JSP程序中所有对象功能的集成者。不过,这里存在着一个问题,既然可以直接访问JSP内部对象,为什么还要多此一举,通过pageContext对象来访问它们呢?这也正是pageContext对象应用较少的原因。
  方法:
    a.getOut()
      返回一个JspWriter类的实例对象,也就是JSP内置对象--out对象,可以往客户端写入输入流
    b.getSession()
      返回值是一个HttpSession接口的实例对象,即JSP内置对象--session对象,可以保存不同用户的信息
    c.getPage()
      返回值是一个java.lang.Object对象,也就是JSP内置对象--page对象
    d.getResponse()
      回对象是javax.servlet.ServletResponse,也就是JSP内置对象--response对象,主要用于控制HTTP连接
    e.getRequest()
      返回对象是javax.servlet.ServletRequest,也就是JSP内置对象--request对象,主要用于获取客户端的信息
    f.getException()
    g.getServletConfig()
      返回当前的config对象,用于获取JSP/Servlet程序的初始参数
    h.getServletContext()
      返回值是一个ServletConfig接口的实例对象,也就是JSP内置对象--application对象的副本
    i.setAttribute(String key, Object o, int scope)
      可以将参数绑定到application对象、session对象、request对象或者page对象上,这里的scope参数可以取以下的值:
      1>pageContext.PAGE_SCOPE
      2>pageContext.REQUEST_SCOPE
      3>pageContext.SESSION_SCOPE
      4>pageContext.APPLICATION_SCOPE
      当scope参数的值为pageContext.SESSION_SCOPE时,调用PageContext对象的setAttribute()方法和调用session对象的putValue()方法是等效的,都是将某个参数和当前的session绑定起来。
      如果scope参数的值为pageContext.APPLICATION_SCOPE,那么调用PageContext对象的setAttribute()方法和调用application对象的setAttribute()方法是等效的。
    j.getAttribute(String key, int scope)
      可以直接获取和application对象、page对象、session对象、request对象相互绑定的参数的值。这个方法的scope参数的意义和上面讲的一样。如果scope参数的值是pageContext.REQUEST_SCOPE,那么getAtttribute()方法就在当前的request对象内部查找有没有绑定一个名为name的Java对象,如果有,就返回这个对象,如果没有,返回null值。如果scope参数的值是pageContext.APPLICATION_SCOPE,那么getAtttribute()方法的作用范围将是application对象
    k.removeAttribute(String name, int scope)
      可以直接解除application对象、session对象、request对象、page对象和某个特定的参数的绑定关系。这个方法的scope参数指定了作用的范围,如果scope参数的值为pageContext.SESSION_SCOPE,那么removeAttribute()方法将会使某个参数或者Java对象和当前的session对象解除绑定关系
    l.findAttribute(String name)
      将在application对象、session对象、request对象、page对象内部查找是否有某个参数或者Java对象与这些对象绑定了,搜索顺序是先是范围最小的page对象,其次是request对象、session对象,最后是application对象,这个方法的返回值是第一个符合要求的Java对象的值
    m.forward(String url)
      该方法可以实现网页的重定向功能,类似于response.sendRedirect()方法
    n.include(String relativeUrlPath)
      该方法可以让当前文件包含进一个外部文件,类似于JSP的include编译指令和<jsp:include>动作元素
  (8)config
  (9)exception
3.四大作用域
  (1)page
  生命周期:当对JSP的请求时开始,当响应结束时销毁
  作用范围:整个JSP页面,是四大作用域中最小的一个
  如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
  (2)request
  生命周期:在service方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束
  作用范围:整个请求链(请求转发也存在)
  作用:在整个请求链中共享数据。
  (3)session
  (4)application
4.转发和重定向
  解释一:
  转发是服务器行为,重定向是客户端行为。
  (1)转发:JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。-request依旧有效 
  转发过程:客户浏览器发送http请求——>web服务器接受此请求——>调用内部的一个方法在容器内部完成请求处理和转发动作——>将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
  (2)重定向:第一个页面通知浏览器发送一个新的页面请求。
  重定向过程:客户浏览器发送http请求——>web服务器接受后发送302状态码(302代表暂时性转移(Temporarily Moved ))响应及对应新的location给客户浏览器——>客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——>服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。


  当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。
  
  解释二:
  (1)转发:服务器内部把对一个request/response的处理权,移交给另外一个对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。传输的信息不会丢失。
  例子:
       request.getRequestDispatcher(“loginsuccess.jsp”).forward(request,response); 
  (2)重定向:其实是两次request
  第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
  例子: response.sendRedirect("loginsuccess.jsp");


  怎么选择是使用重定向还是转发呢?
  (1)通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。
  (2)但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择重定向。 
5.getAttribute和getParameter的区别
5.getRequestDispatcher()与sendRedirect()的区别
0 0
原创粉丝点击