Web-Jsp

Jsp


Jsp简介

Jsp全称

  • Jsp全称Java Server Pages,运行在java服务器中的页面【不能直接在浏览器中运行】
  • Jsp能够以HTML页面的方式呈现数据,是一个可以嵌入Java代码的HTML。
  • Jsp其本质就是一个Servlet。Servlet能做的事情JSP都能做。
  • Jsp必须运行在服务器中,不能直接使用浏览器打开。
  • Jsp是Web网页的技术标准,主要语法组成包括:指令,html模板元素,脚本片段(小脚本),表达式,声明,注释,后缀是*.jsp。

Jsp与Html区别

  • Jsp是动态页面,Html是静态页面
动态页面静态页面
运行原理通过服务器解析后,将数据在浏览器中显示直接在浏览器中解析运行
维护成本较低,可以修改后台数据,进而影响页面中的数据较高,必须将修改后的页面覆盖原页面
数据库可以连接数据库不可以连接数据库
访问速度较慢较快
书写代码可以书写java代码不能书写java代码

Jsp与Servlet分工

  • Jsp本质是一个Servlet,翻译后的文件结构为: class helloworld_jsp : HttpJspBase : HttpServlet。
  • Jsp主要负责显示及获取数据,从表面上看,Jsp相对于在html中嵌入java代码: jsp=html+java。
  • Servlet主要负责处理业务,从表面上看,Servlet相当于在java中嵌入html代码:Servlet=java+html。
  • 总结:相比于Servlet,Jsp更加善于处理显示页面,而Servlet更善于处理业务逻辑,两种技术各有专长,所以一般我们会将Servlet和sp结合使用Servlet负责业务,Jsp负责显示

Jsp基本格式

<%@ page language="java" contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
<! DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	这是我的第一个jsp页面。
</body>
</html> 

Jsp之HelloWorld


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>HelloWorld</title>
</head>
<body>
<% //脚本片段
    int num = 10;
%>
    这就是第<%=num%>个jsp页面!
<h2>显示1-100之间的偶数</h2>
<%
    for (int i = 1; i < 100; i++) {
        if (i%2 == 0) {
%>
            <%=i%>
<%
        }
    }
%>
<br>
<%
    for (int i = 1; i < 100; i++) {
        if (i%2 == 0) {
            out.print(i+" ");
        }
    }
%>
</body>
</html>

Jsp工作原理

xxx_jsp.java ->> class xxx_jsp: org.apache.jasper.runtime.HttpJspBase: HttpServlet

  • 第一次请求jsp
  • 服务器先将jsp翻译成xxx_jsp.java文件
  • 再讲xxx_jsp.java文件编译为xxx_jsp.class文件
    • 如果不是第一次
      1. 代码未改变:不会翻译&编译
      2. 代码改变:会翻译&编译

Jsp基本语法

  • 指令
    • 格式:<%@ 指令名称 属性=属性值 属性2=属性值2 ……%>
  • 模板元素
    • css | html | js…
  • 脚本片段
    • 格式:<%%>
    • 作用:在_jspService()方法中,书写java代码
  • 表达式
    • 格式:<%=%>
    • 作用:将数据显示到页面中
  • 声明
    • 格式:<%!%>
    • 作用:在类中,书写java代码
  • 注释
    • java注释
      • 单行注释://
      • 多行注释 :/**/
    • html注释
      • <!-- -->
    • jsp注释
      • <%-- --%>
Jsp注释Java注释Html注释
Jsp页面可见可见可见
java页面不可见可见可见
浏览器不可见不可见可见

Jsp常用指令

page指令

  • 语法格式:<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  • 属性
    • contentType:与response.setContentType()作用一致
    • language:设置jsp支持的语言 【有且只有java
    • import:导包
    • errorPage:设置当前页面出错时的跳转页面
    • isErrorPage:设置当前页面是否包含exception内置对象。默认:false

静态包含include指令

  • 语法格式:<%@ include file=""%>
  • file属性:设置被包含文件的路径
  • 特点:被包含文件不会被翻译&编译【先包含,在翻译】
  • 适用场景:页面中是静态资源较多时,【java代码较少时】使用静态包含

Jsp中常用动作标签

动作标签语法格式:<jsp:xxx></jsp:xxx>

动态包含

  • 语法格式:<jsp:include page="index.jsp"></jsp:include>
  • 特点:被包含文件同时被翻译&编译【先翻译,在包含】
  • 适用场景:页面中动态资源较多时【java较多时】,使用动态包含

动作标签之转发

  • 语法格式:<jsp:foeward page="index.jsp"></jsp:forward>

Jsp中九大内置对象【隐式对象|隐含对象】

内置对象:无需我们程序员手动创建,就可以直接在jsp中使用的对象,称为内置对象,也叫隐式对象或隐含对像

  1. pageContext
    • 页面域对象
    • 类型:javax.servlet.jsp.PageContext
    • 作用:
      1. 可以直接获取其他8个内置对象
      2. 域对象
    • 在Servlet中获取的方式:无【导包后才能使用javax.servlet.jsp.PageContext;】
  2. request
    • 请求域对象
    • 类型:javax.servlet.http.HttpServletRequest
    • 作用:与Servlet中一致
      1. 获取请求参数:request.getParameter()
      2. 获取请求头
      3. 获取URL
      4. 转发:request.getRequestDispatchaer().forward()
      5. 域对象 :request.getAttribute() | request.setAttibute()……
  3. session
    • 会话域对象
    • 类型:javax.servlet.http.HttpSession
    • 在Servlet中获取的方式:request.getSession();
  4. application
    • 上下文域对象
    • 类型:javax.servlet.ServletContext
    • 作用:
      1. 获取上下文路径
      2. 获取真实路径
      3. 获取上下文初始化参数
      4. 域对象
    • 在Servlet中获取的方式:getServletContext()
  5. page
    • 类型:java.lang.Object
    • 作用:java.lang.Object page = this;
  6. response
    • 类型:javax.servlet.http.HttpServletResponse
    • 作用:
      1. 获取响应流,响应数据
      2. 设置响应头
      3. 重定向
  7. out
    • 类型:javax.servlet.jsp.JspWriter
    • 作用:与Servlet中PrintWriter作用类似,将数据显示到页面
      • java.io.PrintWriter与javax.servlet.jsp.JspWriter都extends了java.io.Writer
  8. config
    • 类型:javax.servlet.ServletConfig
    • 作用:
      1. 获取Servlet名称
      2. 获取初始化参数
      3. 获取ServletContext对象
  9. exception
    • 类型:java.lang.Throwable
    • 作用:处理异常
  • 总结:jsp一共是9个内置对象,但默认只有8个内置对象【其中exception内置对象,需要设置page指令中的【isErrorPage = true时】,才能提供】

Jsp四大域对象

域对象概述

  • 生活中域【区域-快递】︰将物品从一个区域快递到另一区域【共享】
    • 同区快递
    • 同城快递
    • 全国快递
    • 全球快递
  • 程序中域:将数据从一个区域“快递"到另—区域【共享】

四大域对象详情

  • pageContext【页面域】
    • 有效范围:在当前页面有效【离开当前页面失效】
  • request【请求域】
    • 有效范围:在当前请求有效【不在当前请求失效】
      • 当前请求:指本次请求【请求路径发生变化就不在当前请求】
      • 转发请求时:是在当前请求
  • session【会话域】
    • 有效范围:在当前会话有效【离开当前会话失效】

    • 当前会话:浏览器与服务器之间会话,与浏览器有关,与服务器无关
      保存重新启动或重新部署会话设置,需重启服务器

      • 浏览器不关闭&不更换,即为当前会话
      • 关闭浏览器或更换浏览器,当前会话结束
  • application【上下文域|web域】
    • 有效范围:当前web应有有效
    • web应用卸载失效【关闭服务器|服务器进程结束】

域对象的共同API

域对象底层维护一个Map

  • 设置属性到域中: void setAttribute(String key,Object value);
  • 从域中获取指定的属性:Object getAttribute(String key);
  • 移除域中指定属性:void removeAttribute(String key);
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>context1</title>
</head>
<body>
<h2>context1.jsp</h2>
<%
    pageContext.setAttribute("key","pageContextValue");
    request.setAttribute("key","requestValue");
    session.setAttribute("key","sessionValue");
    application.setAttribute("key","applicationValue");
%>
pageContext:<%=pageContext.getAttribute("key")%><br>
request:<%=request.getAttribute("key")%><br>
session:<%=session.getAttribute("key")%><br>
application:<%=application.getAttribute("key")%><br>

<%--测试页面域  页面域失效--%>
<%--<jsp:forward page="context2.jsp"></jsp:forward>--%>
<%-- 测试请求域 请求域失效,页面域失效--%>
<a href="context2.jsp">context2.jsp</a>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>context2</title>
</head>
<body>
<h2>context2.jsp</h2>
pageContext:<%=pageContext.getAttribute("key")%><br>
request:<%=request.getAttribute("key")%><br>
session:<%=session.getAttribute("key")%><br>
application:<%=application.getAttribute("key")%><br>
</body>
</html>
  • 测试页面域在这里插入图片描述
    在这里插入图片描述

  • 测试请求域
    在这里插入图片描述
    在这里插入图片描述

  • 测试会话域
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 测试web域
    在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值