JSP语法
jsp简单介绍
JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
jsp页面工作原理:
- 当一个JSP文件第一次被请求的时候, JSP引擎(本身也是一个Servlet) 首先会把这个JSP文件转换成一个 Java源文件 。在转换过程中如果发现JSP文件有语法错误,转换过程将中断,并向服务端和客户端输出出错信息;如果转换成功,JSP引擎用javac把该Java源文件编译成相应的 .class文件 并将该.class文件加载到内存中。
- 其次创建一个 该Servlet的实例,并执行该实例的 jsp Init() 方法(jsp Init()方法在Servlet的生命周期中只被执行一次)。
- 然后创建并启动一个新的线程,新线程调用实例的 jspService() 方法。(对于每一个请求,JSP引擎会创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建 多个线程 ,每个客户端请求对应一个线程)。
- 浏览器在调用JSP文件时,Servlet容器会把浏览器的请求和对浏览器的回应封装成 HttpServletRequest 和 HttpServletResponse 对象,同时调用对应的Servlet实例中的 jsp Service() 方法,把这两个对象作为参数传递到 jsp Service() 方法中。
- jsp Service() 方法执行后会将HTML内容返回给客户端。
JSP页面的基本构成
一个页面JSP通常由以下4种基本元素组成:
- 普通的HTML标记
- JSP注释
- Java脚本元素,包括声明,Java程序片和Java表达式
- Jsp标记,如指令标记,动作标记和自定义标记等
注释
- html注释
<!-- html注释 -->
- Jsp注释
<%-- Jsp注释 --%>
Java程序片
3. <%! 变量或方法定义 %>//这种标记之间可以声明JSP的成员变量和方法,
//在整个JSP页面内有效。它们可以是java语言允许的任何数据类型
4. <% Java代码 %>//在没有 ! 的标记里面声明局部变量
5. <%=java表达式 %>//这个Java表达式可以有算数,逻辑或者条件表达式。但是要注意
// 1. 不可以在<%= 和 %>之间插入语句,就是说输入的内容末尾不能以分号结束
// 2. <%= 是一个完整的符号,百分号%和等于号=之间不能有空格
指令标记
1 page指令标记
<%@ page language="java" contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
page指令标记通常定义的属性有以下四种:
- 1 属性
import
:JSP页面使用page指令标记可以为import
属性指定多个值来引入JSP页面中需要的包中的类 。- 2 属性
language
:用来指定 JSP页面使用的脚本语言,目前该值只能取java
。- 3 属性
pageEncoding
:contentType
中的charset
是指网页内容从服务器发送给客户浏览器时用户所见到内容的编码格式。pageEncoding
是指jsp文件自身存储时所用的编码- 4 属性
contentType
:Jsp页面使用page指令标记只能为contentType
属性指定 一个值,用来确定响应的MIME类型
(MIME类型就是设定某种文件用相应的一种应用程序打开的方式类型)。当用户请求一个 JSP页面时,服务器会告诉客户的浏览器使用contentType
属性指定的MIME类型来解释执行所接收到的服务器为之响应信息。常见的MIME类型有:
text/html(HTML解析器,所谓的网页形式)
text/plain(普通文本)
application/pdf(PDF文档)
application/msword(Word应用程序)
application/vnd.ms-powerpoint(PowerPoint应用程序)
image/jpeg(jpeg图形)
image/png(PNG图像)
image/gif(GIF图形)
2 include指令标记
<% @ include file = "文件的URL"%>
include
指令标记的作用就是把JSP文件
,HTML网页文件
或者其他文本文件
静态嵌入到当前JSP网页中。
所谓静态嵌入就是“先包含后处理”,在编译阶段完成对文件嵌入,
就是先将当前JSP页面与被嵌入文件合并成新的JSP页面,
然后再由JSP引擎将新页面转化成Java文件处理并运行。
所以这里需要注意的就是嵌入文件page
指令的 contentType
属性的值要和当前JSP页面的contentType
属性的值 要一致 ,不然合并后的新JSP页面会有语法错误。
动作标记
1 include动作标记
<jsp: include page = "文件的URL"/>或者
<jsp: include page = "文件的URL">子标记<jsp:include/>
include
指令标记的作用就是把JSP文件
,HTML网页文件
或者其他文本文件
动态嵌入到当前JSP网页中。
所谓动态嵌入就是“先处理后包含”,在运行阶段完成对文件嵌入,
就是在把JSP页面转化成Java文件的时候,不合并两个页面。而是在java文件的字节码文件被加载执行,才去处理include动作标记中引入的文件。与静态嵌入方式相比,动态嵌入执行速度稍微慢点,但是灵活性较高。
这里需要注意的就是嵌入文件page
指令的 contentType
属性的值要和当前JSP页面的contentType
属性的值 可以不一致 ,当不一致的时候不会报语法错误。
2 forward动作标记
<jsp:forward page = "文件的URL"/>或者
<jsp:forward page = "文件的URL">子标记<js :forward/>
forward
动作标记实现页面的跳转。在这里区分一下接下来谈到的response
对象的sendRedirect
方法
forward
为服务器端的跳转,浏览器的地址栏不变;
sendRedirect
为客户端的跳转,就是浏览器地址栏改变为新页面的URL。- 执行到
forward
标记出现处停止当前页面的继续执行,而转向标记中指定的页面;sendRedirect
是所有的代码执行完毕之后再跳转。- 使用
forward
跳转,request
请求的信息能保留到下一个页面;
使用sendRedirect
不能保留request
请求信息
3 param动作标记
动作标记param
不能单独使用,但可以作为include
,forward
动作标记的子标记来使用
<jsp::父标记 page = "接受参数的页面的URL">
<jsp:param name ="参数名" value = "参数值"/>
<jsp:param name ="参数名" value = "参数值"/>
<js :父标记/>
接受参数页面可以使用内置对象request
调用getParamter("参数名")
方法获取动作标记param
传递过来的参数值。