JSP基础

1.jsp是什么(java server page)

sun公司制订的一种服务器端动态页面技术规范。

a.虽然使用servlet也可以生成动态页面,但是过于繁琐(需要使用out.println语句输出),并且维护麻烦(要修改页面,就必须修改java代码)。所以sun才制订了jsp规范。

b. jsp是一个以.jsp为后缀的文件,主要内容是html和少量的java代码。容器(比如tomcat)会将该文件转换成一个对应的servlet然后执行。

c. jsp本质就是一个servlet

2.如何写一个jsp文件

step1.添加一个以.jsp为后缀的文件。

step2.在该文件当中,可以使用以下元素:

1)html (css,js)
    直接写即可。
2)java代码
    a. java代码片断
        <%  java代码   %>
    b. jsp表达式
        <%= java表达式 %>
    c. jsp声明   
        <%!  声明一个方法或者变量  %>
3)指令
    a.什么是指令?
    通知容器,在将jsp转换成servlet时,做一些额外的处理,比如导包。
    b.语法
        <%@ 指令名  属性=值 %>
    c.page指令
        import属性:指定要导入的包。
        pageEncoding属性:告诉容器,jsp文件的编码。
        contentType属性:设置setContentType方法的参数。
        session属性: 缺省值是true,如果设置为false,则不能够使用session隐含对象了。
        errorPage属性:   用来指定一个异常处理页面,当jsp运行出错,容器会调用异常处理页面。
        isErrorPage属性:   缺省值是false,如果值为true,则可以使用exception隐含对象。
    d.include指令
        file属性:指定被包含的文件。

    e.taglib指令
        用于导入jsp标签。
4)隐含对象
    a.什么是隐含对象?      在jsp文件里面,直接可以使用的对象

    b.为什么可以直接使用这些隐含对象?     jsp会被容器转换成一个对应的servlet,在转换过程中,容器会自动添加获得这些对象的代码。

    c.有哪些隐含对象?
        out,request,response,session,application
        exception: 只有在isErrorPage="true"时才能使用。
        pageContext: 容器会为每一个jsp实例都会创建一个唯一的一个符合PageContext接口要求的对象。唯一性:一个jsp实例对应一个pageContext。持久性:只要jsp实例还在,则pageContext会一直存在。 作用1:绑订数据。绑订到pageContext上的数据,只有对应的jsp实例能访问到。作用2: 提供了获得其它所有隐含对象的方法。                                                                                    config: ServletConfig
        page:  jsp实例本身, jsp对应的那个servlet实例。
5)注释
    a. <!-- 注释内容 --> 
        如果注释的内容是java代码,则java代码会执行。
    b. <%-- 注释内容 --%>
        如果注释的内容是java代码,不会执行。

3.jsp是如何运行的?

3.1 容器将jsp转换成一个servlet

html    ----->   service方法里,使用out.write输出。
<%  %> --->   service方法里,照搬。
<%=  %> ---> service方法里,使用out.print输出。
<%!  %> ----> 为servlet增加新的属性和方法。

3.2 容器调用该servlet,包括编译、实例化、调用service方法。

4. jsp标签和el表达式

4.1 jsp标签是什么?

sun公司制订的一种用来替换jsp中java代码的技术,语法类似于html标签,容器遇到jsp标签之后,会找到标签对应的标签类然后执行。

4.2 el表达式是什么?

是一套简单的运算规则,用于给jsp标签的属性赋值。也可以脱离jsp标签直接使用。

4.3 el表达式的使用

4.3.1)访问bean的属性

方式一 

    ${user.username}
    注:
        a.执行过程: 容器依次从pageContext->request->session->application中查找绑订名称为"user"的对象(即调用getAttribute方法),找到该对象之后,调用getUsername方法,然后输出结果。
        b.会将null转换成""输出。
        c.如果依据绑定名找不到对应的对象,不会报空指针异常,仍然输出""。
        d.可以使用pageScope、requestScope、sessionScope、applicationScope来指定查找范围。比如,从session对象中查找: ${sessionScope.user.username}

方式二

    ${user['username']}
    注:
            a.执行过程:同方式一。
            b.允许[]里面使用绑定名。
            c.允许[]里面使用从0开始的下标,用于访问数组中的某个元素。

4.3.2)做一些简单的运算

运算结果可以用来给jsp标签的属性赋值,也可以直接输出。可做算术运算,关系运算,逻辑运算以及判断集合内容是否为空,或者是否为一个空字符串。

4.3.3)读取请求参数值

${param.username}  等价于  request.getParameter("username");
${paramValues.interest}  等价于  request.getParameterValues("interest");

5.jstl (java standard tag lib 即java标准标签库)

使用taglib指令导入要使用的标签。
    uri属性:指定要导入的标签的命名空间。
    prefix属性:指定命名空间的别名。
    命名空间:是为了区分同名的元素而在元素前添加的一个限定。通常是一个域名。

5.1 if标签

a.语法
<c:if test="" var="" scope="">
    标签体
</c:if>
b.当test属性值为true时,容器执行标签体的内容。属性值可以使用el表达式来赋值。
c.var属性指定绑定名,scope属性指定绑定的范围。

5.2 choose标签

a.语法
<c:choose>
     <c:when test="">
     </c:when>
     <c:otherwise>
     </c:otherwise>
</c:choose>
b.when可以出现1次或者多次,表示一个分支;otherwise可以出现0次或者1次,表示例外。
c.当test属性值为true时,执行标签体的内容,可以使用el表达式来给该属性赋值。

5.3 forEach标签

遍历集合或者数组
<c:forEach items="" var="" varStatus="">
</c:forEach>

6.自定义标签

(1)步骤

step1. 写一个java类,继承SimpleTagSupport类。继承SimpleTagSupport类属于简单标签技术
step2. override doTag方法,在该方法里面,编写相应的处理逻辑。
step3. 在.tld文件里面描述标签。

(2)标签的运行过程

step1.容器依据标签的命名空间,找到标签的描述文件(.tld)。
step2.容器依据标签的名字找到对应的标签类。 比如,标签名字为"hello",对应的标签类是"tag.HelloTag"。
step3.容器调用标签类的构造器,创建其实例。
step4.容器将标签的属性值赋给标签对象对应的属性。
step5.容器调用标签对象的doTag方法。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值