JSP技术学习笔记(一)

JSP全称是Java Server Pages,它和servle技术一样,都SUN公司定义的一种用于开发动态web资源的技术。

JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

一、jsp调用和执行原理

     jsp页面执行时是通过调用servlet的,即使访问的是以XXX.jsp结尾的页面。jsp引擎(引擎本身也是servlet)先把jsp页面翻译成servlet,jsp翻译成的servlet在tomcat目录下的work\Catalina\主机名\...\...\jsp\_页面名称_.java。

     原jsp代码如下:

     打开查看xxx.java源码可以发现原先jsp中编写的代码:

      还可以看到通过<%%>写的java代码被直接带入xxx.java中; jsp说白了就是servlet。

      不管是JSP还是Servlet,虽然都可以用于开发动态web资源,但由于这2门技术各自的特点,在长期实践中,逐渐把servlet作为web应用中的控制组件使用,把jsp技术作为数据显示模板使用;其原因为,程序的数据通常需要美化在输出;

二、JSP语法基础

  1. jsp模板元素: 
    在jsp页面中的html内容称为模板元素;模板元素定义网页的基本骨架;

  2. jsp脚本表达式
     语法<%=  表达式或变量 %>,这条语句的作用就是用于向浏览器输出数据,这条语句在源代码中将被翻译成out.print( 变量或表达式 )
    JSP脚本片断:<% JAVA代码内容 %>,脚本片断中只能出现java代码;在多个脚本片断之间可以嵌入文本,HTML标记等,片断之间的内容也将被应用到页面中;比如:

    <%
    for(int i=1;i<5;i++){
    
    %>
    
    <p>这是p标签</p>
    <%
    }
    %>

    那么这个p标签将会重复5次;需要注意,单个脚本片断可以是不完整的java代码,但多个脚本片断组合后的结果必须是完整的java代码;

  3. jsp注释
    jsp注释:<%--  注释内容  --%>       html注释:<!--   注释内容   -->
    两者的区别在于,html注释的内容将被输出到浏览器中,而jsp注释的内容则不会,过多使用html注释会增加传输的流量,增大数据传输的压力;
  4. jsp指令
    jsp指令并不直接产生任何可见输出,知识告诉jsp引擎如何处理jsp页面的其余内容;
    jsp页面中不陌生的<%@ page %>就是一条指令;
    指令page:<%@ page %>
    page指令定义jsp页面的各种属性,在习惯中page指令最好放在整个jsp页面的起始位置;
    page指令完整语法:
    <%@ page
    
    [language="java"]   告诉jsp引擎嵌入的代码是java代码   
    [extends="package.class"]    翻译后的servlet继承的类
    [import="{package.class|package.*},..."]   
      导包;JSP引擎自动导入下面的包:
            java.lang.*
            javax.servlet.*
            javax.servlet.jsp.*
            javax.servlet.http.*
    [serssion="boolean"]  是否存入session对象
    [buffer="none|8kb|size kb"]   缓冲大小   默认是8kb  
    [autoFlush="boolean"]  为true时缓冲满就自动刷新
    [isTheadSafe="boolean"] 为true时servlet线程不安全
    [info="text"]   带入的信息
    [errorPage="relative_url"] 错误处理页面的url,errorPage属性的设置必须使用相对路径;
    [isErrorPage="boolean"]  说明当前页面是否为错误处理页面
    [contentType="mimeType[;charset="charcterSet"]"] MIME类型一般为text/html
    [pageEncoding="charcterset"] 页面字符编码
    [isELIgnored="boolean"]  是否忽略EL表达式,false为忽略
    %>

    指令include:<%@ include file="页面相对路径"%>
    include指令可以包含页面,当网站内多个网页用了同样的部分时使用,比如淘宝、京东等网页的底部内容大多数网页都存在,几乎没有变动内容,就可以通过include插入相同的部分。
    include指令(静态包含(编译时包含),它包含的所有jsp会编译成一个servlet);
    注:动态包含(运行时包含): 在java代码里 request.getRequestDispatcher(url).include(request,response);
         静、动态包含取舍:建议使用静态包含,因为动态包含是运行时包含,性能上会差一点;
    taglib指令:后续补充;

  5. jsp标签
    常用jsp标签:
    <jsp:forawrd page="/.../"></jsp:forward>
    <jsp:include page="/.../"></jsp:include>
    <jsp:param name="param_name" value="xxxx"></jsp:param>
    
    <!--<jsp:forawrd>和<jsp:include>都是动态包含,开发中最好多用静态包含,而不是动态包含
    
    当使用<jsp:forawrd> 和 <jsp:include>引入或请求其他资源时,通过<jsp:param>传递参数,参数还可以是脚本表达式
    <jsp:param name="param_name" value="param_value | <%= expression %>">
    -->

     

  6. jsp内置对象
    创建jsp页面时,web应用汇给jsp传递九大对象即内置对象,分别是,
    内置对象名          类型
    request	   HttpServletRequest
    response       HttpServletResponse
    config         ServletConfig
    application    ServletContext
    session        HttpSession
    exception      Throwable
    page           Object(this)
    out            JspWriter
    pageContext    PageContext 

     out对象:
     out隐式对象用于向客户端发送文本数据。out对象是通过调用ageContext对象的getOut方法返回的,与ServletResponse.getWriter方法返回的printWriter对象相似,jspWriter相当于一种带缓存功能的PringtWriter,设置JSP页面的page指令的buffer属性可以调整他的缓存大小,甚至关闭。
      只有向out对象写入内容,并满足以下之一时,out对象才调用ServletResponse.getWriter方法,通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到servlet 引擎提供的缓存区中;

     1.设置age命令的buffer属性关闭了out对象的缓存功能;
     2.out对象的缓存区已满
     3.整个jsp页面结束

   pageContext对象:

   这个对象是jsp中最重要的一个对象,它代表jsp页面的运行环境;

这个对象不仅封装了对其他8大隐式对象的应用,它自身还是一个域对象,可以用来保存数据。丙炔,这个对象还封装了web'开发中经常涉及的一些常用操作, 例如引入和跳转其他资源、检索其他域对象中你的属性等。

   通过pageContext获得其他对象:

getException方法返回exception隐式对象;

getPage方法返回page隐式对象;

getResponse方法返回response隐式对象;

getServletConfig方法返回config隐式对象;

getServletContext方法返回application隐式对象;

getSession方法返回session隐式对象;

getOut方法返回out隐式对象;

pageContext取得八大对象的方法在开发中有着特殊意义,这个技术用在自定义标签开发中,因为jsp页面中不应该出现任何一行java代码,如果没有这个技术那么为了获取数据就可能无法避免在jsp页面中的使用java代码,这样的jsp将会是格式不良好的jsp。
pageContext对象还是一个域对象:

在四大域中pageContext域的作用范围是:整个jsp页面。它是四个域中范围最小的一个域。
---关于四大域的知识总结链接---

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值