JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

(1)jsp概述

1.1 什么是jsp

jsp(java Server Pages)是JavaWeb服务端的动态资源,它与html作用是相同的 显示数据和获取数据

1.2 jsp的组成

JSP=html+Java脚本(代码片段)+JSP动态资源

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

(2)JSP语法

2.1 jsp脚本

jsp脚本就是Java代码片段 分为三种

<%...%> java语句 在标签当中可以定义Java语句 翻译后的Java脚本定义在servler的Service方法当中

<%=...%>java表达式 可以使用它往页面上输出内容 翻译后的变量作为printlin() 或 writer() 方法的参数

<%!...%> java类成员 定义成员变量 方法

2.2 内置对象out(jsp有9大内置对象)

out对象在JSP页面种无需创建就可以使用,它的作用是向客户端输出

<%=…%>out.print()功能是相同的!它们都是向客户端输出,例如:

<%=s1%>等同于<% out.print(s1); %> 

<%=”hello”%>等同于<% out.print(“hello”); %>,也等同于直接在页面中写hello一样。

(3)JSP原理

3.1 jsp是特殊的Servlet

JSP本质是一个servlet,当客户端首次访问服务端的时候 服务器会把jsp编译成servlet 然后再去执行

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

3.2 jsp真身存放目录

JSP生成的Servlet存放在${CATALANA}/work目录下

(4)JSP注释

jsp当中的注释 语法 <%--  --%>

jsp当中的注释在翻译成.java文件时会被忽略 (效率高)

也可以在JSP页面中使用html注释 <!--  --> ,但这个注释在.java中存在 而且会被out对象输出到客户端 但客户端浏览器不显示 因为这是html注释

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

(5)JSP指令

1.JSP指令概述

jsp指令的格式   <%@ 指令名 attr1="" attr2=""%> 一般都会把jsp指令放在JSP文件的最上方 但这不是必须的

 例如:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

jsp中有三大指令: page include  tiglib  最为常用 最复杂的是page

2.page指令(一)

page指令没有必须属性 都是可选属性 例如 <%@ page%>,没有给出任何属性也是可以的

在JSP页面中,任何指令都可以重复出现

<%@ page language="java"%>

<%@ page import="java.util.*"%>

<%@ page pageEncoding="utf-8"%>

这也是可以的

在jsp页面中有4个包内容不需要导入

java.lang.*

javax.servlet.*

javax.servlet.http.*

javax.servlet.jsp.*

2.1 page指令的pageEncoding 和 contentType

pageEncoding 指定当前jsp页面的编码 这个编码是给服务器看的 服务器需要知道当前jsp使用的编码 不然服务器无法正确被jsp编译成.java文件 所以这个编码只需要与真实的页面编码一致即可

contentType 属性与response.setContentType()方法的作用相同 它会完成两项工作 一是设置响应字符流的编码 二是设置content-type响应头 例如: <%@ contentType="text/html;charser=utf-8"%>

默认值都为ISO-8859-1 是无法显示中文的 如果页面有中文 就要设置这两个值

两个只需设置一个即可 当pageEncoding和contentType 只出现一个时 那么另一个值与出现的值相同

如果两个都不出现 那么两个属性的值都是ISO-8859-1

2.2page指令的import属性

方式一 同一个import可以导入多个包 多个包之间使用逗号间隔

        <%@page impor=”java.net.*,java.util.*,java.sql.*”%>

方式二 使用多个page指令导入多个包

<%@ pageimport=”java.util.*”%>

<%@ pageimport=”java.net.*”%>

<%@ pageimport=”java.text.*”%>


2.3 page指令的errorPage和isErrorPage

在一个jsp页面出错后Tomcat会响应给用户错误信息(500) 如果不希望Tomcat给用户输出错误信息

那么可以使用page指令的errorPage来指定错误页面!也就是自定义错误页面

例如:<%@ page errorPage="xxx.jsp"%> 这时 在当前jsp页面出错时 就会跳转到xxx.jsp页面

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签


isErrorPage="true" 默认值为false 设置为true 说明当前页面为专门处理错误页面 

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

2.4 还可以在web.xml 中配置错误页面

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

<error-page>有两种使用方式

<error-code>指定响应码</error-code>

<localhost>指定转发的页面</localhost>

<exception-type>指定抛出的异常类型</exception-type>

<localhost>指定转发页面</localhost>

这种方式会在控制台看到异常信息 而使用page指令时不会在控制台打印异常信息

2.5 page指令的isELlgnored

page指令的isELlgnored属性表示当前jsp页面是否忽略EL表达式 默认值为false 表示不忽略

2.6 page指令的其他属性

language:只能是java

info:jsp说明性信息

isThreadSafe:默认为false 为true时 jsp就只能处理单线程的访问(不允许)

session:默认为true 表示当前jsp页面可以使用session

extends:指定当前jsp页面生成的servlet的父类

3 tiglib指令(二)

在jsp页面使用第三方的标签库时 需要使用taglib指令来“导包”

例如:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

其中 prefix表示标签的前缀,这个名称可以随意起,uri是第三方标签库定义的,所以你要知道第三方定义的uri

4 include指令(三)

include指令表示静态包含,即目的是把多个jsp合并成一个jsp文件!

include指令只有一个属性:file 指定要包含的页面 例如:<%@ include file="b.jsp"%>

动态包含:request.getRequestDispatcher("/JSP/02.jsp").include(request, response);

静态包含:当hel.jsp 页面包含了lo.jsp页面后,在编译hel.jsp页面时,需要把hel.jsp和lo.jsp合并成一个文件 然后再编译成Servlet(.java)文件

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

(6) JSP九大内置对象(面试问题)

1.什么是jsp九大内置对象

再JSP中无需创建就可以使用的9个对象

request 对象  类型 HttpServletRequest

response对象  类型HttpServletResponse

session对象    类型 HttpSession

application对象  类型 ServletContext

out对象       类型JspWriter

page对象     类型Object

exception对象  类型Throwable

config对象        类型ServletConfig

pageContext对象   类型 PageContext

2.JavaWeb4个域对象

request   作用域  在一个请求链里

session   作用域   在一个会话中

ServletContext  作用域  在整个web应用

pageContext   作用域  在当前页面

(7)pageContext对象 

1.作用一 域对象功能

pageContext域对象 它的范围是当前页面 范围是4个域对象最小的

方法:  setAttribute(String name,Object value);

            getAttribute(String name);

            removeAttribute(String name);

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

2.作用二 代理其他域对象功能

还可以使用pageContext来代理其他3个域对象的功能 也就是说可以通过pageContext向其他3个域对象存储数据

pageContext.setAttribute(String name, Object value, int scope); // 在指定范围中添加数据

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

pageContext.getAttribute(String name, int scope);   //获取指定范围的数据 

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

pageContext.removeAttribute(String name, int scope);  //移除指定范围的数据

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

pageContext.findAttribute(String nama);   

//依次在pagerequestsessionapplication范围查找名称为name的数据,如果找到就停止查找 page在范围优先级最高

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

3 作用三 获取其他内置对象

JSP JSP语法 JSP注释 JSP指令 JSP九大内置对象 pageContext域对象 JSP动作标签

(8)JSP动作标签

动作标签的作用是简化Java脚本的

jsp动作标签是javaWeb内置的动作标签 可以直接使用

jsp动作标签的格式 :<jsp:标签名 ...>

<jsp:include> 动态包含

include动作标签是在运行级别完成的包含,即当前JSP和被包含的JSP都会各自生成Servlet,然后在执行当前JSPServlet时完成包含另一个JSPServlet。它与RequestDispatcherinclude()方法是相同的!

例如:<jsp:include page="08.jsp"/>

<jsp:forward> 请求转发

forward标签的作用是请求转发!forward标签的作用与RequestDispatcher#forward()方法相同。

请求转发:当前页面内容不会输出到客户端 转发到的页面会显示输出

<jsp:forward>的作用是“别在显示我,去显示它吧!”。

例如:<jsp:forward page="09.jsp"/>

<jsp:param> 传递参数

<jsp:include page="08.jsp">
     <jsp:param value="xxx" name="username"/>
</jsp:include>