码迷,mamicode.com
首页 > 编程语言 > 详细

Java Web学习(7):JSP基础语法

时间:2016-07-12 14:03:16      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:

        一个JSP页面可以被分为以下几部份:

       1)静态数据,如HTML;

       2)JSP指令,如include指令;

       3)JSP脚本元素和变量;

       4)JSP动作;

       5)用户自定义标签;

       一静态数据

       静态数据在输入文件中的内容和输出给HTTP响应的内容完全一致。此时,该JSP输入文件会是一个没有内嵌

Java或动作的HTML页面。而且,客户端每次请求都会得到相同的响应内容。

       这个静态数据的本质就是HTML文档。

       二JSP指令

       JSP指令控制JSP编译器如何去生成servlet,以下是可用的指令:

       (1)page指令

       page指令通常位于JSP页面的顶端,同一个页面可以有多个page指令。需要注意的是在同一个JSP文件中只

有"import"导入页面指令可以被多次使用。

       page指令语法格式为

      <%@ page 属性1="属性值" 属性2="属性值1,属性值2"... 属性n="属性值n" %>                  

       page指令有以下几个选项:

技术分享

       page指令使用样例:

       <%@ page import="java.util.*" %> //example import导入样例

       <%@ page contentType="text/html" %> //example contentType页面类型样例

       <%@ page isErrorPage=false %> //example for non error page无错页面样例

       <%@ page isThreadSafe=true %> //example for a threadsafe JSP安全线程JSP样例

       我们来看一个样例:在JSP页面中输出当前日期

       date.jsp页面源码:

<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>date页面</title>
</head>
<body>
      <%
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
            
            String string = sdf.format(date);
            out.println(string);
      %>
</body>
</html>

       运行结果:

技术分享

       上面的代码中我们使用page指令分别导入了java.text.SimpleDateFormat和java.util.Date,也是使用page指令指定

当前页面的字符编码格式以及使用的默认脚本语言Java等。

技术分享

       对于更多的page指令,我们深入学习JSP后,会使用得到,逐渐的学习过程就会用到很多的page指令。

       (2)include指令

       include指令是指将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。include指令,用来向

当前页面插入一个静态文件的内容。这个文件可以是JSP、HTML、文本或是Java程序。

       include指令 示包含指令通知JSP编译器把另外一个文件完全包含入当前文件中。效果就好像被包含文件的内容直

接被粘贴到当前文件中一样。这个功能和C语言预处理器所提供的很类似。被包含文件的扩展名一般都是"jspf"(即

JSPFragment,JSP碎片):

       include指令语法格式为:

       <%@ include file="somefile.jsp" %>

       我们来看一个实例:

       我们使用上面显示当前日期的页面date.jsp作为被嵌入的J文件。

       测试include指令的include.jsp页面的代码:

技术分享

       测试结果:

技术分享

       深入JSP以后我们会比较include指令和include动作的区别。

       (3)taglib指令

       taglib指令指的是使用标签库定义新的自定义标签,在JSP页面中启用定制行为。taglib指令是标签库指令描述了

要使用的JSP标签库。该指令需要指定一个前缀prefix(和C++的命名空间很类似)和标签库的描述URI。声明用户使用

自定义的标签,将标签库描述符文件导入到JSP页面。

       taglib指令的语法格式为:

       <%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>

       uri属性:定位标签库描述符的位置。唯一标识和前缀相关的标签库描述符,可以使用绝对或相对URL。

       tagDir属性:指示前缀将被用于标识在WEV-INF/tags目录下的标签文件。

       prefix属性:标签的前缀,区分多个自定义标签。不可以使用保留前缀和空前缀,遵循XML命名空间的命名约定。

       这个我目前还没有使用过,不过可以借鉴别人的文章:JSP中使用taglib

       三JSP注释

       在JSP页面包含三种注释:

       1)HTML注释:

       <!--HTML注释-->       //客户端可见,通过查看源代码

       2)JSP注释:

       <%--JSP注释--%>       //客户端不可见,服务器端注释

       JSP脚本注释:

       //单行注释

       /**/多行注释             //客户端不可见,在java语句中:服务器端注释客户端看不到

       我们还是在JSP页面演示一下:

技术分享

       结果:

技术分享

       四JSP脚本

       JSP脚本是指在JSP页面执行的java代码。

       (1)标准脚本变量

       以下是永远可用的脚本变量:

       out – JSPWriter用来写入响应流的数据

       page – Servlet自身

       pageContext –一个PageContext实例包括和整个页面相联系的数据,一个给定的HTML页面可以在多个JSP之间

传递。

       request –HttpRequest对象

       response –HttpResponse对象

       session –用于保持客户端与服务器连接的对象

       上述的对象变量我们会在以后经常使用到。后续会详细讲解。

       (2)脚本元素

       有三个基本的脚本元素,作用是使Java代码可以直接插入Servlet。

       1)JSP声明

       在JSP页面中定义变量或者方法。声明标签在Java Servlet的类体中放入一个变量的定义。静态的数据成员也可以

如此定义。

       JSP声明语法格式为:<%! Java代码 %>  

       样例:<%! int serverInstanceVariable = 1; %>

       实例:

技术分享

       2)JSP脚本

       JSP脚本是指在JSP页面执行的Java代码。在Java Servlet的类的_jspService()方法中放入所包含的语句。  

       JSP脚本语法格式为:<% Java代码 %>

       样例:<% int localStackBasedVariable = 1; out.println(localStackBasedVariable); %>

       实例:

技术分享

        3)JSP表达式

        JSP表达式是在JSP页面中执行的表达式。在Java Servlet的类中放入待赋值的表达式,表达式注意不能以分号结

尾。
       JSP表达式语法格式:<%=表达式 %>    //注意:表达式不以分号结束

       样例:<%= "expanded inline data " + 1 %>

       实例:

技术分享

       上述实例的最后浏览器查看结果:

技术分享

       五JSP动作

       JSP动作是一系列可以调用内建于网络服务器中的功能的XML标签。JSP提供了以下动作:

技术分享

       对于JSP动作,我们在后面会详细的讲解。

       六JSP页面的生命周期

       JSP页面流程:

技术分享

       JSP生命周期

       jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有

多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程,每个客户端请求对应一个线程。以多线程方式执行可

以大大降低对系统的资源请求,提高系统的并发量及响应时间。但也要注意多线程的编程带来的同步的问题,由于该

servlet始终驻于内存,所以响应是非常快的。

       实例:

技术分享

       结果:

技术分享

       解释:

       第一次请求时JSP引擎解析后生成字节码文件时同时执行jspinit()方法:

       1)JSP引擎先把该JSP文件转换成一个Java源文件(Servlet),在转换时如果发现JSP文件有任何语法错误,转换过

程将中断,并向服务端和客户端输出出错信息。 

       2)如果转换成功,JSP引擎用javac把该Java源文件编译成相应的class文件。

       3)创建一个该Servlet(JSP页面的转换结果)的实例,该Servlet的jspInit()方法被执行,jspInit()方法在Servlet的生命

周期中只被执行一次。

      4)jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果

有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行

可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但不过也应该注意多线程的编程限制,由于该

Servlet始终驻于内存,所以响应是非常快的。




       

Java Web学习(7):JSP基础语法

标签:

原文地址:http://blog.csdn.net/erlian1992/article/details/51887887

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