码迷,mamicode.com
首页 > Web开发 > 详细

JSP 技术简述

时间:2018-10-04 22:59:51      阅读:802      评论:0      收藏:0      [点我收藏+]

标签:bean   print   当前系统时间   规范   重用   模板元   应对   new   单行   

  在动态web项目的开发中,经常需要动态生成HTML内容(如系统中的当前在线人数需要动态生成)。如果使用Servlet实现HTML页面数据的统计,则需要使用大量的输出语句。同时,如果静态内容和动态内容混合在一起,那么也将导致程序非常臃肿。为了客服Servlet的这些缺点,Oracle(Sun)公司推出了JSP技术。

1.JSP概述

  JSP(Java Server Pages)是建立在Servlet规范之上的动态网页开发技术,其实质是一个简化的Servlet。在JSP文件中,HTML和Java代码共同存在,其中,HTML代码用于实现网页中静态内容的显示,Java代码用于实现网页中动态内容的实现。为了和传统的HTML有所区别,JSP文件扩展名为jap。

   JSP技术所开发的Web应用程序是基于Java的,其具有以下特征

  (1)预编译

  预编译指在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并且仅指向一次编译。编译好的代码将被保存,在用户下一次访问时会直接执行编译好的代码。这样不仅节约了服务器的CPU资源,还大幅度提升了客户端的访问速度。

  (2)业务代码相分离

  在使用JSP技术开发Web应用时,可以将界面的开发和应用程序的开发分离。

  (3)组件重用

  JSP可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码或者将其作为一个数据存储模型,在JSP页面甚至整个项目中,都可以重复使用这个JavaBean,同时,JavaBean也可以应用带其他Java应用程序中。

  (4)跨平台

  由于JSP是基于Java语言的,它可以使用Java API,所有它也是跨平台的,可以应用与不同的系统,如Windows和Linux。

 

JSP 运行原理

  JSP的工作模式是请求/响应模式,客户端首先发出HTTP请求,JSP程序收到请求后将进行处理并返回处理结果。在一个JSP文件第一次请求时,JSP引擎(容器)把该JSP文件转化成一个Servlet,而这个引擎本身也是一个Servlet。

  JSP运行过程
  (1)客户端发出请求,请求访问JSP文件

  (2)JSP容器先将JSP文件转化成一个Java源文件(Java Servlet源程序),在转换过程中,如果发现JSP文件存在任何语法错误,则中断转换过程,并向服务器和客户端返回出错信息。

  (3)如果转换成功,则JSP容器会将生成的Java源文件编译成相应的字节码文件*.class。该class文件就是一个Servlet,Servlet容器会像处理其他Servlet一样处理它。

  (4)有Servlet容器加载转换后的Servlet类(class文件)创建该Servlet(JSP页面的转换结果)的实例,并执行Servlet的jspInit()方法。jspInit()方法在Servlet的整个生命周期只会执行一次

  (5)执行jspService()方法处理客户端的请求。对于每一个请求,JSP容器都会创建一个新的线程处理它。如果多个客户端同时请求该JSP文件,则JSP容器会创建多个线程,使每一个客户端请求都对应一个线程。

  (6)如果JSP文件被修改了,则服务器将根据设置决定是否对该文件重新进行编译,如果需要重新编译,则使用重新编译后的结果取代内存中的Servlet,并继续上述处理过程。需要注意的是,虽然JSP效率很高,但在第一次调用时往往需要转换和编译,所以会产生一些轻微的延迟。

  (7)如果系统出现资源不足等问题,JSP容器可能会以某种不确定的方式将Servlet从内存中移除,发生这种情况时,首先会调用jspDestroy()方法,然后Servlet实例会被作为垃圾进行处理

  (8)当请求处理完成后,响应对象由JSP容器接收,并将HTML格式的响应信息送回客户端。

技术分享图片

 2.JSP的基本语法

2.1 JSP模板元素

  网页的静态内容。如:HTML标签和文本。

2.2 JSP脚本元素

(1)JSP Scriptlets(脚本片断)用于在JSP页面中编写多行Java代码。语法:

<%
java代码(变量、方法、表达式等 )
%>
<%
    int sum=0;//声明变量
    /*编写语句*/
    for (int i=1;i<=100;i++){
        sum+=i;
    }
    out.println("<h1>Sum="+sum+"</h1>");
%> 

技术分享图片技术分享图片

  • JSP脚本片断中只能出现java代码,不能出现其它模板元素, JSP引擎在翻译JSP页面中,会将JSP脚本片断中的Java代码将被原封不动地放到Servlet的_jspService方法中。
  • JSP脚本片断中的Java代码必须严格遵循Java语法,例如,每执行语句后面必须用分号(;)结束。
  • 在一个JSP页面中可以有多个脚本片断,在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素。
  • 多个脚本片断中的代码可以相互访问,犹如将所有的代码放在一对<%%>之中的情况。如:out.println(x);
  • 单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句。
    <%
        for (int i=1; i<5; i++) 
        {
    %>
        <H1>http://localhost:8080/JavaWeb_Jsp_Study_20140603/</H1>
    <%
        }
    %> 

(2)JSP声明

  JSP页面中编写的所有代码,默认会翻译到Servlet的service方法中,而JSP声明中的java代码会被翻译到_jspService方法外面。

<%!
    java代码:定义变量或者方法
%>

  多个静态代码块、变量和方法可以定义在一个JSP文件中,也可以分别单独定义在多个JSP声明中。

  JSP隐式对象的作用范围仅限于Servlet的_japService方法。所以在JSP声明中不能使用这些隐式对象

JSP声明案例:

 1 <%!
 2 static { 
 3     System.out.println("loading Servlet!"); 
 4 }
 5 
 6 private int globalVar = 0;
 7 
 8 public void jspInit(){
 9     System.out.println("initializing jsp!");
10 }
11 %>
12 
13 <%!
14 public void jspDestroy(){
15     System.out.println("destroying jsp!");
16 }
17 %>

(3)JSP 表达式

  JSP脚本表达式(expression)用于将程序数据输出到客户端,他将要输出的变量或者表达式直接封装在以<%=  %>标记中,语法为:

<%=expression%>

举例:输出当前系统时间:

<%= new java.util.Date() %> 

  JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.print(...)将数据输给客户端

  JSP脚本表达式的变量或者表达式后不能有分号(;)。

技术分享图片技术分享图片

3.JSP注释

  (1)显式注释:直接使用HTML风格的注释:<!- - 注释内容- ->     特点:不安全,费流量;HTML的注释在浏览器中查看源文件的时候是可以看得到的

  (2)隐式注释:直接使用JAVA的注释:///*……*/

 JSP自己的注释:<%- - 注释内容- -%>      特点:安全,省流量

JAVA注释和JSP注释在浏览器中查看源文件时是看不到注释的内容的

<!--这个注释可以看见-->

<%
    //JAVA中的单行注释

    /*
        JAVA中的多行注释
    */
%>

<%
--JSP自己的注释--%>

 

参考:

https://www.cnblogs.com/xdp-gacl/p/3778993.html

2018-10-04 22:28:56 

 

JSP 技术简述

标签:bean   print   当前系统时间   规范   重用   模板元   应对   new   单行   

原文地址:https://www.cnblogs.com/qqiua/p/9743348.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!