• 了解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大隐式对象,可以向指定的其他域中存取数据。

  • 相关阅读:
    使用python内置模块os和openpyxl搜索指定文件夹下Excel中的内容
    python实现DNA序列字符串转换,互补链,反向链,反向互补链
    PandaSeq安装报错ltld required, install libtool library
    使用MySQL客户端登录Ensemble数据库查询相关信息
    第118天:移动端开发——视口
    第117天:Ajax实现省市区三级联动
    第116天: Ajax运用artTemplate实现菜谱
    第115天:Ajax 中artTemplate模板引擎(一)
    第114天:Ajax跨域请求解决方法(二)
    第113天:Ajax跨域请求解决方法
  • 原文地址:https://www.cnblogs.com/hopeyes/p/9652309.html
Copyright © 2020-2023  润新知