1. JSP基础语法
1.1 JSP表达式
<%=变量 %>
相当于 <% out.println(变量) %>
1.2 JSP脚本片段
<%
多行java代码
%>
jsp脚本片断中的Java代码将被原封不动地放到Servlet的_jspService方法中
1.3 JSP声明
<%!
java代码
%>
JSP声明中的java代码被翻译到_jspService方法的外面,可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法
1.4 JSP注释
显式注释:直接使用HTML风格的注释:<!- - 注释内容- ->
隐式注释:直接使用JAVA的注释://
、/*……*/
JSP自己的注释:<%- - 注释内容- -%>
<!--这个注释可以看见-->
<%
//JAVA中的单行注释
/*
JAVA中的多行注释
*/
%>
<%--JSP自己的注释--%>
2. JSP指令
在JSP 2.0规范中共定义了三个指令:
- page指令
- Include指令
taglib指令
JSP指令的基本语法格式:
<%@ 指令 属性名="值" %>
2.1 page指令
<%@ page
[ language="java" ]
[ extends="package.class" ]
[ import="{package.class | package.*}, ..." ]
[ session="true | false" ]
[ buffer="none | 8kb | sizekb" ]
[ autoFlush="true | false" ]
[ isThreadSafe="true | false" ]
[ info="text" ]
[ errorPage="relative_url" ]
[ isErrorPage="true | false" ]
[ contentType="mimeType [ ;charset=characterSet ]" | "text/html; charset=ISO-8859-1" ]
[ pageEncoding="characterSet | ISO-8859-1" ]
[ isELIgnored="true | false" ]
%>
2.2 include指令
在JSP中对于包含有两种语句形式:@include
指令和<jsp:include>
标签
语法:<%@ include file="relativeURL"%>
include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态包含。
由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)
补充:*.jspf扩展名文件
JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。
只有用”@include”指令的时候,jspf文件的内容才会被解析并执行其中的jsp指令和tag,而使用”jsp:include”,jspf文件会被当作纯文本文件处理。
3. 内置对象
3.1 认识九个内置对象
NO | 内置对象 | 类型 |
---|---|---|
1 | pageContext | javax.servlet.jsp.PageContext |
2 | request | javax.servlet.http.HttpServletRequest |
3 | response | javax.servlet.http.HttpServletResponse |
4 | session | javax.servlet.http.HttpSession |
5 | application | javax.servlet.ServletContext |
6 | config | javax.servlet.ServletConfig |
7 | out | javax.servlet.jsp.JspWriter |
8 | page | java.lang.Object |
9 | exception | java.lang.Throwable |
3.2 pageContext对象
pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象(容器),可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
3.3 通过pageContext获得其他对象
- getException方法返回exception隐式对象
- getPage方法返回page隐式对象
- getRequest方法返回request隐式对象
- getResponse方法返回response隐式对象
- getServletConfig方法返回config隐式对象
- getServletContext方法返回application隐式对象
- getSession方法返回session隐式对象
- getOut方法返回out隐式对象
3.4 pageContext作为域对象
pageContext对象可以作为容器来使用,因此可以将一些数据存储在pageContext对象中。
public void setAttribute(java.lang.String name,java.lang.Object value)
public java.lang.Object getAttribute(java.lang.String name)
public void removeAttribute(java.lang.String name)
public java.lang.Object findAttribute(java.lang.String name)
findAttribute方法按照查找顺序”page→request→session→application”在这四个对象中去查找,只要找到了就返回属性值,如果四个对象都没有找到要查找的属性,则返回一个null
4. JSP属性范围
- page属性范围(pageContext):只在本页中有效
- request属性范围:在一次服务器跳转中有效,只要是服务器跳转(forward),则设置的request属性可以一直传递下去
- session属性范围:服务器(forward)和客户端(href)跳转都有效,只针对一个用户
- application属性范围:在服务器上设置的一个属性,一旦设置之后任何用户都可以浏览到此属性。如果服务器关闭,此属性消失
补充:
PageContext类继承了JspContext类,在JspContext类中定义了setAttribute方法,如下:
public abstract void setAttribute(String name,Object value,int scope)
scope参数默认为PAGE_SCOPE,此时setAttribute()方法设置的就是page属性范围,如果传递过来的参数scope为REQUEST_SCOPE、SESSION_SCOPE或APPLICATION_SCOPE时,则此时setAttribute()方法设置的就是request属性范围、session属性范围或application属性范围
5. JSP标签
jsp的常用标签有以下三个:
<jsp:include>
标签<jsp:forward>
标签<jsp:param>
标签
5.1 <jsp:include>
标签
<jsp:include>
标签为动态包含,如果被包含的页面是JSP,则先处理之后再将结果包含,而如果包含的是非*.jsp文件,则只是把文件内容静态包含进来,功能与@include类似
语法:<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
5.2 <jsp:forward>
标签
<jsp:forward>
标签用于把请求转发给另外一个资源。(此跳转属于服务器端跳转。只要是服务器端跳转,地址栏就不会发生变化)
语法:<jsp:forward page="relativeURL | <%=expression%>" />
5.3 <jsp:param>
标签
当使用<jsp:include>
和<jsp:forward>
标签引入或将请求转发给其它资源时,可以使用<jsp:param>
标签向这个资源传递参数。
语法:
<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
<jsp:forward page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:forward>