javaweb and JSP&JSTL&EL

1、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 当前页面共享数据,还可以回去其他八个内置对象

变量名 真实类型 作用
pageContext PageContext 当前页面共享数据,还可以回去其他八个内置对象
request HTTPServletRequest 一次请求访问的多个资源(转发)
session HTTPSession 一次会话的多个请求间
application ServletContext 所有用户间共享数据
response HTTPServletResponse 响应对象
page object 当前页面(servlet)的对象 this
out JSPWriter 输出对象,数据输出到页面上面
config ServletConfig Servlet的配置对象
Exception Throwable 异常对象

四大域对象
作用域(数据可以起作用的区域)
PageContext(当前页面)
Request(一次请求)
session(一次会话)
application(服务器启动期间)

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

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

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

在这里插入图片描述

2、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】;找到为止
  • 如果是隐式对象是已经提前封装的数据 ,使用的时候可以直接获取
隐含对象 类型 说明
pageContext javax.servlet.ServletContext 表示此JSP的PageContext
pageScope java.util.Map 取得Page范围的属性名称所对应的值
requestScope java.util.Map 取得Request范围的属性名称所对应的值
sessionScope java.util.Map 取得Session范围的属性名称所对应的值
applicationScope java.util.Map 取得Application范围的属性名称所对应的值
param java.util.Map 如同ServletRequest.getParameter(String name)。回传String类型的值
paramValues java.util.Map 如同ServletRequest.getParameterValues(String name)。回传String[]类型的值
header java.util.Map 如同ServletRequest.getHeader(String name)。回传String类型的值
headerValues java.util.Map 如同ServletRequest.getHeaders(String name)。回传String[]类型的值
cookie java.util.Map 如同HttpServletRequest.getCookies()
initParam java.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} 取得主机端的服务信息

3、标签库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>

在这里插入图片描述

Guess you like

Origin blog.csdn.net/qq_45438019/article/details/120321634