关于jsp

  JSP简介
  JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 [1]  是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
  它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
  Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
  

一.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.内置对象类型
1 pageContext javax.servlet.jsp.PageContext
2 request javax.servlet.http.HttpServletRequest
3 response javax.servlet.http.HttpServletResponse
4 session javax.servlet.http.HttpSession
5 application javax.servlet.ServletContext
6 config javax.servlet.ServletConfig
7 out javax.servlet.jsp.JspWriter
8 page java.lang.Object
9 exception java.lang.Throwable

五。* jsp属性范围

 

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

    No.方法描述
    1 public void setAttribute(String name,Object value) 设置属性
    2 public object getAttribute(String name) 取得属性
    3 public 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>
        
posted on 2018-04-21 15:06  尚好的青春最好的我们  阅读(157)  评论(0编辑  收藏  举报