JSP

1.JSP

1.1 JSP概述

    jsp全称java serverpages(java服务器页面),本质是一个servlet,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。

1.2 JSP原理


1.3 JSP脚本

    JSP有三个基本的脚本元素,作用是使JAVA代码可以直接插入到HTML代码中

(1)声明标签

    格式:<%! inta = 1; %>

    作用:声明的变量在类的成员位置上

(2)脚本片断

    格式:<% inta = 1; out.println(a); %>

    作用:内容会生成在_jspService()方法中

(3)脚本表达式

    格式:<%="hello " + a %>

    作用:它就相当于是out.println()将内容直接输出到页面中,注意表达式不能以分号结尾

1.4 JSP注释

    在jsp页面中可以使用三种注释

(1)可以使用html中注释 

        <!-- html的注释  -->

(2)可以对jsp脚本内容使用java注释 

        //单行注释  /* 多行注释 */  /**文档注释*/

(3)可以使用jsp注释(会被编译系统忽略)

        <%--  jsp注释  --%>

2. JSP指令

2.1 JSP指令概述

         JSP的编译指令是通知JSP引擎的消息,它不直接生成输出,用于指示JSP执行某些步骤和指示JSP表现特定行为。

2.2 JSP指令格式

        语法:<%@ 指令的名称 属性名=”属性值” 属性名=”属性值”%>

2.3 JSP指令分类

    JSP中有三大指令,分别是以下三个:

         Page:设置JSP的属性

         Include:包含页面(页面布局

         Taglib:引入标签库文件

2.4. page指令

    language  :JSP的语言的属性.现在只能是java.

    contentType   :设置浏览器默认的打开的时候的编码.

    pageEncoding    :设置JSP文件保存到硬盘,以及翻译成Servlet保存到硬盘的编码格式.

    import      :设置JSP中引入其他的类.import属性可以出现多次的.

    extends   :设置JSP被翻译成Servlet后继承的类:默认值:org.apache.jasper.runtime.HttpJspBase.修改这个值得话一定要使这个类是一个Servlet才可以.

     autoFlush     :设置自动刷出缓存

     buffer        :JSP的缓冲区的大小。默认8kb

     session       :默认值是true.设置JSP的页面中是否可以直接使用session对象.

     isELIgnored   :设置JSP是否忽略EL表达式.默认值false 不忽略.可以在JSP中写EL表达式.

     isErrorPage   :设置JSP页面中出现错误信息应该如何处理的.

     errorPage     :设置JSP页面中出现错误信息应该如何处理的.

 

    设置全局错误页面:

     <error-page>

            <error-code>404</error-code>

            <location>/404.jsp</location>

     </error-page>

     <error-page>

            <error-code>500</error-code>

            <location>/500.jsp</location>

     </error-page>

2.5. include指令

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

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

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

2.6 taglib指令

        在JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”。例如:<%@ taglibprefix="c" uri="http://java.sun.com/jsp/jstl/core" %>,其中uri是由第三方标签库定义的,prefix表示标签的前缀,这个名称可以随便起。

3. JSP内置对象

request             HttpServletRequest                        getParameter(),setAttribute(),getAttribute();

response           HttpServletResponse                      setStatus(),sendRedirect(),getOutputStream();

session              HttpSession                                   setAttribute(),getAttribute(),removeAttribute();

application        ServletContext                               setAttribute(),getAttribute(),removeAttribute();

page                  Object                                           toString(),wait(),

pageContext      PageContext                                  setAttribute(),getAttribute(),removeAttribute();

out                     JspWriter                                       write(),print(),

config                ServletConfig                                 getInitParamter(),getInitParameterNames(),

exception           Throwable                                      getMessage(),getCause()

 

 

* out对象:先将自身缓存区中的内容输出到response的缓冲区中,由response向页面作出响应.

        out  :JspWriter

        response.getWriter() :PrintWriter

* pageContext:

        一类:用pageContext对象获得其他的8个内置对象. 用来编写一个通用性高的或者框架的时候.

        二类:用来存取数据.向四个域中存取数据.

3.1九个内置对象及其相应类型

 

内置对象

类型

request

HttpServletRequest

response

HttpServletResponse

session

HttpSession

application

ServletContext

config

ServletConfig

page

this(Servlet)

pageContext

PageContext

exception

Throwable

out

JspWriter

3.2获取其他内置对象

        通过pageContext对象可以获取jsp中其他的内置对象.PageContext类中定义了如下八个方法:getPage()、getRequest()、getResponse()、getServletConfig()、getServletContext()、getException()、getSession()等方法,其中getOut()放是在其父类中定义的,有了这些方法,pageContext对象自然能够获取其他八个内置对象了。

3.3 JSP中的域对象

pageContext        pageScope               页面范围

request                requestScope            请求范围

session                 sessionScope            会话范围

application           applicationScope       应用范围

pageContext是一个域对象,常用方法:

        void setAttribute(Stringname,Object value)

        Object getAttribute(Stringname);

        Void removeAttribute(Stringname);

操作其他域中的对象的方法:

    Object getAttribute(Stringname, int scope):

    该方法的第一个参数是域属性的名称,第二个参数指定是从那个域中取出域属性;

    在PageContext中已经定义了如下几个静态常量作为scope的可选值:

         int APPLICATION_SCOPE:表示从application域中获取数据;

         int PAGE_SCOPE:表示从pageContext域中获取数据;

         int REQUEST_SCOPE:表示从request域中获取数据;

         int SESSION_SCOPE:表示从session域中获取数据。

     void setAttribute(String name,Objectvalue,int scope):

        该方法的第一个参数指的是域属性的名称,第二参数指的是域属性的值,第三个参数指定域属性保存的域,scope的取值同上;

    void removeAttribute(Stringname,int scope):

        该方法的第一个参数指的是域属性的名称,第二个参数指的是将指定域属性从哪个域中移出,scope的取值同上;

4. jsp动作标签

4.1 jsp动作标签概述

        JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

4.2 常用的jsp标签

    jsp:forward

    <jsp:forward>标签是用来做请求转发,它与RequestDispatcher接口的forward()方法一样,唯一不同的是它是在jsp页面中使用。

    jsp:include

    <jsp:include>标签的作用使用来包含其他jsp页面,之前学习的include指令属于静态包含,而include动作标签是动态包含,它和RequestDispatcher接口的include()方法一样,是运行级别的包含

    jsp:param

    <jsp:param>标签作为<jsp:forward>标签和<jsp:include>标签的子标签,用来给转发或包含的页面传递数据。

静态包含与动态包含的区别

    

include标签与inclue指令区别:

(1)include指令是静态包含,包含文件中包含了被包含文件的内容.

          include标签是动态包含,它包含的是被包含文件执行后的结果.

(2)include指令不能带参数

          include标签是可以带参数的

5. EL表达式

5.1 EL表达式概述

        EL是Expression Language的缩写,它是jsp内置的表达式语言,从jsp2.0开始,就不让再使用java脚本,而是使用el表达式或动态标签来代替java脚本。

    EL表达式的格式:${表达式}

    EL表达式代替的是java脚本中的<%= …%>,也就是说EL表达式也是向浏览器端输出数据。例如${1+2}会向浏览器端输出3。

5.2 EL表达式的作用

    为了使JSP写起来更加简单,更加安全,可以通过EL表达式来替换jsp页面上的脚本

    EL主要作用:

    (1)获取数据:

        EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象、获取数据。(某个web域中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

    (2)执行运算:

        利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}

    (3)获取web开发常用对象

        EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

    (4)调用Java方法

        EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

    5.3 EL表达式之域查找

        1.pageContext--------------------${pageScope.xxx}

        2.request--------------------------${requestScope.xxx}

        3.session--------------------------${sessionScope.xxx}

        4.application---------------------${applicationScope.xxx}     

        通过el获取时,如果没有查找到,会返回"".除了上面的获取方式外还有一种,例如

        ${requestScope[“xxx”]}

        关于.与[]区别

         []与.在使用方式上是一样的.但是如果名称中包含了"."等特殊字符,就必须使用[]来获取.         例如

         request.setAttribute("login.message","登录失败");

         ${requestScope.login.message}<br>错误的

         ${requestScope["login.message"]}正确的        

        如果没有写范围,会默认从page,request,session.application依次查找

5.4 EL表达式获取复杂数据

    获取数组中数据

        例如:${数组名称[索引] }

      获取List中数据

        例如:${集合名称[索引]}

      获取Map中数据

        例如:${集合名称.key名称}

5.5 EL表达式运算

运算符

说明

范例

结果

+

${17+5}

22

-

${17-5}

12

*

${17*5}

85

/或div

${17/5}或${17 div 5}

3

%或mod

取余

${17%5}或${17 mod 5}

2

==或eq

等于

${5==5}或${5 eq 5}

true

!=或ne

不等于

${5!=5}或${5 ne 5}

false

<或lt

小于

${3<5}或${3 lt 5}

true

>或gt

大于

${3>5}或${3 gt 5}

false

<=或le

小于等于

${3<=5}或${3 le 5}

true

>=或ge

大于等于

${3>=5}或${3 ge 5}

false

&&或and

并且

${true&&false}或${true and false}

false

!或not

${!true}或${not true}

false

||或or

或者

${true||false}或${true or false}

true

empty

是否为空

${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回true。empty还可以与not或!一起使用。${not empty “”}

true

6. EL表达式内置对象

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


6.1pageContext内置对象

    EL表达式的11个内置对象中,有10个内置对象的类型是Map类型,只有pageContext的类型是PageContext。它的使用类似于jsp的内置对象pageContext,. 通过pageContext对象可以获取其他内置对象的任意的属性值。

         常用操作:${pageContext.request.contextPath}

6.2请求参数相关内置对象

请求参数相关的内置对象是:

    param:该内置对象的类型是Map<String,String>,可以用来获取值为单值的请求参数,其中key指的是请求参数的名称,value指的是请求参数的值,使用param获取请求参数与request.getParameter()方法一样。

    paramValues:该内置对象的类型是Map<String,String[]>,可以用来获取值为多值的请求参数,其中key是参数名,value是多个参数值组成的字符串数组。

    注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。

6.3请求头相关内置对象

    与请求头相关的内置对象是:

        header:该内置对象的类型是Map<String,String>,用来获取值为单值的请求头信息,其中key代表的是请求头名称,value代表的是请求头的值;

         headerValues:该内置对象的类型是Map<String,String[]>,用来获取值为多值的请求头信息,key代表的是请求头名称,value代表的是请求头的多个值。

6.4全局初始化参数的内置对象

EL表达式中内置了一个与初始化参数相关的对象:

        initParam:该内置对象的类型是Map<String,String>,用来获取web.xml文件中<context-param>标签的参数值,其中key代表的是参数名,value代表的是参数值。

6.5 cookie相关内置对象

    EL表达式也内置一个名为cookie的对象,该内置对象与cookie相关,如下:

    cookie:该内置对象的类型为Map<String,Cookie>,其中key是Cookie的名字,value是Cookie对象本身。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值