2021/12/19 Java开发之Java web编程 第二章JSP核心内置对象

目录

1、out对象

2、request对象

request对象常用的方法:

3、response对象

response对象常用的方法:

4、session对象

session对象常用的方法:

5、application对象

application对象常用的方法:

6、page对象

7、config对象

8、exception对象

9、pageContext对象

它主要有以下两个作用:

10丶保存会话Cookie和Session的区别:

Java提供的操作Cookie的API

11丶JSP4大作用域

12丶转发与重定向的区别

一、请求转发和重定向

二、转发和重定向的路径问题

三、转发和重定向的区别

本章总结


JSP提供了由容器实现和管理的内置对象,也可以称之为隐含对象,由于JSP使用Java作为脚本语言,所以JSP将具有强大的对象处理能力,并且可以动态创建Web页面内容。但Java语法在使用一个对象前,需要先实例化这个对象,这其实是一件比较烦琐的事情。JSP为了简化开发,提供了一些内置对象,用来实现很多JSP应用。在使用JSP内置对象时,不需要先定义这些对象,直接使用即可。

在JSP中一共预先定义了9个这样的对象,分别为request、response、session、application、out、pageContext、config、page和exception

内置对象:就是在JSP中无需创建就可使用的称为内置对象,它是有容器创建的(如Tomcat、JBoss、weblgic等容器创建)。 
JSP九大内置对象分别为:out、request、response、session、application、pageContext、page、config、exception。

1、out对象

向客户端输出信息,它是JspWriter类的一个实例。

常用的有out.print();或out.println();

2、request对象

获取客户端传递到服务器的信息。request对象实现了HttpServletRequest接口,而此接口又继承与ServletRequest接口。由于接口是不能创建对象的,所以可以通过反射(request.getClass().getName())来获得request对象属于具体的哪个类,不同的容器(服务器)会产生不一样的结果。

request对象常用的方法:

  1. getParameter():获得客户端传递给服务器一个参数的值。
  2. getParameterNames():获得客户端传递给服务器的所有参数的名字。
  3. getParameterValues():获取一个参数的所有值(如checkBox的情况)。
  4. getRequestRequestDispatcher(String path).forward(request,response):请求转发。
  5. setAttribute(),getAttribute(),removeAttribute():这三个方法主要用于struts框架中,必须在同一个请求中设置的属性才能获得。
  6. getCookies():从请求中读取Cookie数据,把个人信息存放到客户端。
  7. setCharacterEncoding()/getCharacterEncoding():设置/获得字符编码。
  8. getContextLength():获得整个网页的长度(长度不确定时返回-1).
  9. getRequestURL():返回当前网页的地址(http://localhost:8080/项目名/具体页面.jsp)。
  10. getRequestURI():返回项目名/具体网页.jsp。
  11. getMethod():获得网页提交的方法,默认为get,还可以设置为post。
  12. getRemoteAddr():获得远程地址。
  13. getRemoteHost():获得远程主机的名称。
  14. getServerPort():端口号(一般默认是8080)。
  15. getServerName():获取服务器的名字。
  16. getScheme():获取当前链接使用的协议,如http。
  17. getServletPath():/具体网页.jsp。 getContextPath():/项目名,获得的是上下文路径。
  18. getHeader(),getHeaders(),getHeaderNames():request.getHeader (“Referer”);获得来自的网页。

3、response对象

向客户端浏览器输出信息,对客户的请求进行响应。它是实现了HttpServletResponse接口,此接口继承与ServletResponse,与request对象类似,根据反射机制,由于服务器不同,具体的类也不一样。

response对象常用的方法:

  1. void addCookie(Cookie cookie):向客户端添加Cookie
  2. void setContentType(String type):设置HTTP响应的contentType类型
  3. void setCharacterEncoding(String charset):设置响应采用的字符编码类型
  4. void sendRedirect(String location):将请求重新定位到一个新的URL上

4、session对象

会话对象,它是实现HttpSession接口。它们有会话失效时间,tomcat默认是30分钟,可以设置。每个用户的会话空间是隔离的,例如用户商城网站,每个人买的东西都不一样,他们各自把选的商品放在各自的购物车中,互不影响。

session对象常用的方法:

  1. String getId():获取sessionid
  2. long getCreationTime():返回session对象被创建的时间,以毫秒为单位
  3. void setMaxInactiveInterval(int interval):设定session的有效非活动时间,以秒为单位
  4. int getMaxInactiveInterval():获取session的有效非活动时间,以秒为单位
  5. void invalidate():设置session对象失效
  6. void setAttribute(String key,Object value):以key/value的形式将对象保存到session中
  7. ObjectAttribute(String key):通过key获取session中保存的对象
  8. void removeAttribute(String key):从session中删除指定key对应的对象

5、application对象

应用对象,它是实现ServletContext接口。Application、Session、request都可以通过setAttribute来设置属性,通过getAttribute来获取属性的值。但是它们的可见范围是不一样的。 
1. Application对象所设置的属性不会过期,它在整个服务器运行过程中都是有效的,直到服务器重启。 
2. Session对象所设置的属性只有在同一个session中可见。 request对象所设置的属性只有在同一次请求之间可见。 
通过Application.getRealPath();可以获得其真实路径。如c:\workspace.metadate.plugins\org.eclipse.wst.server.core\temp0\wtpwebapps\项目名(这是项目最后部署完成的一个目录)。

application对象常用的方法:

  1. void setAttribute(String key,Object value):以key/value的形式将对象保存到application
  2. ObjectAttribute(String key):通过key获取application中保存的对象
  3. String getRealPath(String path):返回相对路径的真实路径

6、page对象

JSP网页在翻译时会转换成一个servlet(而此servlet是一个类)。

它是JSP网页本身,page对象是当前网页转换后的servlet类的实例。

7、config对象

一般用来配置指定的JSP参数,它是实现了ServletConfig接口。

8、exception对象

在可能产生错误的文件中用page指令指定errorPage(例如在test.jsp页面中设置errorPage=”error.jsp”),然后在error.jsp页面中指定isErrorPage=”true”,用exception对象获取错误信息。

9、pageContext对象

它是PageContext类的一个实例。

它主要有以下两个作用:

1. 获取其它八大对象的句柄

pageContext.getOut();       //获得out对象的句柄
pageContext.getRequest();     //获得request对象的句柄
pageContext.getResponse();    //获得response对象的句柄
pageContext.getSession();     //获得session对象的句柄
pageContext.getServletContext();//获得application对象的句柄
pageContext.getServletConfig(); //获得config对象的句柄
pageContext.getException();   //获得exception对象的句柄
pageContext.getPage();      //获得page对象的句柄

2. 设置或获取4(page,request,session,application)个不同范围的值

pageContext.setAttribute("name","zhang");   //只在本页面有效
pageContext.setAttribute("name","zhang",PageContext.REQUEST_SCOPE);  
相当于request.setAttribute("name","zhang"); //只在同一次请求中有效
pageContext.setAttribute("name","zhang",PageContext.SESSION_SCOPE);  
相当于session.setAttribute("name","zhang"); //只在同一次会话中有效
pageContext.setAttribute("name","zhang",PageContext.APPLICATION_SCOPE);  
相当于application.setAttribute("name","zhang"); //在整个应用中都有效

10丶保存会话Cookie和Session的区别:

        注:Cookie不是内置对象

区别CookieSession
存在Cookie是客户端技术,通常保存在客户端,即本地,IE浏览器把Cookie信息保存在类似于C:\windows\cookies的目录下。因为Cookie在客户端所以可以编辑伪造,不是十分安全Session是服务器端技术,在服务端,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务
 
存储数据只能存储 String 类型的对象能够存储任意的 java 对象
性能Cookie存在客户端对服务器没影响Session过多时会消耗服务器资源,大型网站会有专门Session服务器
作用域Cookie通过设置指定作用域只能在指定作用域有效Session在整个网页都有效
作用时间Cookie可以通过 setMaxAge设置有效时间,即使浏览器关闭了仍然存在关闭网页Session就结束了

Java提供的操作Cookie的API

NO方法类型描述
1Cookie(String name, String value)构造方法实例化Cookie对象,设置Cookie的名称和cookie的值
2public String getName()普通方法取得Cookie的名字
3public String getValue()普通方法取得Cookie的值
4public void setValue(String newValue)普通方法设置Cookie的值
5public void setMaxAge(int expiry)普通方法设置Cookie的最大保存时间,即cookie的有效期,当服务器给浏览器回送一个cookie时,如果在服务器端没有调用setMaxAge方法设置cookie的有效期,那么cookie的有效期只在一次会话过程中有效,用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一次会话,当用户关闭浏览器,会话就结束了,此时cookie就会失效,如果在服务器端使用setMaxAge方法设置了cookie的有效期,比如设置了30分钟,那么当服务器把cookie发送给浏览器时,此时cookie就会在客户端的硬盘上存储30分钟,在30分钟内,即使浏览器关了,cookie依然存在,在30分钟内,打开浏览器访问服务器时,浏览器都会把cookie一起带上,这样就可以在服务器端获取到客户端浏览器传递过来的cookie里面的信息了,这就是cookie设置maxAge和不设置maxAge的区别,不设置maxAge,那么cookie就只在一次会话中有效,一旦用户关闭了浏览器,那么cookie就没有了,那么浏览器是怎么做到这一点的呢,我们启动一个浏览器,就相当于启动一个应用程序,而服务器回送的cookie首先是存在浏览器的缓存中的,当浏览器关闭时,浏览器的缓存自然就没有了,所以存储在缓存中的cookie自然就被清掉了,而如果设置了cookie的有效期,那么浏览器在关闭时,就会把缓存中的cookie写到硬盘上存储起来,这样cookie就能够一直存在了。
6public int getMaxAge()普通方法获取Cookies的有效期
7public void setPath(String uri)普通方法设置cookie的有效路径,比如把cookie的有效路径设置为"/xdp",那么浏览器访问"xdp"目录下的web资源时,都会带上cookie,再比如把cookie的有效路径设置为"/xdp/gacl",那么浏览器只有在访问"xdp"目录下的"gacl"这个目录里面的web资源时才会带上cookie一起访问,而当访问"xdp"目录下的web资源时,浏览器是不带cookie的
8public String getPath()普通方法获取cookie的有效路径
9public void setDomain(String pattern)普通方法设置cookie的有效域
10public String getDomain()普通方法获取cookie的有效域

cookie实现原理:
在这里插入图片描述
session实现原理:
在这里插入图片描述

11丶JSP4大作用域

首先要声明一点,所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。4个JSP内置对象的作用域分别为:application、session、request、page 。JSP内置对象作用域表如下:

名称

作用域

application

在所有应用程序中有效

session

在当前会话中有效

request

在当前请求中有效

page

在当前页面有效

按作用域从小到大排序:

                                                                        page<request<session<application

12丶转发与重定向的区别

一、请求转发和重定向

1)请求转发:
request.getRequestDispatcher(URL地址).forward(request, response)

处理流程:

  1. 客户端发送请求,Servlet做出业务逻辑处理。
  2. Servlet调用forword()方法,服务器Servlet把目标资源返回给客户端浏览器。

2)重定向:
response.sendRedirect(URL地址)

处理流程:

  1. 客户端发送请求,Servlet做出业务逻辑处理。
  2. Servlet调用response.sendReadirect()方法,把要访问的目标资源作为response响应头信息发给客户端浏览器。
  3. 客户端浏览器重新访问服务器资源xxx.jsp,服务器再次对客户端浏览器做出响应。

以上两种情况,你都需要考虑Servlet处理完后,数据如何在jsp页面上呈现。图例是请求、响应的流程,没有标明数据如何处理、展现。

二、转发和重定向的路径问题

1)使用相对路径在重定向和转发中没有区别
2)重定向和请求转发使用绝对路径时,根/路径代表了不同含义
重定向response.sendRedirect("xxx")是服务器向客户端发送一个请求头信息,由客户端再请求一次服务器。/指的Tomcat的根目录,写绝对路径应该写成"/当前Web程序根名称/资源名" 。如"/WebModule/login.jsp","/bbs/servlet/LoginServlet"
转发是在服务器内部进行的,写绝对路径/开头指的是当前的Web应用程序。绝对路径写法就是"/login.jsp"或"/servlet/LoginServlet"。

总结:以上要注意是区分是从服务器外的请求,还在是内部转发,从服务器外的请求,从Tomcat根写起(就是要包括当前Web的根);是服务器内部的转发,很简单了,因为在当前服务器内,/写起指的就是当前Web的根目录。

三、转发和重定向的区别

  1. request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;服务器内部转发,整个过程处于同一个请求当中。
    response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。不在同一个请求。重定向,实际上客户端会向服务器端发送两个请求。
    所以转发中数据的存取可以用request作用域:request.setAttribute(), request.getAttribute(),重定向是取不到request中的数据的。只能用session。

  2. forward()更加高效,在可以满足需要时,尽量使用RequestDispatcher.forward()方法。(思考一下为什么?)

  3. RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。
    sendRedirect()是HttpServletResponse对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。

  4. 重定向可以跨域访问,而转发是在web服务器内部进行的,不能跨域访问。

本章总结

  1. 所谓内置对象就是由Web容器加载的一组实例,在JSP中可直接使用。
  2. out对象用于向浏览器输出数据。
  3. request对象主要用于处理客户端用户提交的请求信息。
  4. response对象与request对象相对应,它可用于控制响应参数丶获取响应流对象。
  5. response对象的sendRedirect()方法用于将请求重定向到一个新的URL上。重定向在客户端发挥作用,通过浏览器重新请求新地址,实现页面转向,在地址栏中可以显示转向后的地址,不能共享上一次请求中的数据。
  6. 转发在服务器端发挥作用,指在服务器内部控制权的转移,通过forward()方法将请求在多个页面间传递。浏览器的地址栏不会显示出转向后的地址,可以共享请求中的数据。
  7. session对象可以为每个客户端独立地保持相关的个人信息,通过sessionid唯一标识每个客户端。
  8. Cookie是由服务器端生成丶发送给客户端浏览器的,浏览器会将其保存在某个目录下的文本文件中。Cookie可以实现浏览器与服务器之间的数据传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Abcdzzr

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

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

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

打赏作者

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

抵扣说明:

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

余额充值