JSP基本原理

JSP本质是Servlet,使用JSP时,Web应用中的每个JSP页面都会由Servlet容器生成对应的Servlet。
就Tomcat而言,JSP页面生成的Servlet放在work路径对应的web应用下。

JSP的4种基本语法

JSP注释

<%-- --%>
不会出现在源码中(HTML注释<!-- -->

JSP声明

<! 声明部分 >
JSP声明将会转换成对应Servlet的成员变量或成员方法

输出JSP表达式

<%= 表达式%>
表达式语法后不能有分号

JSP脚本

<% %>
JSP脚本将转换成_jspService方法里的可执行性代码,所以JSP脚本里不能定义方法

JSP的三个编译指令

`<%@ 编译指令名 属性名=“属性值” %>’

page指令

属性:language 当前JSP页面的语言,默认Java,无需设置
extends 指定JSP页面编译所产生的Java类所继承的父类,或所实现的接口
import 导入包,默认倒入的包有java.lang.*、
session 设定这个页面是否需要HTTP Session
buffer 指定输出缓冲区的大小
autoFlush 当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容
info 设置该JSP程序的信息,即说明。getServletInfo()方法获取该值
errorPage 指定错误处理页面
isErrorPage 设置本JSP页面是否为错误处理程序
contentType 用于设定生成网页的文件格式和编码字符集,即MIME类型和页面字符集类型,默认text/html,ISO-8859-1
pageEncoding 指定生成网页的编码字符集

include指令

<%@ include file = "xxx.jsp"%>
将外部文件嵌入到当前JSP文件中,包含编译指令

taglib指令

用于定义和访问自定义标签

JSP的7个动作指令

  • jsp:forward : 执行页面转向,将请求的处理转发到下一个页面
<jsp:forward page="{relativeURL|<%=expression%>}">
    {jsp:param.../}
</jsp:forward>
<jsp:forward page="xxx.jsp">
    {jsp:param name="age" value="18"/}
</jsp:forward>
  • jsp:param:用于传递参数

  • jsp:include:动态引入JSP页面,只是页面的body内容
    静态导入是将导入页面的代码完全融合,合成一个整体Servlet;动态导入在Servlet中使用include方法

  • jsp:plugin:用于下载JavaBean或Applet到客户端执行

  • jsp:usebean:创建一个JavaBean的实例

  • jsp:setProperty:设置JavaBean实例的属性值
    jsp:输出JavaBean实例的属性值
    <jsp:useBean id="name" class="classname" scope="page|request|session|application"/>
    id:实例名 class:实现类 scope:指定实例的作用范围
    page:在该页面有效
    request:在该次请求有效
    session:在本次session有效
    application:在本应用内有效

<jsp:usebean id="p1" class="lee.Person" scope="page"/>
<jsp:setProperty name="p1" property="name" value="yyk"/>
<jsp:setProperty name="p1" property="age" value="18"/>
<jsp:getProperty name="p1" property="name"/>
<jsp:getProperty name="p1" property="age"/>

JSP脚本的9个内置对象

application

让多个JSP、Servlet共享数据

application.setAttribute("id",1)
<!--jsp中-->
application.getAttribute("id")
<!--servlet中,servlet中没有application对象-->
ServletContext sc = getServletConfig().getServletContext();
sc.getAttribute("id")

获得Web应用配置参数

web.xml
<context-param>
     <param-name>driver</param-name>
     <param-value>com.mysql.jdbc.driver</param-value>
</context-param>

jsp
String driver = application.getInitParameter("driver")

config

exception

exception对象是Throwable的实例,代表JSP脚本中产生的错误和异常,是JSP页面异常机制的一部分

<%@ page contentType="text/html; charset=GBK" language="java" isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title> 异常处理页面 </title>
    <meta name="website" content="http://www.crazyit.org" />
</head>
<body>
异常类型是:<%=exception.getClass()%><br/>
异常信息是:<%=exception.getMessage()%><br/>
</body>
</html>

out

out对象代表一个页面输出流,通常用于在页面上输出变量值及常量。
<%= %>
out.write()

page

代表页面本身,通常没有太大用处。即Servlet中的this

pageContext

代表页面上下文,用于访问JSP之间的共享数据。使用pageContext可以访问page,request,session,application范围的变量

getAttribute(String name) (page)
getAttribute(String name, int scope)
scope
1、page      2request     3、session     4、application

request

每个request对象封装着一次用户请求,包括所有请求参数

response

代表服务器对客户端的响应。
常使用的对象 out out是JspWriter的实例,JspWriter是writer的子类,writer是字符流
1、response响应生成非字符响应(图片,PDF)
2、重定向(会丢失所有请求参数)
response.sendRedirect(String path)
3、增加Cookie(不设置生存期限,Cookic随浏览器关闭而自动消失)

Cookie c = new Cookie("username" , name);
// 设置Cookie对象的生存期限
c.setMaxAge(24 * 3600);
// 向客户端增加Cookie对象
response.addCookie(c);

session

代表一次用户会话,从客户顿浏览器连接服务器开始,到客户端浏览器与服务器断开
跟踪用户的会话信息
session里的属性值必须是可序列化的

配置JSP属性

使用<jsp-property-group/>元素配置
<el-ignored/>是否允许使用表达式语言,默认false,允许
<scripting-invalid/>是否允许使用JSP脚本,默认false,允许
<page-encoding/>声明JSP页面的编码
<include-prelude/>隐式包含,页面头
<include-coda/>隐式包含,页面尾

<!-- 关于JSP的配置信息 -->
    <jsp-config>
        <jsp-property-group>
            <!-- 对哪些文件应用配置 -->
            <url-pattern>/noscript/*</url-pattern>
            <!-- 忽略表达式语言 -->
            <el-ignored>true</el-ignored>
            <!-- 页面编码的字符集 -->
            <page-encoding>GBK</page-encoding>
            <!-- 不允许使用Java脚本 -->
            <scripting-invalid>true</scripting-invalid>
            <!-- 隐式导入页面头  -->
            <include-prelude>/inc/top.jspf</include-prelude>
            <!-- 隐式导入页面尾 -->
            <include-coda>/inc/bottom.jspf</include-coda>
        </jsp-property-group>
    </jsp-config>

表达式语言

语法格式:${ expression}
支持算术运算符和逻辑运算符

所有数值都当成浮点数处理

表达式语言的11内置对象

pageContext
pageScope
requestScope
sessionScope
applicationScope
param
paramValues
header
headerValues
initParam
cookie

${param.name}
${param["name"]}
${cookie["name"].value}

表达式语言的自定义函数

Tag File支持

自定义标签的简化用法,无需定义标签处理类和标签库文件

5个编译指令

taglib
include
tag:作用类似于JSP文件中的page指令
attribute:标签属性
variable:标签变量
先导入标签库,再使用标签

;