• (转) 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}

     
     
  • 相关阅读:
    个人作业——软件工程实践总结作业
    用户调查报告
    β总结
    凡事预则立
    学习进度条
    作业八——单元测试练习(个人练习)
    作业七——“南通大学教务管理系统微信公众号” 用户体验分析
    作业六——团队作业(学生成绩录入系统设计与实现)
    作业5——需求分析(学生成绩录入系统)
    作业4.2:结对项目—— 词频统计(第二阶段)
  • 原文地址:https://www.cnblogs.com/kimsimple/p/7486983.html
Copyright © 2020-2023  润新知