• jsp


    1.jsp三大元素

      简介:

        JSP有三大类型的元素:指令元素(directive elements)、动作元素(action element)、和脚本元素(script element)。

            jsp是动态页面:在jsp中永远都是先执行Java代码再执行html代码

    jsp就是一个servlet
    jsp不能被浏览器直接解析,需要借助具有jsp解析引擎的服务器转换为静态资源 才能被浏览器直接解析
    怎么转换:
      tomcat服务器会将jsp页面转换为一个Java类
      org,apache.jsp.jsp名字 jsp.java
      该类继承了HttpJspBase  HttpJspBase继承了HttpServlet 所以说jsp对应着一个servlet
      tomcat会调用
      HttpServlet extends .GenericServlet     .GenericServlet 实现了Servlet接口
       service(ServletRequest request ,ServletResponse response)HttpServlet重写的service方法
       |
       |
       HttpServletRequest req =(HttpServletRequest)request
       HttpServletResponse res =(HttpServletResponse)response
       service(HttpServletRequest,HttpServletResponse)
       
       HttpJspBase extends HttpServlet
       service(HttpServletRequest,HttpServletResponse)HttpJSpBase重写的service方法,
              方法中调用了jspService()方法(抽象)
       |
       |
       _jspService()(抽象方法)
       Hello.jsp extends HttpJspBase
       _jspService()  重写的jspService方法
        
       
       
       

           浏览器访问动态资源,服务器将动态资源解析为静态资源html,返回给浏览器。

           客户端运行jsp 第一次运行比较慢 因为要翻译和编译 从第二次开始则不需要这些操作 直接到执行阶段。

    命周期

    生命周期:
       编译阶段
          当第一次访问jsp,jsp就会被翻译成Java文件,然后会编译成class文件
      初始化阶段
        创建该servlet对象 调用构造方法 和init方法 只创建一次和层层调用一次jsp_init方法
     执行阶段
       在初始化阶段的基础上,层层调用_jspServlet方法
     销毁阶段
       tomcat正常关闭时销毁,层层调用_jspDestroy方法
       

      1.1脚本元素

        简介:脚本元素用于JSP页面中添加一些脚本代码,脚本代码必须用page指令所定义的脚本语言编写,通常是Java代码。

        表达式(expression)

          语法:<%= %>

    <!-- 
       <%= "hello" %>这个里面的代码会被翻译到out.print()方法的括号里面,不要加; ,;代表语句结束
    
     -->
       <h1><%= "hello" %></h1>
       <h1><%=1+1 %></h1>
       <h1><%=Math.random() %></h1>
      
       <% 
        System.out.println("sasasasa");
        System.out.println(UUID.randomUUID());
        ArrayList<String> list =new ArrayList<>();
        list.add("lisi");
        list.add("wangwu");
       for(String s : list){
           System.out.println(s);
       }
    
       %>
       <%--这是jsp的注释 不会被翻译 编译的Java代码中也不能看见 --%>

        解释:

          上述代码将来翻译到Java文件中的位置:

            _jspServlet方法中的out.print()里面的参数。

                          例如上面的几个例子会翻译成:

    out.print("hello");
    out.print(1+1);
    out.print(Math.random());

           注意:不要在<%= %>里面加分号

        脚本(script)

          语法:<% %>

          例子:

    <% 
        System.out.println("sasasasa");
        System.out.println(UUID.randomUUID());
        ArrayList<String> list =new ArrayList<>();
        list.add("lisi");
        list.add("wangwu");
       for(String s : list){
           System.out.println(s);
       }
    
       %>

        解释:

          将来翻译到Java文件中的位置:

              脚本中的代码将来会被直接翻译到_jspServlet()方法中,在一个普通的方法中我们可以写什么,那么在脚本中我们就可以写什么样的代码。

          注意:在这个语法的脚本中写的代码要加分号,因为我们在一个方法里面所写的每一句代码后面都是要加分号的。

           在脚本中声明的变量,我们是可以在表达式里直接使用的,但是要注意先声明再使用,只要查看脚本和表达式分别编译到Java文件的位置,我们就可以很清楚的认识到这一点。

                 小案例:快速生成一个10*10的表格:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Insert title here</title>
    </head>
    <body>
        <table border="1"> 
    
            <%
                for (int i = 0; i < 10; i++) {
            %>
            <tr>
                <%
                    for (int j = 0; j < 10; j++) {
                %>
                <td>lisi<%=j%></td>
                <%
                    }
                    }
                %>  
            <%!
            
                public void go(){
                System.out.println("lkl");}
                public static final String DESC = "你好";
            
            %>
        </table>
    </body>
    </html>

        声明(declaration)

          语法:<%! %>

        

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Insert title here</title>
    </head>
    <body>
         <%!
           public void go(){
            System.out.println("ssssnnn");
         } 
         public static final String DESC ="好看";
         
         %>
         <%
           go();
         System.out.println(DESC);
         %>
    </body>
    </html>

          解释:

           将来翻译到Java文件中的位置:

            直接将声明中的代码翻译到Java文件里面所定义的类中。 

      1.2指令元素

        简介:

    jsp的指令是给jsp引擎看的,让jsp引擎在翻译jsp页面成java文件的时候,知道需要注意哪些地方的设置.比如页面中的编码、页面中脚本里面所用的编程语言、翻译的java文件中需要引入哪些其他包下的java类等等.
    简单来说就是:指定整个JSP页面的相关信息,并设置JSP页面的相关属性,如网页的编码方式等.

        语法:

          <%@指令名字属性="" .. %>

          指令名字主要有:pageincludetaglib三种

        page指令:

          

    属性名字 解释
    language="java" 表示当前页面中的编程语言是java,目前这个属性值只能写java
    import 在当前页面中要引入哪些包下的类。import="java.util.HashMap" import="java.util.HashMap,java.sql.Connectio
    pageEncoding 设置jsp页面文件保存时候所用的编码pageEncoding="UTF-8"
    contentType 设置服务器将来使用iojsp页面内容一行一行的输出给浏览器的时候,使用什么编码向浏览输出. contentType="text/html; charset=UTF-8
    extends 设置jsp页面被翻译成java文件的时候,java文件中的类要继承那个父类.这个属性不用设置,js引擎会给它一个默认的父类(HttpJspBase)去继承的
    session 设置当前这个jsp页面是否支持session对象的使用.默认是支持的 session="true" 默认值为true
    isThreadSafe 设置jsp页面是否是线程安全的isThreadSafe="true" 默认值为true
    errorPage 如果a.jsp页面中设置了errorPage="b.jsp",那么a.jsp页面在运行的时候一旦出错,就会自动跳b.jsp里面
    isErrorPage 如果一个页面中设置了isErrorPage="true",那么就表示这个页面是用来专门显示错误信息的页.然后在这个页面中就能够使用到隐藏对象exception来显示出错误的信息.(需要使用js的内置对象)

        include指令

          简介:

          在当前页面中使用include指令可以把另外一个页面的内容引入到当前页        面。一个页面包含/引入另外一个页面有俩种方式:静态包含和动态包含。通过这个include指令导入页面就属于静态包含。

          特点:

            a.jsp页面中静态包含了b.jsp页面,那么在翻译期间,jsp引擎在翻译a.jsp成为一个a_jsp.java文件的时候,发现jsp页面中有include指令,这时候jsp引擎就会把被包含的页面b.jsp中内容原封不动的拿到a_jsp.java中,然后用io输出出去.

        taglib指令

          简介:

            在当前jsp页面中引入一些特殊的标签库.比如jstl标签库、struts2标签库等等.

      1.3动作元素

        简介:表示客户端请求JSP页面时被调用的组件。

         <jsp:useBean> <jsp:setProperty><jsp:getProperty><jsp:forword>

    <jsp:include>

    2.jsp中的注释:<%-- --%>

    3.九大内置对象

    类型 名字
    pageContext pageContext
    HttpServletRequest request
    HttpSession session
    ServletContext application
    Object page
    HttpServletResponse response
    JspWriter out
    ServletConfig config
    Throwable exception

      内置对象的解释:

        存取数据:

    对象名字 作用范围
    PageContext 页面范围(只能在同一个页面中起作用)
    request 一次请求
    session 一次会话
    application 整个项目期间

       对象解析

    page对象
    虽然名字叫page,但是这个并不是页面范围对象,它是Object类型的对象,表示当前这个页面本身。
    其实page指的是jsp页面翻译成的java类,服务器使用这个java类所创建的对象
    把page对象输出即可看到,所以说page对象代表jsp页面本身
    response对象
    详细请参照前面servlet中response对象介绍
    out 对象
    用于向浏览器输出内容的输出流
    config对象
    详细请参照前面servlet对象中servletconfig对象介绍
    exception
    这个对象其实我们并不能直接使用,需要相关设置后才能使用,这个可以算是一个隐藏对象.这个对象表示将来这个jsp页面运行出错的时候所抛出的异常对象需要结合 page指令的isErrorPage属性使用
  • 相关阅读:
    hihocoder #1138 : Islands Travel
    关于c中的inline
    LUOGU P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    LUOGU P1908 逆序对
    归并排序 (模板)
    tyvj 1864 守卫者的挑战
    loj #10001. 「一本通 1.1 例 2」种树
    bzoj 1026: [SCOI2009]windy数
    BZOJ 4521: [Cqoi2016]手机号码
    LUOGU 3089 后缀排序(模板)
  • 原文地址:https://www.cnblogs.com/jamers-rz/p/13823741.html
Copyright © 2020-2023  润新知