【JavaWeb】之JSP

【JavaWeb】JSP

  • 前言
  • 一、什么是JSP
  • 二、JSP原理
    • 1.JSP原理简介
    • 2.一个JSP做了什么
  • 三、JSP基础语法
    • 1.JSP表达式
    • 2.JSP脚本片段
    • 3.JSP声明
  • 四、JSP指令
    • 1.page指令
    • 2.include指令
    • 3.taglib指令
  • 五、9大内置对象
  • 后记


前言

本文为JavaWeb基础JSP相关知识详细介绍~,Java全栈学习路线可参考: 【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~

一、什么是JSP

  • Java Server Pages:Java服务器端页面,也和Servlet一样,用于动态web技术!
  • JSP的主要作用是代替Servlet程序回传HTML页面的数据

JSP的特点:

  • 写JSP就像在写HTML

JSP与HTML的区别:

  • HTML只给用户提供静态的数据
  • JSP页面中可以嵌入JAVA代码,为用户提供动态数据

二、JSP原理

1.JSP原理简介

  • JSP是在服务器内部工作的
  • IDEA中使用Tomcat会在IDEA的Tomcat中产生一个work目录,在电脑中的地址:
C:\Users\J\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\bd396c0d-06d6-4a53-b293-bb717de8947c\work\Catalina\localhost\ROOT\org\apache\jsp
  • JSP页面本质上是一个Servlet程序,第一次访问JSP页面时(运行Tomcat服务器后在浏览器地址栏输入路径),Tomcat服务器会将此JSP页面翻译成为一个Java源文件,并对其进行编译成为.class字节码文件(一个.java,一个.class),如下图:
    【JavaWeb】之JSP_第1张图片
    当打开.java文件时发现其中的内容如下图(继承了HttpJsBase类):
    在这里插入图片描述
  • 而HttpJspBase类直接继承于HttpServlet类,即JSP翻译出来的Java类间接继承于HttpServlet类,证明JSP页面是一个Servlet程序JSP页面实际上会转变成java程序。
  • 浏览器向服务器发送请求,不管访问什么资源,其实都在访问Servlet!JSP最终也会被转换成java类!
  • JSP本质上就是Servlet!包含以下方法:
//初始化
  public void _jspInit() { 
  }
//销毁
  public void _jspDestroy() {
  }
//JSPService
  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)

【JavaWeb】之JSP_第2张图片

2.一个JSP做了什么

(1)判断请求

(2)内置一些对象

final javax.servlet.jsp.PageContext pageContext;    //页面上下文
javax.servlet.http.HttpSession session = null;        //session
final javax.servlet.ServletContext application;        //application
final javax.servlet.ServletConfig config;            //config
javax.servlet.jsp.JspWriter out = null;                //out
final java.lang.Object page = this;                    //当前 page
HttpServletRequest request                            //请求
HttpServletResponse response                        //响应

(3)输出页面前增加的代码

response.setContentType("text/html");            //设置响应的页面类型
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;

(4)以上的这些对象可以在JSP页面中直接使用

  • 在JSP页面中只要是JAVA代码就会原封不动的输出
  • 如果是HTML代码,就会被转换为:
out.write("\r\n"); // 以这样的格式,输出到前端

三、JSP基础语法

1.JSP表达式

<%--JSP表达式
<%= 变量或者表达式%>
作用:用来将程序的输出,输出到客户端
--%>
<%= new java.util.Date()%>

2.JSP脚本片段

<%--jsp脚本片段--%>
<%
    int sum = 0;
    for (int i = 0; i <= 100; i++) {
        sum += i;
    }
    out.println("

Sum=" +sum+ "

" ); %>

脚本片段的再实现

<%
    int x = 10;
    out.println(x);
%>
<p>这是一个JSP文档</p>
<%
    int y = 20;
    out.println(y);
%>
<%--在代码中嵌入HTML元素--%>
<%
    for (int i = 0; i < 5; i++) {
%>
    <h1>Hello world <%=i%></h1>
<%
    }
%>

3.JSP声明

  • JSP声明:在JSP中嵌入Java代码即可,会被编译到JSP生成Java的类中!非JSP声明的代码会被生成到_jspService方法中!
<%!
    static{
        System.out.println("Loading Servelet!");
    }
    private int globalVar = 0;
    public void oi(){
        System.out.println("进入了方法oi");
    }
%>
  • JSP的注释不会在客户端显示,HTML的注释会显示!
<%片段%>
<%=表达式%>
<%!声明%>

<%--JSP注释--%>
<!--HTML注释-->

四、JSP指令

1.page指令

  • page指令用来定义JSP文件中的全局属性,它描述了与页面相关的一些信息,其作用域被它所在的JSP页面和其包含的文件。页面指令一般位于JSP页面的顶端,但是可以放在JSP页面的任何位置,无论把<%@page%>指令放在JSP文件中的哪个地方,它的作用范围都是整个JSP页面。
    以定制错误页面为例使用JSP指令
<%--定制错误页面--%>
<%@ page errorPage="error/500.jsp" %>

2.include指令

  • include指令用于在当前JSP页面中加载需要插入的文件代码,即为页面插入一个静态文件,如JSP页面、HTML页面、文本文件或一段Java程序,这些加载的代码和原有的JSP代码合并成一个新的JSP文件。
<%--
@include:会将两个页面合二为一
--%>
<%@include file="common/header.jsp"%>
<hr>
<h1>网页主体</h1>
<hr>
<%@include file="common/footer.jsp"%>

3.taglib指令

  • taglib指令用来指定页面中使用的标签库以及自定义标签的前缀。taglib指令语法格式:
<%@taglib uri="tagLibraryURI" prefix="tagPrefix" %>
  • uri(统一资源标识符)属性用于指定标记库的存放位置,并告诉JSP引擎在编译JSP程序时如何处理指定标签库中的标签,无默认值。uri属性可以是在TLD(标记库描述符)文件或web.xml文件中定义的标记库的符号名,也可以是TLD文件或JAR文件的相对路径。
  • prefix属性用于指定标记库中所有动作元素名中使用的前缀,无默认值。

五、9大内置对象

  • request:请求对象
  • response:响应对象
  • pageContext:JSP的上下文对象
  • session:会话对象
  • application:ServletContext对象
  • config:ServletConfig对象
  • out:JSP输出流对象
  • page:指向当前JSP的对象
  • exception:异常对象

4大域对象

  • pageContext:客户端向服务器发送请求,产生的数据只在当前的页面中有效
  • request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的
  • session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车
  • application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据
<%
pageContext.setAttribute("name1","oi1号");//保存的数据只在一个页面中有效
request.setAttribute("name2","oi2号");//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","oi3号");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","oi4号");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
%>

后记

Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~

你可能感兴趣的:(Java全栈,java)