JSP基础

JSP

本质是Servlet,(一个特殊的java类)---响应用户请求

 

Servlet开发:

      包含包含大量文本及格式,静态的HTML标签,所有布局,色彩,图像等都耦合在java代码中,效率低下

Jsp弥补这些不足。

 

Jsp组成:

       静态部分:标准的html标签,静态页面内容,这些内容与静态html页面相同。

       动态部分:java程序

 

Jsp页面工作原理结论:

1.Jsp文件必须在jsp服务器内运行

2.Jsp文件必须生成servlet才能执行

3.每个jsp页面的第一个访问者速度会有点慢,因为需要等待jsp编译成servlet。

4.Jsp页面的访问者无须安装任何客户端,因为jsp页面输送到客户端的是标准html页面。

 

JSP的四种基本语法:

       Jsp注释:

              <%--注释内容--%>

       Jsp声明:

              <%! 声明部分 %>

       Jsp输出表达式:

              <%=表达式%>

       Jsp小脚本:

              <%java代码%>

Jsp三个编译指令:

       通过jsp引擎的消息,不能直接生成输出,编译指令都有默认值

       在将jsp编译成servlet时起作用

       使用编译指令语法格式:

              <%@编译指令名 属性名=”属性值”...%>

  1. Page指令:

针对当前页面的指令,通常位于jsp页面顶端,一个jsp页面可以有多条page指令

属性:

language,extends,import,session,buffer,autoFlush,errorPage,info…

  1. Include指令:

可以将一个外部文件嵌入到当前jsp文件中,同时解析这个文件中的jsp语句,

这是个静态的include语句,会把目标页面的其它编译指令也包含进来,动态的include则不会

静态include

会将被包含的页面加入本页面,融合成一个页面,因此被包含甚至不需要是一个完整页面,语法格式:

       <%@include file=”relativeURLSpec”%>

                            动态include:

                                   如果被嵌入文件经常需要改变,建议使用<jsp:include>

  1. Taglib指令:   

定义和访问自定义标签

 

       Jsp7个动作指令:

              动作指令是运行时的动作

1.forward指令:

将页面响应转发到另外的页面

 

语法:

<jsp:forward page=”{relativeURL|<%=expression%>}”>

        {<jsp:param …/>}

</jsp:forward>

        增加的请求参数值可以通过HttpServletRequest类的getParameter()方法获取。

 

*<jsp:forward…/>并没有重新向新页面发送请求,完全采用一个新页面对用户生成响应—请求依然是一次请求,即请求参数,请求属性都不会丢失。

 2.Include指令:

                     动态include指令,仅仅将被导入页面的body内容插入本页面

 

                     语法格式:

<jsp:include page=”{relativeURL|<%=expression%>}” flush=”true”>

        {<jsp:param name=”” value=””/>}

</jsp:include>

Flush用于指定输出缓存是否转移到被导入的文件中

        True:包含在被导入文件中

        False:包含在原文件中

增加的请求参数值可以通过HttpServletRequest类的getParameter()方法获取。

*静态导入和动态导入区别:

 *静态导入是将被导入页面代码完全融入,两个页面融合成一个整体servlet

        ,而动态导入则在servlet中使用include方法来引入被导入页面的内容

 *动态导入还可以增加额外的参数

 

**forward拿目标页面代替原有页面,include的页面只是插入原有页面**

 

     3.useBean,setProperty,getProperty指令:

                     三个指令都与javaBean相关的指令

                     a).userBean用于jsp页面中初始化一个java实例

                            语法格式:

                            <jsp:useBean id=”a” class=”..” scope=”page|request|session|application />

                                   Id:实例名      class:实现类    scope:作用范围

                                   Page:该javaBean实例仅在本页面有效

                                   Request: 该javaBean实例仅在本次请求有效

                                   Session: 该javaBean实例仅在本次session有效

                                   Application: 该javaBean实例在本应用内有效

                     b).setProperty用于为javaBean实例的属性设值

                            语法格式:

                            <jsp:setProperty name=”a” property=”..” value=”..”/>

                            Name:确定需要设定javaBean的实例名

                            Property:确定需要输出的属性名

                            Value:确定需要设置的属性值

                     c).getProperty用于输出javaBean实例的属性

                            语法格式:

                            <jsp:getProperty name=”a” property=”..” />

                            Name:确定需要输出javaBean的实例名

                            Property:确定需要输出的属性名

             

              4.plugin指令:   

                     用于下载服务器端的javaBean或Applet到客户端执行

              5.param指令:

                     设置参数值,不能单独使用可以结合以下三个指令是用:

                            Jsp:include,jsp:forward,jsp:plugin

 

jsp脚本9个内置对象

application,config,exception,out,page,pageContext,request,response,session
        这9个内置对象都是Servlet API接口实例
        由jsp页面对应Servlet的_jspService()方法来创建这些实例
        即它们已经是对象可以直接使用,只能在jsp小脚本,jsp输出表达式中使用这些内置对象

    

1.    application:
        a)    javax.servlet.ServletContext的实例
        b)    该实例代表jsp所属的web应用本身,可用与jsp页面,或者在Servlet之间交换信息。
    作用:
        在整个web应用的多个jsp,servlet之间共享数据
        在application里通常放入web应用状态数据
        访问web应用配置参数
        
    方法:
        属性设值:setAttribute(String attrName,Object value)
        获取属性值:getAttribute(String attrName)
        获取配置参数:getInitParameter(String paramName)
        配置参数应该在web.xml文件中使用context-param元素配置,对整个web应用有效
            <context-param>
            <param-name>web参数名</ param-name>
            <param-value> web参数值</param-value>
            </context-param>
2.    config:
 
       a)    javax.servlet.ServletConfig的实例
        b)    该实例代表jsp配置信息
        
        方法:
        获取配置参数:getInitParameter(String paramName)
        Web.xml内:
            <servlet>
            <init-param>
            <param-name>web参数名</ param-name>
            <param-value> web参数值</param-value>
            </init-param>
            </servlet>
        如果希望jsp页面可以获取web.xml配置文件中的配置信息,必须通过为该jsp配置路径来访问页面
        <servlet-mapping>
        <!—指定a servlet配置到/b路径-->
        <servlet-name>a</servlet-name>
        <servlet-pattern>/b</servlet-pattern>
        </servlet-mapping>

3.    exception:
    a)    java.lang.Throwable的实例
    b)    代表其他页面中的异常和错误
    Jsp脚本和静态html部分将转换成_jspService()方法里执行性代码,已经处于try…catch中,所以无需在处理异常
    但jsp声明部分依然需要处理异常
    通过page指令的errorPage属性指定异常处理页面a
     将异常处理页面a中page指令中的isErrorPage属性设置为true,才可以访问exception内置对象
    
4.    out:
    a)    javax.servlet.jsp.JspWriter的实例
    b)    代表jsp页面输出流
    <%=..%>表达式本质就是out.print(..)
    所以使用out地方都可以使用输出表达式代替,更加简洁
    
5.    page:
    a)    代表页面本身,也就是Servlet中的this
    
6.    pageContext:
    a)    javax.servlet.jsp.PageContext实例
    b)    代表jsp页面上下文,使用该对象可以访问页面中的共享数据。
    c)    还可以用于获取其他内置对象
    提供如下两个方法访问page,request,session,application范围变量:
    getAttribute(String name):取得page范围内name属性
    getAttribute(String name,int scope): 取得指定范围内name属性
        scope可以是:
        PageContext.PAGE_SCOPE, PageContext.REQUEST_SCOPE,
        PageContext.SESSION_SCOPE,PageContext.APPLICATION_SCOPE


7.    request:
    a)    javax.servlet.http.HttpServletRequest的实例
    b)    该对象封装一次请求,客户端的请求参数都被封装在该对象里
    c)    Request可代表本次请求范围,所以还可用于操作request范围的属性

    功能:
    获取请求头/请求参数
    请求头和请求参数都是由用户发送到服务器的数据,
    请求头通常由浏览器自动添加,一次请求总是包含若干请求头,
    请求参数则由开发人员添加,让客户端发送请求参数两种情况:
    Get方式:
        对应form的method属性没有设置或者get
        Get请求会将请求参数的名和值转换成字符串,并附加在原URL后,
        在地址栏中可以看到请求参数名和值,传送数据一般不大于2kB
    Post方式:
        对应form的method属性为post
        传送数据量大,安全性高

*********************************************************************************
1.    每个有name属性的form表单域对应一个请求参数
2.    如果多个表单域有相同的name属性,则多个表单域只有一个请求参数,只是该参数有多个值
3.    表单域的name属性指定请求参数名,value指定请求参数值
4.    如果某个表单域设置了disabled=“disabled”属性,则该表单域不在生成请求参
*********************************************************************************

        操作request范围的属性
            SetAttribute(String attName,Object attValue):
            将attvalue设置成为request范围的属性
            Object getAttribute(String attName):
            获取request范围的属性
            Request对象亦可以执行forward或include

8.    response:
    a)    javax.servlet.http.HttpServletReponse的实例
    b)    代表服务器对客户端的响应,但一般用out输出字符流
        Request响应生成非字符响应
    c)    Reponse对象常用于重定向
        会丢失所以请求参数和request范围属性,将生成第二次请求
    d)    增加cookie
        Session会随浏览器关闭而失效,cookie一直存在客户端机器上,直到超出生命周期
        
    Cookie中出现中文字符方法: 
    借助java.net.URLEncoder先对中文字符串进行编码,将编译后结果设为cookie值
    
9.    session:
    a)    javax.servlet.http.HttpSession的实例
    b)    该对象代表一次会话
    会话:
    从客户端浏览器连接服务器开始直到断开为止
    Session范围内的属性可以在多个页面的跳转之间共享,
    Session机制通常保存客户端状态信息,这些状态信息保存到web服务器的硬盘上,即session里属性值必须是可以序列化的
    如果为了两个页面交换信息,可以放入request范围内,然后forward

 

Jsp自定义标签

  1. 开发自定义标签处理类
    1. 继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport
    2. 如果标签类包含属性,每个属性都有对应的getter和setter方法
    3. 重写doTag()方法,这个方法负责生成页面内容
  2. 建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库可包含多个标签
    1. Tld(tag library definition)即标签库定义
    2. 标签库定义文件的根元素是taglib
    3. Taglib子元素:tlib-version,short-name,uri,
    4. Taglib下可以包含多个tag元素(标签元素)
    5. Tag子元素:name,tag-class,body-content,dynamic-attributes
      1. 对于有属性的标签,用<tag../>子元素<attribute../>定义一个属性标签
      2. <attribute../>子元素:name,required,fragment
  3. 在jsp文件中使用自定义标签
    1. 导入标签库,使用taglib编译指令导入标签库,就是将标签库和指定前缀关联起来
      1. <%@ taglib uri=”tagliburi” prefix=”tagPrefix” %>
      2. Uri定位标签库 prefix指定标签库前缀
      1. 使用标签,在jsp页面中使用自定义标签

        <tagPrefix:tagName tagAttribute=”tagValue”…>

        <tagBody />

        </tagPrefix:tagName>

     

           动态属性标签

                  标签处理类额外实现DynamicAttributes接口

                  配置标签时通过<dynamic-attributes../>子元素指定该标签支持动态属性

    以页面片段作为属性的标签

           标签处理类中定义类型为jspFragment的属性,该属性代表页面片段

           使用标签时,通过<jsp:attribute../>动作指令为标签属性指定值

     

    Tag file支持

    使用tag file可以无须定义标签处理类和标签库文件

    Tag建立标签步骤:

    建立tag文件,tag文件有taglib,include,tag,attribute,variable指令

    在jsp中使用标签

    导入标签库

         <%@taglib prefix=”tagPrefix” tagdir=”path”%>

         每个tag flie对应一个标签

    使用标签

         <tags:tagName …./>

    Tag内置对象:request,response,session,application,config,out

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值