JSP——JSP原理、基本语法、三大指令

目录


Java中的动态网页

跳转到目录
1、 Servlet动态网页 = Java代码(主) + html代码(辅): (在Servlet中编写html代码)html

Servlet擅长的事情:java

  1. 接受请求参数,封装成对象.
  2. 调用业务方法,来处理请求.
  3. 控制界面跳转,跳转到某一个JSP负责作界面的输出操做.

2、 JSP动态网页 = Java代码(辅) + html代码(主): (在html中编写java代码)web

Servlet不擅长作页面输出,JSP最擅长作页面输出!
责任分离思想:各自作各自最擅长的事情.apache


JSP的原理

跳转到目录
JSP(Java Server Page): Java的服务页面,Java动态网页.
JSP的本质就是Servlet.
在这里插入图片描述tomcat

  • hello.jsp代码:
<%--
  Created by IntelliJ IDEA.
  User: Sunny
  Date: 2020/1/28
  Time: 17:41
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>The first JSP application</title>
</head>
<body>
    北京时间:<%=new java.util.Date().toLocaleString()%>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
IDEA将hello.jsp文件编译好后存在C:\Users\Sunny\.IntelliJIdea2019.3\system\tomcat\_coderZYGui\work\Catalina\localhost\ROOT\org\apache\jsp\jspdemo\hello目录下服务器

  • hello.jsp编译后生成hello_jsp.java文件
// hello_jsp.java 文件中 _jspService方法
response.setContentType("text/html;charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;
	  
	  // 在Servlet代码中输出静态网页内容
      out.write("\r\n");
      out.write("\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write(" <title>The first JSP application</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write(" 北京时间:");
      out.print(new java.util.Date().toLocaleString());
      out.write("\r\n");
      out.write("</body>\r\n");
      out.write("</html>\r\n");

从上面能够看到:JSP的本质就是一个Servlet.session


JSP的基本语法

跳转到目录
JSP语法:app

  • JSP的注释:
    做用:注释Java脚本代码
    语法:<%–这是注释–%>
  • JSP的Java脚本表达式:
    做用:输出数据到页面上
    语法:<%=表达式%>(实际上就是调用输出流打印到页面上) out.print(表达式);
  • JSP中的Java脚本片断:(实际开发中,应作到JSP中不能出现一行Java脚本片断)
    做用:书写Java代码逻辑
    语法:
    <%
    语句1;
    语句2;
    %>
    原理:其中的语句会原封不动的被服务器翻译到对应的Servlet的_jspService方法中。
  • JSP的声明:
    做用:定义类的成员
    语法:
    <%!
    Java代码
    %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>The first JSP application</title>
</head>
<body>
    北京时间:<%=new java.util.Date().toLocaleString()%>

    <%-- JSP注释: 不会翻译到Servlet中 --%>

    <%--JSP的Java脚本表达式--%>
    <%
        // Java代码
        String name = "ZYGui";
        boolean flag = true;
    %>

    <%--JSP中的Java脚本片断--%>
    <%=name%>

    <%--JSP的声明--%>
    <%!
        private String user;

        public void doWork() {
        }
    %>

    <%--很麻烦--%>
    <%
        int num = 10;
        if (num > 5){
    %>
        num大于5
    <%
        }else if(num < 5){
    %>
        num小于5
    <%
        } else {
    %>
        num等于5
    <%
        }
    %>
</body>
</html>

在这里插入图片描述


JSP三大指令

跳转到目录
标准指令: 设定JSP网页的总体配置信息
特色:jsp

  1. 并不向客户端产生任何输出,
  2. 指令在JSP整个文件范围内有效
  3. 为翻译阶段提供了全局信息

指令的语法格式:
<%@ 指令名称 属性名=“属性值” 属性名=“属性值” …%>
svg

page指令

跳转到目录
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
page指令: 表示JSP页面相关的配置信息
经常使用属性:

  • language: 表示在JSP中编写的脚本的语言.(只能是java)
  • contentType: 表示JSP输出的MIME类型和编码.等价于 response.setContentType(“text/html;charset=utf-8”);
  • pageEncoding: 表示JSP输出的编码;等价于response.setCharacterEncoding(“utf-8”);
  • import: 用于导入JSP脚本中使用到的类,等价于Java代码中的: import 类的全限定名;
    注意:一个import属性能够导入多个包,用逗号分隔。
  • errorPage: 指示当前页面出错后转向(转发)的页面。目标页面若是以"/"(当前应用)就是绝对路径。
    在这里插入图片描述
    配置全局错误提示页面:
    web.xml
    <!-- 全局的错误页面 -->
        <error-page>
            <error-code>404</error-code>
            <location>/404.jsp</location>
        </error-page>

include(包含)指令

跳转到目录
在这里插入图片描述

  • 静态包含: 使用JSP的include指令
    <% @include file="被包含的页面文件" %>
    特色:
    在翻译阶段就已经把多个JSP,合并在一块儿,最终翻译获得一个java文件
    在这里插入图片描述
  • 动态包含: 使用JSP的动做指令
    <jsp: include page="被包含的页面文件" />
    特色:
    把每个JSP都翻译成Servlet类,在运行时期,动态的合并在一块儿,最终获得多个java文件
    在这里插入图片描述
  • 动态包含和静态包含的选择:
    若是在包含的时候,须要传递数据,此时只能使用动态包含.(
    若是被包含的页面若是是静态页面,那么使用静态包含
    若是被包含的若是是动态页面,那么使用动态包含

注意:在实际开始中一般将被包含的jsp页面的后缀名设置为jspf.

taglib(标签库)指令

跳转到目录

  • 做用:引入外部的标签
  • 语法:<%@taglib uri="标签名称空间" prefix="前缀"%> <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>