zoukankan      html  css  js  c++  java
  • (转) jsp学习笔记

    from http://www.cnblogs.com/tao975/p/4445070.html

      • 什么是JSP
      • JSP的优势
      • JSP的劣势
      • JSP与PHP的比较
      • JSP工作原理
      • JSP的九大内置对象
      • JSP的三个编译指令
      • JSP的七个动作指令
      • JSP标准标签库:JSTL 
      • EL表达式
    JSP学习思维导图
     

    一、什么是JSP?

        JSP(JAVA Server Pages)是一种跨平台的动态网页技术,在静态网页中嵌入JAVA代码和JSP标记(tag),由Web服务器中的JSP引擎来进行编译并执行嵌入的JAVA代码,生成页面信息返回给客户端。

    二、JSP的优势

    (1) JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。
    (2) JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。
    (3) JSP支持服务器端组件。JSP可以使用成熟的JAVA BEANS 组件来实现复杂商务功能。
    (4) JSP具有强大的可伸缩性。从只有一个小的.Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理。
    (5) JSP标签可扩充性。JSP技术允许开发者扩展JSP标签,定制JSP标签库,所以网页制作者充分利用与XML兼容的标签技术强大的功能,大大减少对脚本语言的依赖.由于定制标签技术,使网页制作者降低了制作网页的复杂度。

    三、JSP的劣势

    (1) 正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。
    (2) java的高效率运行需要占用大量的内存和硬盘空间. 一方面,java的高速运行是通过 .class文件常驻内存来实现的.另一方面,还需要硬盘空间来存储一系列的.java 文件和.class文件以及对应的版本文件。

    四、JSP与PHP的比较

    项目
    PHP
    JAVA
    可复用性
    开发速度
    易维护性
    可移植性
    优-Linux
    Windows、Unix
    Unix 安全性
    开发费用
    多层架构
    数据库访问
    接口不统一
    接口统一
    可扩展性
    面向对象
    差 
    (1) 语言比较 
        PHP是解释执行的服务器脚本语言,首先php有简单容易上手的特点。语法和c语言比较象。
        JSP需要先学好java的语法和熟悉一些核心的类库,懂得面向对象的程序设计方法。所以java不如php好学。 
        Java首先要编译成字节码.class文件,然后在java虚拟机上解释执行。Jsp可以通过servlet和JavaBean的支持产生强大的功能。JavaBean 是一种可复用的、跨平台的软件组件。使用javabean可以方便的实现java代码和html的分离,能够增强系统的功能和软件的复用性。 
     
    (2) 数据库访问比较 
        Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。   
        PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。
     
    (3) 系统设计架构比较 
        PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。运用MVC的设计模式,可具有更加高效、合理的系统架构。使得系统在可拓展性、需求应变性上更好的适应,而且项目越复杂,其优势越明显。而且现在不同的层都已经有一些成熟的开发框架的支持。
        采用Java的Web开发技术,需要使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。
        用Java进行开发前期需要做大量的系统分析和设计的工作。
     
    (4) 跨平台性 
         Java和PHP都有很好的跨平台的特性。几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的操作系统上。  
     
    (5) 性能比较
    • 算术运算:JSP比PHP快很多(PHP是弱类型)
    • 字符串运算:PHP比JSP快很多(JSP使用对象处理)
    • 文件操作:JSP比PHP快
    • 数据库操作:JSP比PHP慢很多(存有争议),但是JAVA使用连接池和PHP使用持久连接(pconnect)性能差不多
        总体来说,PHP与JSP在性能上,差别不了很远,各有优势。
     
    (6) 总结
        综上所述,PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护、可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高。 
        尽管Java的数学计算和数据库访问都有优势,架构也相当完美,但是PHP却可以简单轻松地支持高强度Web访问,能够快速开发应用,支持PHP的虚拟主机多如牛毛,使得用PHP开发一个网站比用Java开发一个网站要快得多,容易的多。Java所拥有的优点只适合传统的以软件项目为核心的开发模式,而PHP更适合于以客户为核心的SaaS的开发模式,因此,PHP目前在Web网站开发的优势完全是因为Web网站开发的特殊性而导致的,并非编程语言特性所决定。

    五、JSP工作原理

    JSP工作原理
     
    JSP执行过程
     
        WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面,具体工作流程如下:
    (1) 每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,在转换过程中如果发现JSP文件有语法错误,转换过程将中断,并向服务端和客户端输出出错信息;
    (2) 如果转换成功,JSP引擎用javac把该Java源文件编译成相应的.class文件并将该.class文件加载到内存中。
    (3) 创建一个该Servlet的实例,并执行该实例的jspInit()方法(jspInit()方法在Servlet的生命周期中只被执行一次)。
    (4) 创建并启动一个新的线程,新线程调用实例的jspService()方法,Servlet容器会把浏览器的请求和对浏览器的回应封装成HttpServletRequest和HttpServletResponse对象作为参数传递到jspService()方法中。(对于每一个请求,JSP引擎会创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程,每个客户端请求对应一个线程)。

    (5) jspService()方法执行后会将HTML内容返回给客户端。

    (6) 如果JSP文件被修改了,服务器将对该文件进行重新编译。如果需要重新编译,则将编译结果取代内存中的Servlet,并继续上述处理过程。 如果在任何时候由于系统资源不足,JSP引擎将以某种不确定的方式将Servlet从内存中移去。当这种情况发生时,先调用jspDestroy()方法, 然后Servlet实例便被标记加入“垃圾收集”处理。

     六、JSP的九大内置对象

    (1) 内置对象特点

    • JSP规范提供,不用编写者实例化。
    • 通过Web容器实现和管理
    • 所有JSP页面均可使用
    • 只有在脚本元素的表达式或代码段中才可使用
    (2) 常用内置对象
    分类
    对象
    输出输入对象
    request、response、out
    通信控制对象
    pageContext、session、application
    Servlet对象
    page、config
    错误处理对象
    exception
    作用域 对象
    request
    request
    session
    session
    page
    response、out、pageContext、config、page、exception 
    application
    application、
    • request对象:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
    • response对象:此对象封装了返回到HTTP客户端的输出,向页面作者提供设置响应头标和状态码的方式。经常用来设置HTTP标题,添加cookie,设置响应内容的类型和状态,发送HTTP重定向和编码URL。
    • session对象:指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例。
    • out对象:JspWriter类的实例,是向客户端输出内容常用的对象。
    • pageContext对象:pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者。
    • config对象:是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
    • page对象:就是指向当前JSP页面本身,代表了正在运行的由JSP文件产生的类对象
    • exception对象:代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用
    • application对象:实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。

    七、JSP的三个编译指令

        JSP编译指令是通知JSP引擎的消息,在将JSP编译成 Servlet 时起作用,处理指令通常可替换成 Java脚本,是 JSP脚本的标准化写法。它不直接生成输出。编译指令都有默认值。

        语法格式:<%@ 编译指令名 属性名="属性值"...%>

    (1) page指令:该指令是针对当前页面的指令,对整个页面有效,主要用来设定一些参数,比如contentType,language等。

    (2) include指令:用于指定包含另一个页面(静态包含),在进行jsp向servlet转换之前,首先是将inclue file里面的内容执行,然后再进行转换,最终只会转换成为一个单一的servlet。

    (3) taglib指令:用于定义和访问自定义标签。

    八、JSP的七个动作指令

        动作指令与编译指令不间,编译指令是通知 Servlet 引擎的处理消息,而动作指令只是运行时的脚本动作。

    (1) forward指令:用于将页面响应转发给另外的页面。既可以转发给静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet。

        执行forward指令转发请求时,客户端的请求参数不会丢失。

        执行forward指令转发请求时,用户请求的地址没有发生变化,但页面内容完全变为被forward目标页的内容。

    (2) include指令:是一个动态include指令,也用于导入某个页面,它不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面。  

        静态include和动态include的区别:静态include是把父页面和包含进来的页面,代码合并后,才一起翻译成servlet,反馈到前台,形成一个HTML页面(编译是发生)。动态include是把父页面和包含进来的页面单独编译,单独翻译成servlet后,在前台拼成一个HTML页面(请求时发生)。

    (3) useBean指令:表示用来在JSP页面中创建一个BEAN实例并指定它的名字以及作用范围。

    (4) getProperty指令:表示获取BEAN的属性的值并将之转化为一个字符串,然后将其插入到输出的页面中。

    (5) setProperty指令:表示用来设置Bean中的属性值。

    (6) plugin指令:表示执行一个applet或Bean,有可能的话还要下载一个Java插件用于执行它。

    (7) param指令:用于设置参数值。

    九、JSP标准标签库:JSTL 

        JSP的标签函数库主要分为五大类:

    JSTL

    前置名称

    URI

    范例

    核心标签库

    c

    http://java.sun.com/jsp/jstl/core

    <c:out>

    I18N格式标签库

    fmt

    http://java.sun.com/jsp/jstl/fmt

    <fmt:formatDate>

    SQL标签库

    sql

    http://java.sun.com/jsp/jstl/sql

    <sql:query>

    XML标签库

    Xml

    http://java.sun.com/jsp/jstl/xml

    <x:forEach>

    函数标签库

    fn

    http://java.sun.com/jsp/jstl/functions

    <fn:split>

    核心标签库:

    功能分类

    标签名称

    表达式操作

    out、set、remove、catch

    流程控制

    if、choose、when、otherwise

    迭代操作

    forEach、forTokens

    URL操作

    import、param、url、redirect

    十、EL表达式

        所有EL都是以${为起始、以}为结尾的。

        EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:${sessionScope.user.sex}等于${sessionScope.user["sex"]}

        . 和 [ ] 也可以同时混合使用:${sessionScope.shoppingCart[0].price}

     
     
  • 相关阅读:
    ubuntu下安装maven
    159.Longest Substring with At Most Two Distinct Characters
    156.Binary Tree Upside Down
    155.Min Stack
    154.Find Minimum in Rotated Sorted Array II
    153.Find Minimum in Rotated Sorted Array
    152.Maximum Product Subarray
    151.Reverse Words in a String
    150.Evaluate Reverse Polish Notation
    149.Max Points on a Line
  • 原文地址:https://www.cnblogs.com/kimsimple/p/7486983.html
Copyright © 2011-2022 走看看