JSP 技术

xiaoxiao2023-03-27  45

         JSP(Java Server Pages):其本身就是 Servlet 的简化,由Sun公司建立的一种以 java 语言作为脚本语言的动态网页技

术标准,在传统的网页HTML文件(*. htm、*. html)中加入Java程序片段(Scriptlet) 和 JSP标记(tag),构成了JSP网页(*. jsp)

(JSP适合编写输出动态内容,但不适合编写 java 逻辑)

                            

【JSP的基本语法】(3个编译指令、7个动作指令、9个内置对象)

         * JSP页面的构成:由模板元素HTML(静态HTML和XML内容)、指令元素(是以<%@开头,以%>结尾)、脚本元素、

元素(行为元素)(如:<jsp:useBean>)和注释元素组成(如:<<!--......-->>)

        1、模板元素(放置在service方法中当作 out.write() 的字符串参数直接向客户端输出)

        2、指令元素(用于从 jsp 发送一个信息到容器,比如设置全局变量,文字编码,引入包等)

             (1)page 指令(在转译成Servlet时对页面指定的一些配置信息)

                           <%@page contentType="text/html;charset=gbk"%>

             (2)include 指令(静态包含,不能向被包含的文件传递参数)

                            <%@include file="filename"%>

             (3)taglib 指令(导入标签库描述文件,允许在jsp页面运行自定义的标签)            

                            <%@ taglib uri="URL" prefix="标签引用前缀"%>

          3、脚本元素(可以理解为 java片段(script))

            (1)表达式expression_r(放置在service方法中当作out.print()的参数)

                            <%=java表达式%> <%=rs.getString(1)%>(计算表达式的值,并输出到客户端)

             (2)脚本script(java程序片段)(放置在service方法中当作普通代码来处理,声明的变量是局部变量)

                             <%java代码%>

             (3)声明declaration(当作Servlet的成员看待,与service方法平级)

                             <%! 变量或方法的定义 %>(声明的是成员变量,成员方法)

            4、动作元素(用XML语法写,运行时命令)

                     <jsp:动作名 属性名="值">...</jsp:动作名>

                     <jsp:动作名 属性名="值"/>

                a. useBean,setProperty,getProperty

                    (1) <jsp:useBean>       //创建一个javabean实例

                    (2) <jsp:setProperty>     //给一个javaBean实例设置初始值

                    (3) <jsp:getProperty>   //取得一个javaBean实例的成员变量

                 b. include(动态包含),param(设置参数)

                    (4) <jsp:include>          // 引入另外一个文件

                    (5) <jsp:param>           // 给一个jsp设置参数,常常与<jsp:include>结合使用

                                    <jsp:include file="info.jsp">

                                                   <jsp:param name="parameter1" value="parameterValue"/>                                                    <jsp:param name="parameter2" value="parameterValue"/>                                 

                                   </jsp:include>

                 c. forward(请求分派)

                       (6)<jsp:forward>         //转发                                         <jsp:forward page="URL">                                         <jsp:param name="参数名" value="值">

                          </jsp:forward>

                   d. plugin(使用插件),fallback

                       (7) <jsp:plugin>            //使用插件            5、注释元素Comment(<%--  --%> ,直接忽略,客户端不能查看到)

    * JSP的隐含(内置)对象(9个)

             1、输入/输出对象

                  (1)out (从客户端输出数据,字节流 out.println("");)

                  (2)request (接受客户端的http请求<-->servlet的HttpServletRequest)

                               getParameter(String name);//name表示表单的参数名

                               getParameterValues(String name);//使用得到的是String[]

                               setAttribute(String name,Object obj);//设置名字为name的obj,值为obj

                               getAttribute(String name);//返回由name指定的属性值,如果不存在就返回null

                               getCookie();

                     (3)response (封装jsp产生的回应)

                              addCookie(Cookie cookie);

                              sendRedirect("/welcome.jsp");

               2、作用域通信对象 

                   (1)pageContext(代表 jsp 页面的上下文,能够存取其他隐含对象)

                   (2)requset(多个用户共享该对象,可以做计数器)

                   (3)application(多个用户共享该对象,可以做计数器)

                   (4)session(用于保存用户的信息,跟踪用户的行为)

            

                 3、Servlet对象

                     (1)page(代表jsp这个实例本身(使用的比较少)

                     (2)config (代表对应的servlet的配置可以得到web.xml中的参数)

                 4、错误对象

                              exception (代表运行时的一个异常)、getMessage()

 

总结:include 指令和 include 动作的异同:                  

           (1) 都是在一个页面中把另一个页面的内容包含进来               

           (2) include指令是在转译时把目标页面的内容添加到当前页面对应的Servlet的service方法,不能传递请求参数。

include动作是在执行时才把目标页面的内容包含过来,可以传递请求参数

 

【EL表达式】(JSP 2.0默认启用EL表达式)

           * 基本语法:所有EL都是以 $ { expression } 为结尾的(expression为具体表达式内容)     

           * 工作原理:依次从PageContext、HttpServletRequest、HttpSession、ServletContext中查找名字为 “ expression ” 的

属性所对应的属性值,如果没有对应的属性,则返回空字符串(同名选择靠前的)

          *  EL主要作用: 主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索 java对象和获取数据

               1、执行运算

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

逻辑运算(${user==null})

               2、获取web开发常用对象

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

                   (1)使用EL表达式获取数据语法:${标示符}

                   (2)EL表达式语句在执行时,会调用pageContext.findAttrubute方法,用标示符为关键字,分别从page、request、

session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回空字符串

                 3、EL表达式可以获取 JavaBean 的属性或获取数组、Collection、Map类型集合的数据 

                         *  ${user.address.city}

                             ${user.list[0]}:访问有序集合某个位置的元素

                             ${map.key}:获得map集合中指定的key的值

                       *   结合 JSTL 的foreach标签,使用EL表达式也可以很轻松迭代各种类型的数组和集合(迭代数组、迭代

collection类型集合和迭代map类型集合)

            * EL隐式对象(11个)

                1、与作用范围有关(作用域,4个)的 EL隐含对象包有 pageScope、requestScope、sessionScope 和

applicationScope,可以读取使用JSP内置对象pageContext、request、session以及application的setAttribute()

所设定的对象的数值,即getAttribute(String name),却不能取得其他相关信息

               2、与输入有关(请求参数,2个)的隐含对象有两个,即param 和 paramValues,要取得用户参数时,可以利用下列

方法:request.getParameter(String name)和request.getParameterValues(String name)(返回一个数组)

                 在EL中则使用param和paramValues来读取数据: ${param.name}和${paramValues.name[]}(用数组直接获取,不用循环)

             3、 其他隐式对象(4个) 

                   * cookie,用来取得使用者的cookie值,在cookie中设定了username属性值,可以使用${cookie.username.values}来

取得属性值

                  * header和headerValues,使用header或headerValues内置对象,如在${header["User-Agent"]},headerValues则用

来取得所有的头信息(请求头),等价于调用request.getHeader()方法

                 * initParam(初始化参数),用来读取设置在web.xml中的参数值,如${initParam.repeat},等价于

(String)application.getInitParameter("repeat")或servletContext.getInitParameter("repeat")

                 *pageContext,用于取得其他有关用户要求或页面的详细信息      

                            ${pageContext.request.queryString}  //取得请求的参数字符串                             ${pageContext.request.requestURL}  //取得请求的URL,不包括参数字符串                             ${pageContext.request.contextPath}  //取得服务web application的名称                             ${pageContext.request.method}  //取得HTTP的方法(GET和POST)                               ${pageContext.request.protocol}  //取得使用的协议(HTTP/1.1HTTP/1.0)                               ${pageContext.request.remoteAddr}  //取得用户的IP地址                             ${pageContext.session.new}  //判断session是否为新                             ${pageContext.session.id}  //取得session的ID                             ${pageContext.servletContext.serverInfo}  //取得主机端的服务信息

 

【JSP标准标签库】(JSTL)

           * 是一个JSP标签集合,封装了JSP应用的通用核心功能,支持通用的、结构化的任务,XML文档操作,国际化标签和

SQL标签,除了这些,还提供了一个框架来使用集成JSTL的自定义标签

          * 根据JSTL标签所提供的功能,可以将其分为5个类别:核心标签(最常用的JSTL标签)、格式化标签、SQL标签、XML

标签以及JSTL函数     

                                

【自定义标签】

           * 自定义标签流程:

                 (1)根据业务要求确定标签的形式

                 (2)编写标签处理器类

                 (3)编写的标签的tld文件

                 (4)在web.xml文件中配置tld文件(在servlet2.4规范以后,不需要在web.xml文件中配置 )

                 (5) 在jsp页面使用taglib指令引入标签库,其中uri代表标签描述文件的位置,prefix:建议使用的前缀名

                 (6)在页面中使用自定义标签

【请求重定向与请求转发】

         * 请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏

的URL地址会改变

         * 请求转发:服务器行为,request.getRequestDispatcher().forward(req,resp),是一次请求,转发后请求对象会保存,地址

栏的URL地址不会改变( 由服务器端替客户端完成了到 regRequest.jsp 页面的请求)

转载请注明原文地址: https://www.6miu.com/read-4988250.html

最新回复(0)