初步认识JSP

一.JSP原理:

(Web服务器是如何调用并执行一个jsp页面的?)

1.      浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,所以我们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet。

    原因分析:

    当我们通过浏览器访问1.jsp时,服务器首先将1.jsp翻译成一个_1_jsp.class,在Tomcat服务器的work\Catalina\localhost\项目名\org\apache\jsp目录下可以看到_1_jsp.class的源代码文件_1_jsp.java

          我们可以看到,_1_jsp这个类是继承 org.apache.jasper.runtime.HttpJspBase这个类的,通过查看Tomcat服务器的源代码,可以知道在apache-tomcat-8.0.36-src\java\org\apache\jasper\runtime目录下存在HttpJspBase这个类的源代码文件,如下图所示: 

         HttpJspBase类是继承HttpServlet的,所以HttpJspBase类是一个Servlet,而_1_jsp又是继承HttpJspBase类的,所以_1_jsp类也是一个Servlet,所以当浏览器访问服务器上的1.jsp页面时,其实就是在访问_1_jsp这个Servlet,_1_jsp这个Servlet使用_jspService这个方法处理请求。

二。

Tomcat服务器的执行流程?

第一次执行:

  1. 客户端通过计算机连接服务器,因为是请求是动态的,所以所有的请求交给WEB容器来处理。
  2. 在容器中找到需要执行的*.jsp文件。
  3. 之后*.jsp文件通过转换变为*.java文件。
  4. *.java文件经过编译后,形成*.class文件。
  5. 最终服务器要执行形成的*.class文件。

第二次执行:

  1. 因为已经存在了*.class文件,所以不在需要转换和编译的过程。

修改后执行:

  1. 源文件已经被修改过了,所以需要重新转换,重新编译。

三。JSP基础语法:

     1.JSP脚本表达式

        <%= 变量或表达式 %>      作用:脚本表达式,它的作用就是向浏览器输出数据

   2.脚本片段:

            <%     多行java代码 %>        <% %>中可以定义变量、编写语句,但不能定义方法

        3.JSP声明:

            <%!     java代码%>       JSP页面中编写的所有代码,默认会翻译到servlet的service方法中, 而Jsp声明中的java代码被翻译到_jspService方法的外面

    3.jsp指令(3个)

           (1) page 指令      include指令       taglib指令

            (2) JSP指令的基本语法格式:     %@ 指令 属性名="值" %>

    (3). page指令

        page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,

       为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置

   属性: 

import属性            

errorPage属性

(4).include指令:
两种形式:
  • @include指令 静态包含
  • <jsp:include>指令      动态包含

静态包含和动态包含有什么区别?

面试题:静态包含和动态包含有什么区别? 答:静态包含是在编译时包含,会把包含到的所有jsp编译成一个Servlet。而动态包含是运行时包含,包含过程中,涉及到的所有jsp对应单独的一个Servlet。而且静态包含性能好的多。

(5)..taglib指令

taglib指令用于在JSP页面中导入标签库。

4.使用page指令解决jsp中文乱码问题:

     注意:

  •     使用Eclipse集成开发工具编写程序时,无须担心JSP文档是以什么码表编码的,它是非常聪明的,只要你指定了            pageEncoding属性的值,那么JSP文档就是以什么码表编码的。

四.jsp运行原理和九大隐式对象

1.运行原理:

         每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。 

2.九大隐式对象:

No.内置对象类型
1pageContextjavax.servlet.jsp.PageContext
2requestjavax.servlet.http.HttpServletRequest
3responsejavax.servlet.http.HttpServletResponse
4sessionjavax.servlet.http.HttpSession
5applicationjavax.servlet.ServletContext
6configjavax.servlet.ServletConfig
7outjavax.servlet.jsp.JspWriter
8pagejava.lang.Object
9exceptionjava.lang.Throwable

五。* jsp属性范围

  • 当前页:一个属性只能在一个页面中取得,跳转到其他页面无法取得。
  • 一次服务器请求:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续取得。
  • 一次会话:一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话表示一个人,这个人设置的东西只要这个人不走,就依然有效)
  • 上下文中:在整个服务器上设置的属性,所有人都可以访问。
  • *属性的操作方法

    No.方法描述
    1public void setAttribute(String name,Object value)设置属性
    2public object getAttribute(String name)取得属性
    3public void removeAttribute(String name)删除属性

    *JSP四种属性范围的具体介绍

    page属性范围(pageContext)在一个页面设置的属性,跳转到其他页面就无法访问了。习惯上(pageContext)。

    request属性范围: request属性范围表示在一次服务器跳转中有效,只要是服务器跳转,则设置的request属性可以一直传递下去。 

             注意: 在requestDemo1.jsp这个页面设置的属性经过超链接这种客户端跳转到别的页面时别的页面是无法取得requestDemo1.jsp中设置的属性的。
  • session属性范围:  session设置的属性不管如何跳转,都可以取得的。当然,session只针对一个用户。
  • application属性范围:因为application属性范围是在服务器上设置的一个属性,所以一旦设置之后任何用户都可以浏览到此属性。

    * jsp四种属性范围的使用场合

    • request 
      如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的。
    • session 
      如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐。
    • application(servletContext) 
      如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在application(servletContext)域中,像聊天数据等。
    六。jsp标签
  • JSP标签介绍:

    JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。
  • Jsp常用标签:
    • <jsp:include>标签
    • 其语法为:

      <jsp:include page="relativeURL | <%=expression %>" flush="true|false" />

    • <jsp:forward>标签
    • 其语法为:

      <jsp:forward page="relativeURL | <%=expression%>" /> 

    • <jsp:param>标签   
      • 语法1

        <jsp:include page="relativeURL | <%=expression%>">
            <jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
        </jsp:include>
        • 1
        • 2
        • 3
      • 语法2

        <jsp:forward page="relativeURL | <%=expression%>">
            <jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
        </jsp:include>
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值