浅谈JSP的基本用法


一、JSP是什么?

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。 网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。 JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

1.JSP和HTML的区别

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

JSP本质上是一个Servlet,在第一次访问jsp页面时,他需要先编译成servlet程序,再编译成servlet字节码(.class文件),再动态生成HTML页面返回给客户端(浏览器)

可以通过观察tomcat的work目录来观察jsp都做了些啥
在这里插入图片描述
在这里插入图片描述


二、JSP的使用

1.导入依赖

jakarta版本:

<dependencies>
	<dependency>
       <groupId>jakarta.servlet</groupId>
       <artifactId>jakarta.servlet-api</artifactId>
       <version>5.0.0</version>
       <scope>provided</scope>
    </dependency>
	<dependency>
      <groupId>jakarta.servlet.jsp</groupId>
      <artifactId>jakarta.servlet.jsp-api</artifactId>
      <version>3.0.0</version>
      <scope>provided</scope>
    </dependency>
</dependencies>

javax版本:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>

2.JSP的基本语法

脚本片段

脚本片段可以包含任意量的Java语句、变量、方法或表达式

语法格式:

<% 代码片段 %>

具体例子:

<html>
<head><title>Hello World</title></head>
<body>
	Hello World!<br/>
	<%
	out.println("Your IP address is " + request.getRemoteAddr());
	%>
</body>
</html>

JSP表达式

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式

语法格式

<%= 表达式 %>

具体例子

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
</head>
<body>
	<p>
	    今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
	</p>
</body>
</html>

JSP注释

语法格式

<%-- 该部分注释在网页中不会被显示--%> 

注:jsp注释和html注释的区别

语法描述
<%-- 注释 --%>JSP注释,注释内容不会被发送至浏览器甚至不会被编译
<!-- 注释 -->HTML注释,通过浏览器查看网页源代码时可以看见注释内容

JSP声明

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用

语法格式:

<%! declaration; [ declaration; ]+ ... %>

具体例子

<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%!
    static {
        System.out.println("Loading Servlet");
    }

    private int globalVar = 0;

    public void method(){
        System.out.println("进入了方法!");
    }
%>
</body>
</html>

JSP声明会被编译到JSP生成Java的类中!其他的代码会被生成到_jspService方法中!
JSP声明:
在这里插入图片描述
其他代码
在这里插入图片描述

JSP指令

JSP指令用来设置与整个JSP页面相关的属性。

指令描述
<%@ page … %>定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include … %>包含其他文件(如公共页面footer,header)
<%@ taglib … %>引入标签库的定义,可以是自定义标签

具体例子:

<%--@include会将两个页面合二为一--%>
<%-- 如果代码有java片段,可能会导致重复定义问题 --%>

<%@include file="common/header.jsp"%>
<h1>网页主体</h1>
<%@include file="common/footer.jsp"%>

<hr>

<%--jSP标签
    jsp:include:拼接页面,本质还是三个
    --%>
<%-- 不会有代码重复定义的问题--%>

<jsp:include page="/common/header.jsp"/>
<h1>网页主体</h1>
<jsp:include page="/common/footer.jsp"/>

三、JSP的九大内置对象和四大作用域

1.九大内置对象

  • PageContext 存东西
  • Request 存东西
  • Session 存东西
  • Application (即SerlvetContext) 存东西
  • Response
  • config (即SerlvetConfig)
  • out 输出到页面
  • page ,不用了解
  • exception

2.四大作用域

四个存东西的对象的作用范围

  • pageContext:只在一个页面保留数据
  • request:只在一个请求中保存数据
  • session:在一次会话中保存数据,仅供单个用户使用
  • application:在整个服务器中保存数据,全部用户共享
<%
    pageContext.setAttribute("name1","a"); 
    //保存的数据只在一个页面中有效
    request.setAttribute("name2","b"); 
    //保存的数据只在一次请求中有效,请求转发会携带这个数据
    session.setAttribute("name3","c"); 
    //保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
    application.setAttribute("name4","d");  
    //保存的数据只在服务器中有效,从打开服务器到关闭服务器(就是ServletContext)
%>
<%
    //简单来说从pageContext取出,通过寻找的方式
	//作用域从底层到高层:page-->request-->session-->application
	//类似于双亲委派机制(JVM)
	String name1 = (String)pageContext.findAttribute("name1");
    String name2 = (String)pageContext.findAttribute("name2");
    String name3 = (String)pageContext.findAttribute("name3");
    String name4 = (String)pageContext.findAttribute("name4");
%>
<%
	<%=name1%>
	<%=name2%>
	<%=name3%>
	<%=name4%>
	${name5}
	<%--EL表达式输出不存在的数据会自动过滤掉,但是<%=name5%>不会,会输出null--%>
%>
<%--使用EL表达式别忘了添加isELIgnored="false"开头--%>



注意pageContext的findAttribute和getAttribute的区别pageContext.findAttribute()与pageContext.getAttribute()的区别


四、JSP标准标签库、EL表达式

导入依赖

jakarta版本:

	<dependency>
      <groupId>org.glassfish.web</groupId>
      <artifactId>jakarta.servlet.jsp.jstl</artifactId>
      <version>2.0.0</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
	</dependency>

如果使用旧的阿里云镜像可能无法下载到jakarta.servlet.jsp.jstl依赖

javax版本:

<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

1.JSP标准标签库(JSTL)

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

具体用法-菜鸟教程

  • 核心标签(重点掌握
  • 格式化标签
  • SQL标签
  • XML 标签

2.EL表达式${ }

注意:jsp中可能存在EL表达式原样输出的问题
解决:jsp中添加<%@ page isELIgnored=“false” %>

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象

Tips

可以在web.xml设置相应的错误代码跳转到哪个页面

<error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
</error-page>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值