JSP基础和部分JSTL&EL


一、JSP(Java Server Pages)

像HTML页面,但是不是HTML

1.1、什么是jsp

概念JSP(全称JavaServer Pages)是由[Sun Microsystems]公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTMLXML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言 为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

jsp将java代码和特定变动内容嵌入到静态页面中,实现以静态页面为模板,动态生成其中部分内容
JSP文件在运行时会被其编译器转换成更原始的Servlet代码

jsp文件先被转换成===》java代码写的servlet 在被编译成====》class字节码

jsp里面可以写java目命令

注意:后续开发 不怎么用jsp

1.2、为什么用jsp(为了方便)

jsp其实就是一个特殊的servlet;

普通的servlet可以显示数据,但是获取其他css,js时编码太过麻烦 jsp可以方便的设置css和js

1.3、jsp执行过程

  1. 服务器收到客户请求,加载指定请求的jsp文件
  2. JSP引擎加载jsp文件,并转换成Servlet.java的代码
  3. JSP引擎将转换的代码编译成.class 字节码文件
  4. 服务器执行字节码文件
  5. 返回执行结果到客户端

注意: idea的项目是通过idea的内置功能将webapp于Tomcat连接的
在idea的目运行界面可以找到路劲

在这里插入图片描述

1.4、jsp的组成部分

基本指令配置jsp页面 导入资源
格式

   		<%@ 指令名称 属性名=属性值 %>

page 配置jsp页面

<%@ page import="java.util.ArrayList" %>
<%-- page import =“”   导入jar包--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--  设置页面的字符集编码   和语言类型 --%>

​ taglib 导入标签库
​ include 页面包含的,导入资源的文件
注释
HTML注释: <!-- -->只能注释HTML代码
jsp注释 <% %>所有都可以注释
jsp九大内置对象(jsp页面中不需要创建,可以直接使用的对象)
变量名 真实类型 作用
pageContext PageContext 当前页面共享数据,还可以回去其他八个内置对象

变量名真实类型作用
pageContextPageContext当前页面共享数据,还可以回去其他八个内置对象
requestHTTPServletRequest一次请求访问的多个资源(转发)
sessionHTTPSession一次会话的多个请求间
applicationServletContext所有用户间共享数据
responseHTTPServletResponse响应对象
pageobject当前页面(servlet)的对象 this
outJSPWriter输出对象,数据输出到页面上面
configServletConfigServlet的配置对象
ExceptionThrowable异常对象
四大域对象
作用域(数据可以起作用的区域)
PageContext(当前页面)
Request(一次请求)
session(一次会话)
application(服务器启动期间)

注意:
在jsp编写java代码必须写在<% 里面%>,表示可以运行java代码
在这里插入图片描述

案例:在jsp页面中显示所有学生数据

  1. 通过工具类获取数据库的数据
  2. 在在服务里面把数据通过req请求转发到jsp页面
  3. jsp页面设置表格 通过request.getAttribute获取数据

在这里插入图片描述

二、El表达式

2.1、什么是EL

Expression Language 表达式语言

2.2、有什么用(获取数据)

替换《%=变量名%》; 替换之前的表达式
EL表达式可以直接从四大域里面取出数据

EL的本质就是获取对象中get的值(get名字)

2.3、怎么用EL

直接在jsp写

 ${作用域.数据名称}

2.4、EL支持运算符

算术运算符:+ - * %
关系运算符:== != > <
逻辑运算符: and or not

        ${5>4}//true
        <% int a=10;
           int  b=10;%>
        ${a==b} //true

2.5、EL的值的获取

值的获取从四大域对象获取 :

语法 ${作用域.键名}
变量名 ----------- 对应的域对象
pageScope === page=== 当前页面
requestScope === req=== 在当前req中起作用 一次请求A.jsp—>AServlet—>转发—>BServlet(一次请求)
sessionScope === session=== 在当前会话中起作用
applicationScope === application=== 在 ServletContext整个web应用 全局变量
举例

2.5.1、从list里面取值

在这里插入图片描述在这里插入图片描述

2.5.2、从Map里面取值(根据key获取)

在这里插入图片描述在这里插入图片描述

2.5.3、获取对象中的值

在这里插入图片描述在这里插入图片描述

如果没有确定域

$ { 键名 }
当没有确定域对象,会按照域对象的范围从小到大挨去找

查找key的过程:【page】—>【request】—>【session】—>【application】;找到为止
在这里插入图片描述在这里插入图片描述

EL隐式对象(11个)

作用域对象中,在指定的范围内起作用,本质上都是Map类型的集合,存储key-value, 通过key获取value值:

  • 如果不写域对象名 找数据按照四大域
  • 查找key的过程:【page】—>【request】—>【session】—>【application】;找到为止
  • 如果是隐式对象是已经提前封装的数据 ,使用的时候可以直接获取
隐含对象类型说明
pageContextjavax.servlet.ServletContext表示此JSP的PageContext
pageScopejava.util.Map取得Page范围的属性名称所对应的值
requestScopejava.util.Map取得Request范围的属性名称所对应的值
sessionScopejava.util.Map取得Session范围的属性名称所对应的值
applicationScopejava.util.Map取得Application范围的属性名称所对应的值
paramjava.util.Map如同ServletRequest.getParameter(String name)。回传String类型的值
paramValuesjava.util.Map如同ServletRequest.getParameterValues(String name)。回传String[]类型的值
headerjava.util.Map如同ServletRequest.getHeader(String name)。回传String类型的值
headerValuesjava.util.Map如同ServletRequest.getHeaders(String name)。回传String[]类型的值
cookiejava.util.Map如同HttpServletRequest.getCookies()
initParamjava.util.Map如同ServletContext.getInitParameter(String name)。回传String类型的值

PageContext:

Expression说明
${pageContext.request.queryString}取得请求的参数字符串
${pageContext.request.requestURL}取得请求的URL,但不包括请求之参数字符串,即servlet的HTTP地址。
${pageContext.request.contextPath}服务的webapplication的名称
${pageContext.request.method}取得HTTP的方法(GET、POST)
${pageContext.request.protocol}取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser}取得用户名称
${pageContext.request.remoteAddr}取得用户的IP地址
${pageContext.session.new}判断session是否为新的,所谓新的session,表示刚由server产生而client尚未使用
${pageContext.session.id}取得session的ID
${pageContext.servletContext.serverInfo}取得主机端的服务信息

三、标签库JSTL (java Server Libray)

什么是jstl: 是一个jsp标签的集合,封装来jsp应用的通用核心功能。

作用: 为了替代《% %》

JSTL的功能

  • 核心标签
  • 格式化标签
  • SQL 标签
  • XML 标签
  • JSTL 函数

怎么使用

  1. 导入jar包在这里插入图片描述

  2. 页面引入指令<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>在这里插入图片描述

if 对应java中的if判断

<h1>测试jstl标签库 if语句</h1>
<c:if test="${requestScope.obj.get(1) < 18}">  <%--通过判断test中表达式的值 true/false 来判断代码是否执行--%>
    <h1> 你还未成年</h1>
</c:if>
**2.注意:这里没有else,如果想要else就再写一个< c:if>**

foreach标签

重复执行普通for循环类似怎么写

<%--for each 标签*/重复执行代码
/*
* begin : 开始值====  int i = 0 类似
* end:  结束值  相对于 i<5 for循环的条件
* var 临时变量  相对于for循环里面的i
* step:步进 相对于i++ --%>
<%--
    for(int i=1;i<6;i++){

}
<c:forEach begin="初始值大小" end="结束值" step="步进大小" var="初始值">
    ${i}<br>
</c:forEach>
--%>
<c:forEach begin="1" end="20" step="1" var="i">
    ${i}<br>
</c:forEach>

结果
在这里插入图片描述

遍历容器怎么写

<%--
items 获取容器的对象
var 临时变量名称
varStatus 循环的状态对象
    index 获取循环的对象的索引
    count 循环的次数
--%>
<table border="1px">
<c:forEach items="${requestScope.list}" var="obj" varStatus="aa" >
    <tr>
        <td>${obj}
        </td>
    </tr>
</c:forEach>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Network porter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值