JSP技术

一 JSP概述

JSP全称为Java Server Pages 它实际上和servlet 是sun公司定义的用于开发动态web资源的技术

JSP实际上就是Servlet

jsp = html + java

html:静态内容

servlet:服务器端的小应用程序。适合编写java逻辑代码,如果编写网页内容--苦逼。

jsp:适合编写输出动态内容,但不适合编写java逻辑。

二 JSP的原理:

JSP技术



JSP技术




JSP技术

三、JSP的最佳实践

 Servlet:控制器,重点编辑java代码逻辑

 JSP 代码显示模板 重点显示数据

四、jsp的基本语法

1、jsp模板元素  如HTML标签和文本

2 jsp的脚本

 2.1 小脚本<%java代码%>

 2.2<%= 2+3 %> 等价于out.print(2+3);

2.3、声明   <%! %>表示在类中定义全局成员,和静态块。

3 JSP 注释

        JSP注释  <%--被注释的内容 --%>特点:安全,省流量

        网页注释:<!--网页注释 -->    特点:不安全,费流量

43指令

56动作

69内置对象*****

五、Jsp的三个指令

    JSP指令是为JSP引擎设计的它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。

page 指令

Include指令

taglib指令


作用:用于定义JSP页面的各种属性

page指令详解

属性:

1.1import java代码中的import是一样的

<%@ page import="java.util.Date,java.util.List"%>

或者:

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

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

JSP会自动导入以下的包:

import java.lang.*;

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.jsp.*;

1.2session: 是否会自动创建session对象。默认值是true;

1.3buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8kb.

1.4 errorPage:如果页面中有错误,则跳转到指定的资源。

errorPage="/uri"如果写“/”则代表当前应用的目录下,绝对路径。

如果不写/”则代表相对路径。

    1.5isErrorPage: 是否创建throwable对象。默认是false;

1.6contextType: 等同于response.setContextType("text/html;charset=utf-8");

1.7pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。

1.8isELIgnored: 是否支持EL表达式。 默认是false

<%@ page  pageEncoding="gbk" %>

2include:

静态包含:把其它资源包含到当前页面中。

<%@ include file="/include/header.jsp" %>

动态包含:

<jsp:include page="/include/header.jsp"></jsp:include>

两者的区别:翻译的时间段不同

前者:在翻译时就把两个文件合并

后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。

原则:能用静的就不用动的。

3taglib

作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。

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

六 、JSP的六个动作

 使用标签的形式来表示一段java代码。

如: <jsp:include page="2.jsp"></jsp:include>

<jsp:include > 动态包含

<jsp:forward> 请求转发

<jsp:param> 设置请求参数

 

<jsp:useBean> 创建一个对象

<jsp:setProperty> 给指定的对象属性赋值

<jsp:getProperty> 取出指定对象的属性值



七、jsp9个内置对象

指在JSP<%=%><% %>中可以直接使用的对象

对象名

类型

说明

request

javax.servlet.http.HttpServletRequest

 

response

javax.servlet.http.HttpServletResponse

 

session

javax.servlet.http.HttpSession

session="true"开关

application

javax.servlet.ServletContext

 

exception

java.lang.Throwable

isErrorPage="false"开关

page

java.lang.Object当前对象this

当前servlet实例

config

javax.servlet.ServletConfig

 

out

 javax.servlet.jsp.JspWriter

字符输出流,相当于 printWriter对象

pageContext

 javax.servlet.jsp.PageContext


pageContext: 本身也是一个域对象它可以操作另外三个域对象(request session application 数据)

            

void  setAttribute(String name,Object o);

Object getAttribute(String name);

void removeAttribute(String name);

操作其它域对象的方法

void setAttribute(String name,Object oint Scope);

Object getAttribute(String name,int Scope);

void removeAttribute(String name,int Scope);

scpoe的值:

PageContext.PAGE_SCOPE

PageContext.REQUEST_SCOPE

PageContext.SESSION_SCOPE

PageContext.APPLICATION_SCOPE

 

findAttribute(String name); 自动从page request session application依次查找,找到了就取值,结束查找。

2、它可以创建其它的8个隐式对象

在普通类中可以通过PageContext获取其他JSP隐式对象。自定义标签时就使用。

 

3、提供了的简易方法

pageContext.forward("2.jsp");

pageContext.include("2.jsp"); 

八、四大域对象:实际开发

PageContext:pageContext 存放的数据当前页面有效

ServletRequest:request 存放的数据在一次请求内有效

HTTPSession session 存放的数据在一次回话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。

ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。

九、EL表达式

1、EL表达式 express language 表达式语言简化jsp中 java代码的开发

它不是一种开发语言,是jsp获取数据的一种规范

2、EL的具体功能

a、获取数据

        EL只能获取存在的四个域对象的数据

         ${u}原理   pageContext.findAttribute("u");

          EL获取对于null这样的数据,在页面中表现为空字符串

b、运算

JSP技术

JSP技术

         empty 判断null,空字符串和没有元素的集合(即使集合对象本身不为null)都返回true

三元运算符

JSP技术

c、隐式对象:11

EL隐式对象引用名称

类型

JSP内置对象名称

说明

pageContext

javax.servlet.jsp.PageContext

pageContext

一样的

pageScope

java.util.Map<String,Object>

没有对应的

pageContext范围中存放的数据,页面范围

requestScope

java.util.Map<String,Object>

没有对应的

请求范围数据

sessionScope

java.util.Map<String,Object>

没有对应的

会话范围数据

applicationScope

java.util.Map<String,Object>

没有对应的

应用范围数据

param

java.util.Map<String,String>

没有对应的

一个请求参数

paramValues

java.util.Map<String,String[]>

没有对应的

重名请求参数

header

java.util.Map<String,String>

没有对应的

一个请求消息头

headerValues

java.util.Map<String,String[]>

没有对应的

重名请求消息头

initParam

java.util.Map<String,String>

没有对应的

web.xml中全局参数

cookie

java.util.Map<String,Cookie>

没有对应的

key:cookie对象的name

 

 十、JSTL

1、什么是JSTL        

JSTL(JavaServerPages Standard Tag LibraryJSP标准标签库

2、JSTL的作用

  使用JSTL实现JSP页面中的逻辑处理 如判断循环等

3、使用JSTL

 (1)在JSP页面中添加taglib指令

JSP技术

    (2)使用JSTL标签

  JSP技术

4、常用的标签介绍

       核心标签set 、out 、remove

        JSP技术

    条件标签      if choose

 JSP技术

JSP技术

迭代标签  foreach

普通循环

 

 JSP技术


 

迭带器  for循环

JSP技术