首页 > 技术文章 > JSP篇

tang321 2021-04-06 22:03 原文

什么是JSP?

JSP(Java Server Pages):Java的服务器页面

JSP的主要作用是代替Servlet程序回传html页面的数据

因为Servlet程序回传html页面数据是一件非常繁琐的事情,开发成本和维护成本都极高

 

jsp如何访问

jsp页面和html页面一样,都是存放在web目录下,和访问html页面一样

 

 

 

jsp的本质

jsp的本质是一个Servlet程序

当我们第一次访问jsp页面的时候,tomcat服务器会帮我们把jsp页面翻译成为一个Java源文件,并且对它进行编译生成 .class 字节码文件。打开Java源文件发现里面的内容为:

跟踪源代码发现,HttpJspBase类直接地继承了HttpServlet类 。也就是说,jsp翻译出来的Java类间接地继承了HttpServlet类。也就是说,jsp翻译出来的就是一个Servlet程序

 

 

 

 

观察jsp翻译出来的Servlet程序源代码,可以发现,其底层实现,也是通过输出流,把html页面数据回传给客户端

 

 

 

jsp头部的page指令

jap的page指令可以修改jsp页面中一些重要的属性,或者行为

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

常用属性

language      表示jsp翻译后是什么语言文件,暂时只支持Java
contentType     表示jsp返回的数据类型是什么,也是源码中 response.setContentType()参数值
pageEncoding    表示当前jsp页面本身的字符集
import        跟Java源代码中的一样,用于导包、导类

errorPage     设置当jsp页面运行出错时,自动跳转去的错误页面路径

session      设置当前访问jsp页面,是否会创建HttpSession对象,默认是true
extends        设置jsp翻译出来的Java类默认继承谁

下面两个属性是给out输出流使用

autoFlush    设置当out输出流缓冲区满了之后,是否自动刷新缓冲区,默认值是true
buffer     设置out缓冲区的大小,默认是8kb

 

jsp中的常用脚本

声明脚本

格式:<%!  声明Java代码  %>

作用:可以给jsp翻译出来的Java类定义属性和方法,甚至是静态代码块、内部类等

<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: 哪吒
  Date: 2021/4/7
  Time: 8:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--声明类属性    --%>
    <%!
        private String name;
        private static Map<String, Object> map;
    %>
    <%--声明静态代码块    --%>
    <%!
        static {
            map = new HashMap<>();
            map.put("key", "value");
        }
    %>
</body>
</html>

  

表达式脚本

格式:<%=表达式%>

作用:在jsp页面上输出数据

特点:

  • 所有的表达式脚本都会被翻译到 _jspService() 方法中
  • 表达式脚本都会被翻译成为 out.print() 输出到页面上
  • 由于表达式脚本翻译的内容都在 _jspService() 方法中,所以 _jspService() 方法中的对象都可以直接使用
  • 表达式脚本中的表达式不能以分号结束
    <!--输出整型-->
    <%=12%>
    <!--输出浮点型-->
    <%=12.25%>
    <!--输出字符串-->
    <%="myString"%>
    <!--输出对象-->
    <%=map%>

  

脚本代码

格式:

  <%

    java代码

  %>

作用:在jsp代码中,编写我们自己需要的功能(if语句、for循环、翻译后Java文件中 _jspService方法内的代码都可以写

特点:

  • 代码脚本翻译之后都在 _jspService方法中
  • 代码脚本由于翻译到 _jspService方法中,所有在 _jspService()方法中的现有对象都可以直接使用
  • 可以由多个代码脚本块组合完成一个完整的Java语句
  • 代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据

 

jsp九大内置对象

 

 

jsp四个域对象

 

 

out和response输出的区别

由于jsp翻译之后,底层源代码都是使用out来进行输出,所有一般情况下,我们在jsp页面中统一使用out来进行输出,避免打乱页面输出内容的顺序 

 

 

 

 

 

 

jsp常用标签

 静态包含

 

 

 

 

 动态包含

 

 

 

 

 请求转发

 

 

 请求转发的使用

 

推荐阅读