JSP脚本 9大内置对象

简介

  1. JSP脚一包含9个内置对象,即JSP脚本规范对它们进行了初始化,可以直接使用。
  2. JSP内置对象的实质:request与response是对应Servlet的_jspService()方法的形参,其它则是该方法的局部变量。

1.application

  1. application对象是ServletContext的实例。
  2. 在Servlet中没有application对象,可通过如下代码获取
ServletContext application = getServletConfig().getServletContext();
  1. application可用于在JSP脚本中获取web.xml中使用<context-param>配置的参数。如:
<% String user = application.getInitParameter("user");%>

这也能说明<context-param>配置的参数对整个web应用有效。对应web.xml部分代码:

<context-param>
    <param-name>user</param-name>
    <param-value>zhangchunling</param-value>
</context-param>

4. Jsp与Servlet之间如何交换数据?
Web服务器提供了4个类似Map结构的容器:application、session、request、page

2. config

  1. config对象是ServletConfig的实例,用得较少。
  2. 配置JSP也是在web.xml中配置的(比如为Jsp页面设置另一个URL)。config对象可在JSP脚本中获取web.xml中使用<init-param>配置的对数。
    web.xml中对应的配置JSP的代码:
<servlet>
    <servlet-name>config</servlet-name>
    <jsp-file>/configTest.jsp</jsp-file>
    <init-param>
        <param-name>keyName</param-name>
        <param-value>keyValue</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>config</servlet-name>
    <url-pattern>/config</url-pattern>
    <!-- config是可访问configTest.jsp的另一路径-->
</servlet-mapping>

对应JSP脚本代码:

<%=config.getInitParameter("keyName")%>
//以上结果是:keyValue
  1. 注意
    如果JSP页面希望获取web.xml中的配置信息,则必须通过为该JSP配置的路径(/config)来访问该JSP,因为只有这亲,jsp页面才会让配置对数起作用。
    如:localhost:8080…/config的访问结果是:keyValue,
    而localhost:8080…/configTest.jsp访问的结果是:null。

3. exception

  1. exception对象是Throwable的实例。
  2. exception对象仅在异常处理页面有效,它常用的两个方法:getMessage()和printStackTrace();
  3. Jsp页面生成的Servlet类里的catch部分由异常处理页面生成负责,catch块里的异常对象就是exception对象。
  4. JSP的异常处理机制对JSP声明不起作用,依然需要处理checked异常。
  5. 当jsp页面page指令的isErrorPage属性为true时,该jsp页面就是异常处理页面,所以该页面也就会提供exception对象。

4.out

  1. out对象是JspWriter的实例
  2. out对象代表一个页面输出流,输出内容到HTML页面。如out.println("<h1>h1号的字体</h1>");的结果是:<h1>h1号的字体</h1>
  3. 输出表达式<%=…%>可替代out,因为输出表达式的底层就是out.write(“…”);

5.pageContext

  1. pageContext对象是PageContext的实例。可访问application、session、request、page的变量。
  2. 添加值的两个方法:
    setAttribute(String name);
    setAttribute(String name,int scope); //取指定范围内的name属性的值。scope代表4个范围:
    pageContext.APPLICATION_SCOPE,值为4
    pageContext.SESSION_SCOPE,值为3
    pageContext.REQUEST_SCOPE,值为2
    pageContext.PAGE_SCOPE,值为1
  3. 两个对应的取值的方法:
    getAttribute(String name);
    getAttribute(String name,int Scope); //取指定范围的name属性的值
  4. pageContext对象可获取的其他内置对象:
对象名对象类型获取方法
requestServletRequestgetRequest()
responseServletResponsegetResponse()
configServletConfiggetServletConfig()
applicationServletContextgetServletContext()
sessionHttpSessiongetSession()

6. request

  1. request对象是HttpServletReques的实例,每个request对象都封装着一次用户的请求,且所有请求参数都封装在其中。
  2. 服务器通过JSP或Servlet解析请求头或请求参数,而JSP或Servlet获取请求参数或请求头的途径就是request。我们有时会获取请求头的内容,所以request很重要。
  3. 不是每个form表单都会生成请求参数,而是有name属性的表单才会生成。表单和请求参数的关系注意如下几点:
    1. 一个name属性对应一个请求参数。
    2. 如果有多个name属性同名,则请求参数将以逗号拼接成串生成一个请求参数。
    3. 如果某个name表单域里设置了disabled=”disabled”,则该表单域不再生成请求参数。
  4. request执行forward或include
    1. 使用:getRequestDispatcher(String path)方法返回的RequestDispatcher实例对象后调用forward()或include()方法实现,path以斜线开头。
    2. 将a.jsp页面include到本页面:
      getRequestDispatcher(“a.jsp”).include(request,response);
    3. 转发请求到b.jsp页面:
      getRequestDispatcher(“b.jsp”).forward(request,response);
  5. POST请求与GET请求
    1. GET方式请求:直接在地址栏里输入访问地址的请求,以及提交form表单默认的请求(或是设form元素的method为get)都是GET请求。GET方式请求在地址栏里能看到请求参数名和值(不好),且该方式传送数据量小,一般不大小2KB。
    2. POST方式请求:要提交的表单的form元素的method属性设为post的请求。该种方式请求传输的数据量比GET方式大,取决于服务器的限制。POST请求要发送的请求参数和对应的值都放在HTML HEADER中传输,地址栏里看不到,相对安全。
    3. GET方式请求处理中文参数乱码:
      将得到的内容用URLDecoder类的decode()方法,
      即:String dstr = URLDecoder.decode(request.getParameter(“userName”), “UTF-8”);
    4. POST方式请求处理中文参数乱码:
      需要在获取请求参数之前调用setCharacterEncoding()方法设置编码的字符集,
      即:request.setCharacterEncoding(“GBK”);
      String name = request.getParameter(“userName”);
    5. 可在获取请求参数值后对乱码的参数值重新编码得到正确的值。方法是将值转换成字节数组,然后重新解码成字符串:
      String name = request.getParameter(“userName”);
      byte[] b = name.getBytes(“ISO-8859-1”);
      String rightName = new String(b,”UTF-8”);
  6. 获取cookie
    request.getCookies()方法能获取请求里的所有cookie组成的数组。通过判断cookie的名字判断是哪个cookie。

7.response

  1. response是HttpServletResponse的实例,代表服务器端对客户端的响应
  2. response有响应、重定向、向客户端添加cookie等作用。
  3. 一般使用out对象生成简单的响应,但out对象是Writer类的子类,而Writer是字符流,无法输出字节流。所以如果是图片(或是PDF文档,Excel)这类字节流还是得需要response作为响应输出。
  4. 重定向:response.sendRedirect(“c.jsp”);
    与forward不同的是,因为重定向将生成第二次请求,所以会丢失第一次请求的所有请求参数和request范围的属性。
  5. 添加cookie
//创建Cookie对象
Cookie c = new Cookie("username","zhangchunling");
//设置Cookie对象的生命周期:1天,如果设置生命周期,则Cookie会随浏览器关闭而消失
c.setMaxAge(24*60*60);
//向客户端添加Cookie对象
response.addCookie(c);

Cookie值默认不允许出现中文字符,如果有中文字符,则需要编码:

Cookie c = new Cookie("username",java.net.URLEncoder.encode("张春玲","GBK"));
c.setMaxAge(24*3600);
response.addCookie(c);

在得到cookie后,又用java.netURLDecoder解码cookie值即可。

8. session

  1. session对象是HttpSession的实例,代表一次用户会话
    一次用户会话:浏览器连接服务开始到与服务器断开的过程。所以浏览器关闭,session就消失。
  2. session常用于跟踪用户的会话信息,如判断是否登录或是购物车购买的商品等。其他信息一般不会放在session里。
  3. session机制通常用于保存客户端的状态信息,这些状态信息需要被保存到Web服务器的硬盘上,所以要求session里的属性值必须是可序列化的,否则会有不可序列化的异常。session里的属性值可以是任何可序列化的Java对象。
  4. 每个session都有一个ID,当服务器与客户建立会话后,session就会在内存中保存一个jsessionId,然后放在响应的header里给客户端保存,客户端继续访问时,会将jsessionId封装进request当中,这样服务器就能判断是新的会话还是已建立的会话。
    所以,只要每次请求把服务器生成的jsessionId带过去,服务器端就会认为是同一个会话

9. page

page对象代表页面本身(即Servlet中的this),没多大用处,它的类型就是生成的Servlet类,能用page的地方就能用this。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值