JSP

JSP

JSP与Servlet相辅相成:

Servlet:逻辑处理方便,页面处理麻烦,JSP:页面表现方便,逻辑处理麻烦。

本质:

JSP是一种动态网页技术:

动态生成网页数据,而不是有动态效果的网页!

常见的几种动态网页技术:

JSP(Java Server Page)

ASP(Active Server Page)

PHP(Hypertext Preprocessor)超级文本预处理语言

本质:

JSP就是Servlet,JSP也是Java类,通过JSP引擎将JSP转译成Servlet

JSP = java+ html

JSP执行流程:

浏览器输入:localhost:8080/jsp/1.jsptomcat收到*jisp请求,则会到

org.apache.jasper.servlet.JspServlet处理

JspServlet调用相应的java类,jsp引擎根据1_jsp生成的java类(位于tomcat子目录work下面:1jsp.java,_1 jsp.class)

执行1 .jsp.class,将HTML数据输出给tomcat, tomcat再将这些数据输出给客户端

使用标签:

编译指令:

page

<%page contentType="text/html; charset=GBK"%>-<%@page import="java.util., java.lang.” %>

<%@ page errorPage="error.jsp" %>

<%--
  Created by IntelliJ IDEA.
  User: 17612
  Date: 2021/6/23
  Time: 7:57
  To change this template use File | Settings | File Templates.
  html注释会被转义成java文件,会发送给浏览器,浏览器不会执行。
  java注释:也会被转义,但是不会发送浏览器
  jsp注释:不会被转义

  page: 用来设置转义侧成Servlet文件时的参数

    contentType:表示浏览解析响应信息的时候使用的编码和解析格式
    language:表示就jsp要转义成的文件类型
    import:导入需要的jar包,多个包使用逗号分割
    pageEncoding:设置页面的编码格式
    session:用来控制Servlet中是否有session的处理
    errorPage:当页面发生逻辑错误的时候跳转的页面
    extends:需要转义的servlet类要继承的父类

    局部代码块:
        可以将java代码跟页面展示的标签写到一个jsp页面中,java代码转义成servlet文件中,java代代码跟输出是保存在service方法中的
        代码可读性比较差,开发比较麻烦
        一般不使用
    全局代码块:
        定义公共的方法的时候需要使用全局代码块使用<%%> 生成的代码在servlet类中
        调用的时候需要使用局部代码块
    脚本调用方法:
    使用<%=%>直接调用变量和方法(必须由返回值)
    不能在变量或方法后面添加分号


--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<%@ page  pageEncoding="utf-8" %>
<%@ page errorPage="error.jsp" %>

<html>
<head>
    <title>Title</title>
</head>
<body>
<%!
    String str = "jsp";

%>
<%=str%>

<% int i = 5/0;%>
</body>
</html>

inculde

​ <%@ include file=“相对位置”%>

静态导入:

-<%@ include file="logojsp”%>

是在servlet引擎转译时,就把此文件内容包含了进去(两个文件的源代码整合到一起,全部放到jspService方法中),所以只生成了一个servlet,所以两个页面不能

有同名的变量。

运行效率高一点点。耦合性较高,不够灵活。

动态导入

<jsp:include page="logo.jsp"></jsp:include>

是在servlet引擎转译后,请求的此页面,所以共生成了两个servlet,所以可以有同名变量。

生成两个servlet,相当于两个类之间的调用,耦合性较低,非常灵

活。

<%--
  Created by IntelliJ IDEA.
  User: 17612
  Date: 2021/6/22
  Time: 9:23
  To change this template use File | Settings | File Templates.
  页面的导入方式:
  静态导入:
    <%@include file="1.jsp"  %> file中填写的是jsp文件的相对路径
    特点:
        不会将静态导入的页面生成一个新的servlet文件,而是将两个文件合并
        优点:运行效率高,
        缺点:两个页面会耦合到一起,不利于维护,两个页面中不能存在相同名称的变量名
    动态导入:
      两个页面不会进行合并,分别生成自己的servlet文件,但是页面在最终展示的时候是合并到一起的
      优点:没有耦合,可以存在同名的变量
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  
<%--  静态导入--%>
  <%@include file="1.jsp"  %>

<%--  动态导入--%>
  <jsp:include page="1.jsp"></jsp:include>
  </body>
</html>

taglib

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

Taglib指令的语法:

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

动作语法:-forword请求转发

Jsp9大内置对象:

<%--
  Created by IntelliJ IDEA.
  User: 17612
  Date: 2021/6/23
  Time: 9:14
  To change this template use File | Settings | File Templates.
  Jsp9大内置对象:
    jsp页面在转义成其对应的servlet文件的时候,会自动生明一些对象,在jsp页面中可以直接使用,
    内置对象是在jsp页面中使用的,可以在局部代码块中使用也可以在脚本段语句中使用。
    pageContext:表示页面的上下问对象,封存了其他的内置对象,封存了当前页面的运行信息
    注意:每一个页面都有一个对应的pageContext对象。伴随着当前页面的结束而结束
    session:    用来封装同一个用户的不同请求的共享数据,一次会话对应一个session对象
    application:  相当于ServletContext对象,一个web项目只有一个对象,存储这所有用户的共享数据,从服务器启动到服务器结束
    config:相当于Servletconfig对象,用来获取web.xml配置的数据,完成Servlet的初始化操作
    out:响应对象,给jsp内部使用,带有缓冲区的相应对象。效率高于response
    page:代表当前jsp对象,相当于java中的this指针
    request:封装当前请求数据,有tomcat创建,一次请求对应一个request
    response:响应对象,用来响应请求数据,将处理结果返回给浏览器,可以进行重定向
    exception: 封装异常对象,存储当前的异常信息。必须在page中添加属性。
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

</body>
</html>

四大作用域:

<%--
  Created by IntelliJ IDEA.
  User: 17612
  Date: 2021/6/23
  Time: 9:37
  To change this template use File | Settings | File Templates.
   四大作用域:
       pageContext:表示当前页面,解决当前页面内的数据共享问题,获取其他内置对象
        request:一次请求,一次请求的servlet的数据共享,通过请求转发的方式,将数据流转到下一个servlet
        session:一次会话,一个用户发送的不同请求之间的数据共享,可以将数据从一个请求流转到其他请求
        application:项目内。不同用户的数据共享问题,将数据从一个用户流转到其他用户
    路径问题:
        想要获取项目中的资源,可以使用相对路径,也可以使用觉得路径。
        相对路径:相对于当前页面的路径,资源的位置不可以随便更改,需要使用../的方法进行文件的消除,如果目录结构比较深,可以操作起来比较麻烦
        绝对路径:在请求路径的前面加/.表示当前服务器的根路径,使用的时候要添加虚拟项目名称/资源目录
    使用jsp中自带的全局路径声明:
        <%
    String path = request.getContextPath();
    System.out.println(path);
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    System.out.println(basePath);
%>

--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    System.out.println(path);
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    System.out.println(basePath);
%>
<html>
<head>
    <title>Title</title>
    <base href="<%=basePath%>">
</head>
<body>
</body>
</html>
posted @ 2021-06-23 22:20  IT小五  阅读(145)  评论(0)    收藏  举报