• 了解JSP


    了解JSP

    1、什么是JSP?

    JSP全名为Java Servlet pages,中文名为web服务器页面,它是在传统的网页HTML文件(*.htm,*.html)中插入java程序段和JSP标记,后缀名为(*.jsp),其根本是一个简化的Servlet设计。从用户角度,它就是一个网页;从开发者角度,其实是一个java类,它继承了servlet,所以可以直接说jsp就是一个servlet.

    2、为什么要有JSP?

    HTML多数情况下用来显示静态内容,直接使用HTML文件(*.html)没有办法输出java当中的信息(动态显示数据,需要查询数据库),使用servlet输出页面非常麻烦,于是出现了jsp,既能写HTML,又能写java代码。

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     <%
    11         String name="今夕何希";
    12     %>
    13     <h1><%=name    %></h1>
    14     
    15 </body>
    16 </html>
    View Code

    3、jsp的工作原理

    (1)jsp本质是servlet

    (2)jsp第一次访问时会被web容器翻译成servlet,在tomacat的work目录下(E:Program FilesJava omcatapache-tomcat-7.0.90workCatalinalocalhostJSPorgapachejsp),能够找到翻译成的.java文件:

      1 /*
      2  * Generated by the Jasper component of Apache Tomcat
      3  * Version: Apache Tomcat/7.0.90
      4  * Generated at: 2018-09-15 13:13:30 UTC
      5  * Note: The last modified time of this file was set to
      6  *       the last modified time of the source file after
      7  *       generation to assist with modification tracking.
      8  */
      9 package org.apache.jsp;
     10 
     11 import javax.servlet.*;
     12 import javax.servlet.http.*;
     13 import javax.servlet.jsp.*;
     14 
     15 public final class Test_jsp extends org.apache.jasper.runtime.HttpJspBase
     16     implements org.apache.jasper.runtime.JspSourceDependent {
     17 
     18   private static final javax.servlet.jsp.JspFactory _jspxFactory =
     19           javax.servlet.jsp.JspFactory.getDefaultFactory();
     20 
     21   private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
     22 
     23   private volatile javax.el.ExpressionFactory _el_expressionfactory;
     24   private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
     25 
     26   public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
     27     return _jspx_dependants;
     28   }
     29 
     30   public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
     31     if (_el_expressionfactory == null) {
     32       synchronized (this) {
     33         if (_el_expressionfactory == null) {
     34           _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
     35         }
     36       }
     37     }
     38     return _el_expressionfactory;
     39   }
     40 
     41   public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
     42     if (_jsp_instancemanager == null) {
     43       synchronized (this) {
     44         if (_jsp_instancemanager == null) {
     45           _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
     46         }
     47       }
     48     }
     49     return _jsp_instancemanager;
     50   }
     51 
     52   public void _jspInit() {
     53   }
     54 
     55   public void _jspDestroy() {
     56   }
     57 
     58   public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
     59         throws java.io.IOException, javax.servlet.ServletException {
     60 
     61     final javax.servlet.jsp.PageContext pageContext;
     62     javax.servlet.http.HttpSession session = null;
     63     final javax.servlet.ServletContext application;
     64     final javax.servlet.ServletConfig config;
     65     javax.servlet.jsp.JspWriter out = null;
     66     final java.lang.Object page = this;
     67     javax.servlet.jsp.JspWriter _jspx_out = null;
     68     javax.servlet.jsp.PageContext _jspx_page_context = null;
     69 
     70 
     71     try {
     72       response.setContentType("text/html; charset=utf-8");
     73       pageContext = _jspxFactory.getPageContext(this, request, response,
     74                   null, true, 8192, true);
     75       _jspx_page_context = pageContext;
     76       application = pageContext.getServletContext();
     77       config = pageContext.getServletConfig();
     78       session = pageContext.getSession();
     79       out = pageContext.getOut();
     80       _jspx_out = out;
     81 
     82       out.write("
    ");
     83       out.write("<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    ");
     84       out.write("<html>
    ");
     85       out.write("<head>
    ");
     86       out.write("<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    ");
     87       out.write("<title>Insert title here</title>
    ");
     88       out.write("</head>
    ");
     89       out.write("<body>
    ");
     90       out.write("	");
     91 
     92         String name="今夕何希";
     93     
     94       out.write('
    ');
     95       out.write('
    ');
     96       out.write('    ');
     97       out.print(name    );
     98       out.write("
    ");
     99       out.write("</body>
    ");
    100       out.write("</html>");
    101     } catch (java.lang.Throwable t) {
    102       if (!(t instanceof javax.servlet.jsp.SkipPageException)){
    103         out = _jspx_out;
    104         if (out != null && out.getBufferSize() != 0)
    105           try {
    106             if (response.isCommitted()) {
    107               out.flush();
    108             } else {
    109               out.clearBuffer();
    110             }
    111           } catch (java.io.IOException e) {}
    112         if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
    113         else throw new ServletException(t);
    114       }
    115     } finally {
    116       _jspxFactory.releasePageContext(_jspx_page_context);
    117     }
    118   }
    119 }
    View Code

    下一次访问时,会看一下里面的内容有没有发生变化,如果变化了,重新编译加载。

    <%@ page %>里面写的只能是指令(page,include,taglib)

    4、jsp组成部分

    静态数据,如HTML;JSP指令,如include指令;jsp标签动作;用户自定义标签

    • JSP脚本元素和变量

         在jsp当中写java代码:

            <%java代码>         内部的java代码翻译到service方法的内部

            <%=java变量或者表达式>   会被翻译成service方法内部的out.print();

            <%!java代码 >        会被翻译成selvlet的成员的内容

          在jsp当中写注释:

            HTML:<!-- 注释内容-->               可见范围 jsp源码,翻译后的servlet,页面

            java://单行注释;    /*多行注释*/                     可见范围 jsp源码,翻译后的servlet,页面看不到

            jsp: <%注释内容%>              可见范围 jsp源码

    • JSP指令

        什么是指令?jsp指令用于设置整个JSP页面的相关信息,以及用于jsp页面与其他容器间的通信。

        有哪些指令?(page、include、)

          page      (1)   用于设定整个JSP页面的属性和相关功能

              (2)page指令的主要属性

                

                <%@ page language="java" contentType="text/html; charset=utf-8"  pageEncoding="UTF-8"%>

                language: 表明JSP页面中可以写java代码。

                contentType: 告诉浏览器文件的类型以及使用的编码。

                pageEncoding: JSP内容编码。

                session:    值为true或者false,用于控制这个JSP页面里面,是否能够直接调用session对象。具体区别是:如果改值                                                                     为true,翻译后代码里会有getSession方法的调用,否则没有。

                   errorPage:  用于指定错误时跳转到哪个页面 。

              (3)多个属性间用空格隔开  

          include            <%@ include file="path"%>

               (1) 表示在JSP编译时插入一个包含文件或代码的文件

                (2)include指令所包含的文件名不能是一个url, 只能是静态的文件名

                (3)静态包含

          taglib  <%@ taglib prefix=" "  uri=" "%>

                prefix:标签库的别名      uri:标签库的路径

                (1)声明JSP使用了哪些标签库

                (2)JSP标准标签库,第三方标签库,自定义标签库

    标签动作 (1)页面包含(动态包含)

     

               <jsp:include page=" "></jsp:include>
        • (2)请求转发:
           <jsp:forward page="要转发的资源"></jsp:forward>
    • JSP内置对象

         jsp被翻译成servlet之后,service方法中有9个对象定义并初始化完毕,开发人员可以直接调用它们而不用显式地声明它们再调用。

    作用域对象:作用域表示这些对象可以存值,他们的取值范围有限定。代码示例:

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     使用作用域存储数据</br>
    11     <%
    12         pageContext.setAttribute("name", "pageContext");
    13         request.setAttribute("name","request");
    14         session.setAttribute("name", "session");
    15         application.setAttribute("name", "application");
    16     %>
    17     取出四个作用域中的值</br>
    18     <%=pageContext.getAttribute("name")%></br>
    19     <%=request.getAttribute("name")%></br>
    20     <%=session.getAttribute("name")%></br>
    21     <%=application.getAttribute("name")%>
    22 </body>
    23 </html>
    View Code

    运行结果:

    四个作用域的区别:

        pageContext:  作用域仅限于当前页面。

        request:  作用域仅限于一次请求,只要服务器对请求做出了响应,这个域中存的值就没有了。

        session:  作用域仅限于一次会话(多次请求与响应)。

        application:  整个工程都可以访问,服务器关闭后不能访问。

                  

      

        out对象:

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10         aaa
    11     <%="bbb" %>
    12     <%
    13         out.write("ccc");
    14         response.getWriter().write("ddd");
    15     %>
    16     
    17 </body>
    18 </html>
    View Code

          输出为:

              

              只有response能够响应浏览器,因此out缓冲区(默认8kb)的内容会被拼接到response缓冲区之后。

         pageContext对象:可以获得其他8大隐式对象,可以向指定的其他域中存取数据。

  • 相关阅读:
    左偏树
    论在Windows下远程连接Ubuntu
    ZOJ 3711 Give Me Your Hand
    SGU 495. Kids and Prizes
    POJ 2151 Check the difficulty of problems
    CodeForces 148D. Bag of mice
    HDU 3631 Shortest Path
    HDU 1869 六度分离
    HDU 2544 最短路
    HDU 3584 Cube
  • 原文地址:https://www.cnblogs.com/hopeyes/p/9652309.html
Copyright © 2020-2023  润新知