zoukankan      html  css  js  c++  java
  • jsp简介

    JSP技术入门和常用指令

    1. JSP的由来

    在前面的学习过程中,页面相关的内容主要是通过html文件完成,而Servlet技术主要是在获取浏览器(客户端)提交的请求数据,或者是给浏览器客户端响应数据。企业开发中,前端的页面html文件)相关设计和美化工作都是前端工程师(美工负责,后台的Java程序是由Java开发人员完成,前端给出的页面,不能满足后台开发人员的需求,这时就需要后台开发人员在Servlet中使用response获取输出流,拼接前端页面需要的html片段,这样会导致Servlet的Java代码十分的臃肿,而且不利于前端人员维护页面。导致前后人员之间合作出现问题。针对这些问题,sun公司设计出JSP技术来解决。

    JSP技术:Java Server Page。它的主要功能可以直接JSP文件中书写html代码但是JSP文件最后会被翻译对应的Java代码。这个翻译工作不需要开发人员做任何的事情,而直接由Java对应的机制完成。这样就可以保证前端工程师可以直接针对JSP文件进行页面设计和修改,后台人员可以在JSP页面中添加对应的业务程序。后台人员不用再在Servlet中通过response输出大量的html片段。

    其实不仅仅Java使用jsp技术代替html文件。微软的.net技术推出asp技术代替普通的html文件,php也推出了php技术代替html文件

    2. 演示JSP文件

    3. JSP的脚本元素

    通过演示明白JSP文件本身html文件区别并不大,但是sun公司发明的JSP技术不仅仅是为了代替html文件,在JSP文件中还可以嵌入Java代码的。

    如果需要在JSP文件中嵌入Java代码,必须按照特定的规则书写,否则就会出现翻译JSP文件报错。

    JSP文件中嵌入Java代码有三种方式:1脚本声明2脚本表达式;3脚本片段

    3.1. 脚本声明

    脚本声明格式:

    <%!  

      书写对应的Java代码

    %>

    脚本声明的东西: 成员变量, 成员方法, 内部类

    3.2. 脚本表达式

    脚本表达式格式:

    <%=表达式  %>

    表达式内容: 常量 变量 结果的输出

    注意脚本表达式不能书写java代码的结束标记分号。

    3.3. 脚本片段

    脚本片段格式:首先说明,这种格式使用的非常少,而且书写的时候,一定留心!!!

    <% Java代码 %>

      html代码

    <% Java代码%>

    只要在片段中的Java代码合并之后,没有语法错误即可。

    4. 脚本翻译的体现

    如果在项目中有多个JSP页面,只有第一次访问到某个JSP页面的时候,这个JSP页面会被tomcat服务器进行翻译。

    JSP页面上书写的不同的JAVA脚本代码,在翻译后的Java源代码中处于不同的位置。

    在tomcat的work目录下有所有用到的JSP文件翻译之后对应Java代码。tomcat的安装目录\work\Catalina\localhost\beike\org\apache\jsp

    书写demo.jsp,翻译之后对应的demo_jsp.java文件,它被编译之后生成demo_jsp.class文件

    提问JSP到的是什么东西?

    JSP它翻译之后是一个Servlet程序。JSP的内容格式是html,本质是ServletJsp文件会被编译成java文件,再被编译成class文件

    5. JSP中的注释

    由于JSP中可以书写html、Java代码,因此在JSP中可以嵌入html注释,还可以嵌入Java注释,还可以书写JSP自己的注释

    1html注释:只能修饰html内容。 <!注释内容 -->

    2java注释:只能修饰java代码。 //  /* */ /** */

    3jsp注释:都可以包括。可以注释掉java的内容,可以注释掉html的内容 <%-- 注释内容--%>

    html注释<!--注释 -->

    html的注释,不能注释掉java脚本的内容,所以不要用html注释注释java脚本的内容;如果单纯的在注释里写java代码,相当于注释普通内容,当前可以注释掉,所以要将java代码写在java脚本里,这样再用html注释注释Java脚本,就不能其注释的作用了;

    java注释Java的注释必须嵌入在上面介绍的三个脚本中,不能jsp其他位置书写,只能注释java代码。

    jsp的注释:<%-- 注释--%>(如果区分不开,就使用jsp自己的注释。)

    Jsp的注释既可以注释掉html代码,也可以注释掉java代码;

    三种注释的存活时间:

     

    6. JSP指令

    指令:可以理解成命令约束、限制、规范。

    JSP中的指令是用来限制约束JSP文件的。JSP中常用的指令有三个:pageincludetaglib

    注意: page指令中各种属性都有默认值,一般不需要改动,如果有需要改动使用的我会标注的;

    6.1. JSP中的page指令

    Page指令限制当前的JSP页面。

    page指令限制当前的JSP文件中可以使用的哪些包下的Java类,以及当前JSP页面的编码格式等操作。一般书写JSP文件的第一行

    page指令的格式:<%@ page  key=value  key=value  …….%>

    例如自动生成

     

    在JSP页面上的page指令,也可以把它的属性拆成多个page指令书写,也可以写在一起。

    例如:

    6.1.1. language属性

    language属性:声明当前这个JSP中可以使用编程语言,它默认就是Java

    其实sun公司在设计JSP技术的时候,希望其他语言也可以使用JSP技术,但是最后只有Java在使用。

    6.1.2. import属性

    import属性 声明当前这个页面可以使用的类所在的包。相当于书写Java代码中的导包操作。

    默认导入util包下的所有,在JSP页面可以使用集合等工具类。

    提示JSP翻译之后,其实对应的就是一个Java类,并且这个类还是HttpServlet子类因此JSP页面上是可以使用Servlet中的相关对象,并且不用导入。

    查看翻译的Java源代码可以看到,程序中导入了如下的

    注意:在JSP页面上,如果需要导入其他包下的类,书写完类名或接口名之后,在类名或接口名上使用 alt + /  辅助导入对应的包

    不要自己手动的书写导入的包,容易出错;

    6.1.3. pageEncoding重点contentType属性

    pageEncoding属性:设置当前JSP页面保存的时候的编码表。

    一般建议这个属性的值设置为UTF-8.

    contentType属性它是设置浏览器在解析jsp中的代码时使用的编码表,但是一般不用设置它;

    只要在JSP页面上设置了pageEncoding在解析JSP的时候,如果没有设置contentType,浏览器解析的时候会使用pageEncoding的编码表。

    但是如果同时设置contentType属性,则起作用的是contentType属性而不是pageEncoding属性,所以一般不建议设置contentType属性

    即使设置也建议设置UTF-8

    提示:一般在新建一个JSP文件的时候,page指令默认有languageimportpageEncoding属性,并且它们的属性值也不用修改(如果pageEncoding的编码表不是UTF-8需要修改为UTF-8)。

    jsp中常用的码表为utf-8gbk,否则容易出现中文乱码问题;

    6.1.4. autoFlush属性

    autoFlush属性它是指在使用out对象输出的时候,是否自动刷新。默认是true。会自动刷新。一般不用设置,采用默认方式即可

    6.1.5. buffer属性

    buffer属性当前页面的输出流(out对象)使用的缓冲区大小。默认的8kb。也可以自己修改。一般不用设置,采用默认方式即可

    6.1.6. errorPage属性

    errorPage属性jsp页面中发生异常或者错误的时候,使用这个属性可以配置当前页面发生异常之后,跳转到其他的页面显示(配置友好页面)。

    一般不用,后期会使用其他方式代替。

    在jsp页面中配置errorPage属性及值值为出现异常跳转到哪个页面,并且在页面上故意书写发生异常的代码来演示

    创建的错误页面error.jsp

    6.1.7. isErrorPage属性

    isErrorPage属性设置当前的JSP页面是否是可以直接使用exception对象。

    默认情况下为false,不可以在此jsp中使用exception内置对象,如果想显示异常信息,则可以设置为true,可以使用exception对象;

    如果设置true当前JSP文件翻译后的Java源代码会看到存在exception的引用设置为false则不能看到;

    6.1.8. 多学一招

    一般开发的时候,会把整个项目中的常见的错误处理配置到当前项目的web.xml文件中。

    将此项目设置错误信息配置后,访问本项目时出现404错误时浏览器会自动识别错误状态码并跳转到404.jsp页面,

    访问本项目时出现500错误时浏览器会自动识别错误状态码并跳转到500.jsp页面,

    好处:如果没有设置友好页面,那么如果访问出现500错误并显示到浏览器页面上,显得网站做的太low了,竟然还会出现500错误;

    6.1.9. extends属性

    extends属性指定当前这个JSP翻译之后需要继承的父类。

    在指定的JSP的父类时,要求这个父类一定是HttpServlet的子类。一般不用设置,采用默认方式即可

    6.1.10. isELIgnored属性

    isELIgnored="false"  它是说当前的JSP页面中是否可以解析EL表达式。

    默认值为false,表示当前JSP页面可以解析出EL表达式中的内容。

    如果设置true,在JSP页面中书写EL表达式将不会被解析。直接将EL表达式的内容当做内容显示在页面上。一般不用设置,采用默认方式即可

    6.1.11. session属性

    session属性:在当前的页面中是否可以直接使用session对象。

    默认值为true也就是直接访问当前的JSP页面,如果没有session对象,就会直接创建Session对象,如果有,可以直接使用

    但是如果设置为false,访问当前的JSP页面,就不会有任何session的信息。一般不用设置,采用默认方式即可

    6.2. JSP中的include指令(理解

    JSP中include指令,它主要是用来在当前的页面中引入其他的页面。这种引入方式成为静态引入

    在多个页面中,每一个页面的全部内容中有一部分是固定不变的,有一部分是变动的,如果在每个页面中都将不变的代码再写一遍太麻烦了,

    而且一旦这些不变的内容需要改动一点点,则需要在每个页面上都修改,太麻烦了,所以我们可以把不变的代码单独抽取出来生成一个页面,

    在每个页面中引入这个页面即可,即使修改也只要修改抽取出来的页面即可,这就是页面引入的用处;

    例如:一个网页,一般它的logo是一个页面,而版权部分是一个页面,主体部分是另外一个页面

    演示:一共创建top.jspbody.jspfooter.jspmain.jsp四个页面,将top.jspbody.jspfooter.jsp三个页面引入到main.jsp页面上;

    某个页面上引入其他的jsp页面的时候,要求其他的jsp页面中只写网页的主体内容,而不需要网页的框架

    举例:被引入的jsp文件中只写两个部分,一个是默认的声明,另一个则是网页的内容即可,而不要像引入页面写的那么多结构代码,

    否则页面的html源代码格式就不正确了,虽然不会影响页面效果,至于格式如何不正确就不截图演示了;

    静态导入的特点:所有的jsp文件翻译成java文件时只会生成一个java文件,然后再编译成一个class文件;

    将静态导入和后面的动态导入比较区别;

    JSPinclude指令,它是将多个JSP文件翻译成一个Java源代码,把JSPinclude指令称为静态包含。

    注意使用include引入其他的JSP页面,一定要保证多个JSP页面中嵌入的Java代码中的变量名不能重复。

    比如在一个jsp文件中定义了变量x,就不可以在别的jsp文件中定义相同的变量名,因为所有的jsp文件都会被翻译到一个java文件中,

    Java中不允许重复定义相同的变量名

    6.3. JSP中的taglib指令

    重点理解:

    在JSP页面上是可以书写Java代码,也可以书写html代码,一般公司中页面是由美工维护,而我们负责后台开发。因此不建议在JSP页面上嵌入过多的Java代码。这时就需要把Java代码从页面中剔除。页面上需要书写的所有标签都封装到对应的单独的Java程序中,然后在页面中使用taglib指令引入。引入的这些Java程序可以通过对应的标签体现。其实这些标签的底层还是Java代码。仅仅只是JSP页面上没有了Java代码而已。

    taglib指令:主要是在页面上引入其他已经定义好的标签或者函数(其实就是在引入Java程序或者理解成类)

      在今天的资料里有专门介绍标签库的文档,标签库相当于我们java中的API,可以使用定义好的标签或函数,明天会重点讲解

      例如这里引入一个使用频率非常高的标签作为演示

    在taglib指令中的属性:

     uri:是当前标签对应的Java代码封装之后绑定的名称空间(给java代码专门的命名)

     prefix:它是当前在页面上可以使用的标签的前缀。

    JSP的代码体现

    页面显示的效果:

    1. JSP的内置对象(九大内置对象)

    1.1. 什么内置对象

    内置对象:当前事物(对象)存在(创建)的之后,它的内部就已经拥有其他的对象,而在当前这个事物(对象)中是可以直接使用已经存在的其他对象。

    例如创建A类的对象之后,在A类的源代码底层其实已经存在了B类,C类,等其他类的对象,那么在A类中是可以直接使用BC类的对象,而这些BC类对象可以称为A类的的内置对象。

    JSP文件被翻译之后对应的就是一个Servlet程序。那么JSP页面上是可以直接使用Servlet中的学习过的相关对象。这些对象在页面上的Java代码中我们是可以直接使用的,而不需要再去手动的创建或者获取这些对象。

    JSP的内置对象9个:这9个内置对象,可以在JSP翻译之后的对应的Java源代码的service方法中找到:

    翻译之后的service方法中的定义的对象

    HttpServletRequest 使用request引用操作   它是请求

    HttpServletResponse 使用response引用操作  它是响应

    HttpSession 使用session引用操作    session容器对象

    ServletContext 使用application引用操作   表示当前项目对象

    ServletConfig 使用config引用操作    专门获取当前这个Servlet的配置信息

    Object 使用page引用操作 = this  

    它表示的是当前那个JSP页面对象(翻译之后就是一个Servlet程序,这个page本身就是一个Servlet,但是由于在翻译之后赋值给了Object 类型,导致不能使用使用Servlet中的功能)。后期把它当作第四个容器(域对象)使用。

    PageContext 使用pageContext引用操作  

    它表示的是当前jsp页面的上下文。它的主要功能之一就是可以获取到JSP页面上的其他八个内置对象。

    Throwable 使用exception引用操作   主要是表示当前JSP页面上的异常信息的

    JspWriter 使用out引用操作   它相应于我们在Servlet中使用的response.getWriter

    由于Servlet相关的对象HttpServletRequestHttpServletResponseHttpSessionServletContextServletConfig),在学习Servlet时已经讲解过,这里不再重复介绍。用法Servlet中用法相同。

    记忆九大内置对象:

    四大容器:page request session   application(servletContext )

    其他五个:pageContext  response  ServletCofig     exception   out

    1.1. page对象

    JSP页面中,由于page对象被提升成了Object类型。但是这个page在赋值的时候,赋值为this

    而this表示的是当前的jsp页面对象jsp页面翻译之后又是Servlet程序,也就说当前的page本身就是一个Servlet对象,但由于被提升成Object类型,因此Servlet中的所有的方法page都无法使用。如果真的要使用,需要使用向下转型。因此在JSP页面中经常把page当做Servlet中的第4个容器(域对象使用。

    如果把page当做容器(域对象使用的时候,这时它中保存的内容只能在这个JSP页面中使用,在其他的地方无法使用

    web中的四个域对象(容器对象)范围从小到大顺序:

    page  <  request  <  session  <  ServletContext(application)

    重点:四大域对象的存活时间,及内部数据的有效时间,使用范围

      page对象在跳转到别的页面时就销毁,所以保存的数据只能在本jsp页面使用,且未跳转到别的页面;

      request对象在一次请求和一次响应结束后就销毁,所以保存的数据只能在本次响应未结束前使用,

                 比如请求转发就可以使用,使用范围为当前项目下的所有servlet

      Session对象在一次会话期间都可以使用,也就是未关闭浏览器时,注意不要超过默认的session对象保存时间30分钟,

                 范围也是当前项目下的所有servlet,举例如果向session域中存放了数据,没有重启浏览器销毁session对象,

                 也没有超过session默认的保存时间,则可以在本此会话中可以获取数据

      application对象在一个项目中都可以使用,关闭服务器时会自动销毁application对象,开启时会自动创建,

         也就说如果往application域中存放数据,只要没有重启服务器,则在项目中的任意文件任意时候都可以取出数据

      

    域对象存活时间的解释:

            page最小,本次页面访问结束即销毁

            request其次,本次请求响应结束即销毁

            Session其次,本次会话结束后即销毁

            Application最大,服务器关闭后即销毁

    域对象的使用范围的解释:

            Page在本页面内使用;

            Requestsessionapplication都是在本项目内使用,指多个servlet之间,或者servletjsp之间;

      <body>

       <%

         // 需求: page容器中保存值

         // 第一个参数: 指定参数的key

         // 第二个参数: 指定参数的value

         // 第三个参数: 指定参数的 域

         pageContext.setAttribute("name", "张三", PageContext.PAGE_SCOPE);

       %>

       <%-- page容器中取值 --%>

       <%= pageContext.getAttribute("name", PageContext.PAGE_SCOPE)  %>

      </body>

    1.1. pageContext对象

    pageConext它有四个功能:

    1.获取其他8内置对象

    2.给四个域对象中设置值;

    3.获取四个域对象中的值

    4.移除四个域中的值。

    相关的方法可以到可以JspContextAPI查询出对应的方法:

    1.1.1. 获取其他8内置对象

    获取jsp页面中的其他的8个内置对象:下面7可以在PageContext对象中找到

    下面方法可以在JspContext对象中找到:

    注意事项:在jsp中可以通过pageContext对象获取其余的八大对象,同时也可以直接使用这九大内置对象;

    所以通过pageContext对象获取其余的八大对象的方法不常使用,了解即可;

    1.1.1. 给四个域对中的设置数据

    获取四大域的int scope值的方法:PageContext类的静态成员变量

    Int scope = PageContext.PAGE_SCOPE

    Int scope = PageContext.REQUEST_SCOPE

    Int scope = PageContext.SESSION_SCOPE

    Int scope = PageContext.APPLICATION_SCOPE

    向域中存放数据的方法:

    setAttribute(String name,Object value):没有设置scope值,默认向page域中存放数据

    setAttribute(String name,Object value,int scope): 设置scope值,向指定域中存放数据

    setAttribute方法中的三个参数解释:

       第一个参数:是需要给某个域中保存的数据对应的key

       第二个参数:是需要给某个域中保存的数据,也就是key对应的value

       第三个参数:是需要将数据具体保存到哪个域中,可以通过PageContext中的静态成员变量获取到

    例如

    其中setAttribute( Striing name , Object value ) 默认将数据保存在page域中。

    如果需要设置在requestsessionapplication域中,需要使用第二个setAttribute方法完成当然设置在page域中也可以使用此方法; 

    注意:

    1.pageContextPageContext类的对象引用,所以首字母小写,而PageContext.PAGE_SCOPE是指PageContext类,所以首字母大写;

    2.操作域中的数据有两种方式:一是直接通过四大域对象操作,二是通过pageContext对象操作;

     

    1.1.1. 四个中获取数据

    从域中取出数据的方法:

    getAttribute( String name):它默认是从page域中找key对应的value如果没有返回null

    getAttribute( String name , int scope):它是从指定的域中key对应的value。第一个参数是key值,第二个参数的域scope

    getAttributeNamesInScope (int scope):它指定的域中获取所有的key值。

    getAttributesScope(String name):获取key所在域int

    findAttribute( String name ):它是从page、requestsessionapplication四个域中依次找指定key对应的value,如果有任何一个域找到不会再继续找。如果四个域中都没有返回null。

    1.1.1. 从四个域中删除数据

    从域中删除数据的方法:

    removeAttribute( String name):从任意域删除指定name的数据如果多个中都有此name,将会这几个域中的数据部删除。

    removeAttribute( String name , int scope ):从指定的域中删除指定name的数据

    <body>

      <!-- // 需求1: 通过pagecontext对象 4大域对象保存数据 -->

    <%

      // 第一个参数: 属性的key

      // 第二个参数: 属性的value

      // 第三个参数: 属性的域

      pageContext.setAttribute("address", "上海1"); //两个参数,默认向page域中放

      pageContext.setAttribute("address", "上海2", PageContext.REQUEST_SCOPE);

      pageContext.setAttribute("address", "上海3", PageContext.SESSION_SCOPE);

      pageContext.setAttribute("address", "上海4", PageContext.APPLICATION_SCOPE);

     %>

     <!-- // 需求3: 通过pageContext对象 删除指定域对象的数据 和 删除不指定域对象的数据(比较) -->

     <%

        pageContext.removeAttribute("address", PageContext.PAGE_SCOPE);

        pageContext.removeAttribute("address", PageContext.REQUEST_SCOPE);

        pageContext.removeAttribute("address", PageContext.SESSION_SCOPE);

        pageContext.removeAttribute("address", PageContext.APPLICATION_SCOPE);

        /*

          // 删除所有域中指定的属性

          pageContext.removeAttribute("address");

        */

      %>

      <!-- // 需求2: 通过pagecontext对象 从指定域对象获取数据 -->

      <%=pageContext.getAttribute("address") %>

      <%=pageContext.getAttribute("address", PageContext.REQUEST_SCOPE) %>

      <%=pageContext.getAttribute("address", PageContext.SESSION_SCOPE) %>

      <%=pageContext.getAttribute("address", PageContext.APPLICATION_SCOPE) %>

      <hr/>

      <!-- // 需求4: 通过pagecontext对象 从域对象获取数据的简化方式 -->

      <%=pageContext.findAttribute("address") %>

     </body>

    1.1. out对象

    out它主要是用来把数据输出到页面。

    <%

      out.println("out 输出1");

      response.getWriter().println("response 输出1");

      out.println("out 输出2");

    %>

    页面的显示结果:

    上面显示结果分析:

    建议:在JSP页面上如果需要输出文本数据,全部使用out对象输出。千万不要response对象与out对象同时使用;

    1.1. exception对象

    jsp页面上要能够使用exception内置对象,在jsppage指令中,必须书写isErrorPage=true,否则在页面上是无法使用exception内置对象。

    谨记:不要把异常带到JSP页面。一般异常需要在后台的Java代码处理完成,如果真的有异常,就使用友好页面处理。

    1.2. 脚下留心

    说明JSP九大内置对象分别是什么?

    page request session application

    response config

    pageContext exception out

    记住使用pageContext对象 如何操作四个域中的数据。

    2. JSP中的标签

    2.1. JSP标签作用

    虽然sun公司在设计JSP技术的时候,允许在JSP页面中嵌入java代码,但是这样会导致htmljsjava等代码严重的耦合在同一个文件中,导致后期维护十分的麻烦。于是sun公司将可以在jsp页面上书写的java提前已经封装到对应的标签中,然后让开发jsp页面上通过使用标签的方式来使用相应java代码。其实这些标签的用途并不大,后期如果真的需要功能强大的java代码,需要开发人员自己手动封装标签的。这里阶段介绍下JSP已经内置好的几个标签。

    jsp:useBean:创建对象

    jsp:setProperty:设置属性的值,相当于类中的setXxx方法

    jsp:getProperty:获取属性的值,相当于类中的setXxx方法

    它们三个合起来可以操作一个Java对象,并且可以给这个对象的属性设置值或者取出某个对象的属性值。

    jsp:forward:请求转发到别的页面

    // 需求1: 通过标签创建user对象, user对象保存request对象中

    // 需求2: 通过标签给user对象的name属性设置为 张三,  passwrode属性值 设置为 123;

    // 需求3: 通过标签取出user对象的name属性值 和age属性值

    User类:

    public class User {

      private String username ;

      private String password;

      public String getUsername() {

        return username;

      }

      public void setUsername(String username) {

        this.username = username;

      }

      public String getPassword() {

        return password;

      }

      public void setPassword(String password) {

        this.password = password;

      }

      public String getAddress(){

        return "";

      }

    }

    Jsp页面:

     <body>

        <!-- 需求1:通过标签创建user对象,将user对象保存到request域中

            相当于java中的  User user = new User();

            注意:jsp的 创建对象的标签依赖于项目中有该对象的类

         -->

        <!-- id属性为对象名,可以任意起名,class属性为对象所在类的位置,scope属性为将对象存放的域  -->

        <jsp:useBean id="user" class="cn.itcast.javabean.User" scope="request"></jsp:useBean>

       <!-- 需求2: 通过标签给user对象的name属性设置为张三, passwrode属性值设置为 123;

       相当于java中的 user.setUsername("张三")

       注意:jsp的 设置对象属性值的标签依赖于该对象的类中有对应的setXxx方法

      -->

      <!-- 注意:property对应的是类中的setXxx或者getXxx方法,而不是成员变量,

          即使只有setXxx或者getXxx方法,没有对应的成员变量,property属性也会生效

      -->

       <!-- name属性为对象名,要与上面的对象名一致,property属性为setXxx方法中Xxx的值,

           注意除了首字母大小写外必须一致,value属性为设置的属性值

       -->

      <jsp:setProperty name="user" property="username" value="张三"/>

      <jsp:setProperty name="user" property="password" value="123"/>

      <!-- 需求3: 通过标签 取出user对象的username属性值 和password属性值

          相当于java中的user.getUsername()

          注意:jsp的 获取对象属性值的标签依赖于该对象的类中有对应的getXxx方法,

      -->

      <jsp:getProperty name="user" property="username"/>

      <jsp:getProperty name="user" property="password"/>

      <jsp:getProperty name="user" property="address"/>

      </body>

    注意:

    1.jsp标签中3个操作对象的功能分别依赖于对象所在类,以及setXxxgetXxx方法的存在;

    2.JspgetProperty 标签的结果会显示在浏览器上,别的则不会显示;

    1.1. include标签(动态包含)

    书写格式:

    原理:

    面试题:静态包含和动态包含区别

    1.书写格式

    静态包含是JSP中的include指令,书写格式自然与动态包含不同

    动态包含是JSP中的include标签,书写格式自然与静态包含不同

    静态格式:

     动态格式:

    1.合并原理

    静态包含是将多个jsp文件翻译合并在同一个java文件中,然后在生成一个class文件,最后在浏览器上生成一个页面;

    动态包含是将多个JSP文件翻译成多个java文件然后在生成多个对应的class文件,最后在浏览器上合并生成一个页面;

    2.声明变量

    这个不算是一个单独的区别,只是一个补充点,由于合并远离不同,静态包含的多个jsp页面中不可以重复声明同一变量名,

    因为在生成一个java文件时会报错,但动态包含由于没有生成同一个java文件中,所以可以重复声明同一变量名;

    1.1. forword标签

    // 需求4:通过标签请求转发到别的页面

    <!-- 需求4:请求转发的jsp标签 -->

    <jsp:forward page="index.jsp"></jsp:forward>

    它主要是代替我们在Servlet中学习的request的请求转发的。

  • 相关阅读:
    c# Array或List有个很实用的ForEach方法,可以直接传入一个方法对集合中元素操作
    js 检查字符串中是否包含中文(正则)
    Js 数组对象排序
    Js日期处理
    JS 检测字符串是否还有某个字符
    js获取URL传参
    使用JavaScript修改浏览器URL地址栏的实现代码
    上传、裁剪图片-----Jcrop图片裁剪插件
    zip拉链方法
    内置函数如help()...
  • 原文地址:https://www.cnblogs.com/dongfangshenhua/p/6725912.html
Copyright © 2011-2022 走看看