JavaWeb JSP&JSTL&EL表达式 相关知识点总结

本文介绍了JSP的基本概念,如何嵌入Java代码动态生成内容,以及JSP页面与Servlet的关系。涵盖了内置对象、JSP指令、文件引入、参数传递、JavaBean使用和JSTL标签库等内容,是理解JSP核心技术的全面指南。
摘要由CSDN通过智能技术生成

JSP

什么是JSP?

JAVA Server Pages: java服务器端页面,也和Servlet一样,用于动态web技术!

最大的特定:

写JSP就像在写HTML

区别:

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

JSP原理

  • 浏览器向服务器发送请求,不管访问什么资源,其实都是在首先访问Servlet.

  • JSP最终也会被转换成为一个java类

  • JSP本质就是Servlet,它继承了HttpServlet

    • public void _jdpInit(); 初始化
    • public void _jspDestroy; 销毁
    • public void _jspService(req,resp); JSPService
      在这里插入图片描述
  1. 判断请求
  2. 内置一些对象
    在这里插入图片描述
    以上的这些个对象我们可以在jsp页面中直接使用。
  3. 输出页面前增加的代码

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TF7KyNIF-1629972821098)(C:\Users\张盛滨\AppData\Roaming\Typora\typora-user-images\image-20210826154052789.png)]

在JSP页面中:

  • 只要是java代码就会原封不动地输出。
  • 如果是HTML代码,就会被转换为:out.write("")这样的格式输出到前端。

JSP基础语法

由于任何语言都有自己的语法,JSP作为Java技术的一种应用,它拥有自己扩充的语法,且对于所有java语法都支持。

  • jsp表达式

    • <%=变量/表达式%>

    • <%--  JSP表达式
          作用:用来将程序的输出,输出到客户端
          形式:<%= 变量或表达式%>
          --%>
          <%= new java.util.Date()%>
      
  • jsp脚本片段(JSP脚本间是逻辑连续的)

    • <% java脚本 %>

    • <%--  JSP脚本片段
          作用:书写java脚本片段
          形式:<% 脚本片段 %>
          --%>
          <%
            int sum = 0;
            for (int i = 0; i < 100 ; i++) {
              sum = sum+i;
            }
            out.println("<h1>Sum="+sum+"</h1>");
          %>
      
  • 脚本片段的再实现,可在JSP代码中间嵌入HTML元素

    • <%--脚本片段的再实现--%>
          <%
            int x = 10;
            out.println(x);
          %>
          <p>这是一个JSP文档!</p>
          <%
            int y = 2;
            out.println(y);
          %>
          <%--在Jsp代码中间嵌入HTML元素(大括号分出来)--%>
          <%
            for (int i = 0; i < 4; i++) {
      
          %>
            <h2>hello,carson!<%=i%></h2>
          <%
            }
          %>
      

上面的几种情况jsp被编译生成的java代码会被放在_jspService方法中。

  • Jsp声明(作用范围更大)

    • <%! java脚本 %>
    • 其被编译生成的java代码不会被放在方法中,而是直接放到生成的java类中。
     <%--  JSP声明
        特点:书写产生的java代码不会被放在jspService方法中,而是直接放在类中(jspService方法外)
        格式: <%! 脚本片段 %>
        --%>
        <%!
          static {
            System.out.println("Loading Servlet!");
          }
          private int globalVar = 0;
          public void carson(){
            System.out.println("进入了方法carson!");
          }
        %>
    
  • jsp注释(其注释不会在客户端显示,HTML注释就会)

    • <%-- xx --%>

JSP基本指令

格式: <%@ page args… %> 【args代表各个参数u】

  • 定制错误界面

    • 通过JSP指令的方式

      <%--Jsp指令之 定制错误界面--%>
      <%@ page errorPage="error/500.jsp" %>
      
    • 通过web.xml配置文件的方式

    <!--错误页面的相关定义-->
        <error-page>
            <error-code>404</error-code>
            <location>/error/404.jsp</location>
        </error-page>
        <error-page>
            <error-code>500</error-code>
            <location>/error/500.jsp</location>
        </error-page>
    
  • 显式声明一个错误界面

    • <%@ page isErrorPage="true"%>
      
  • 引入文件指令(常用于引入共同的文件)

    • <%@ include file="路径" %>
      eg: <%@ include file="common/header.jsp"%>
      

JSP标签

  • 引入文件

    • <jsp:include page="路径" />
      eg: <jsp:include page="/common/header.jsp" />
      

问: <%@ include file=“common/header.jsp”%> 和

<jsp:include page="/common/header.jsp" />的区别?

  1. jsp标签引入文件需要/开头,jsp指令引入文件不需要/开头
  2. jsp指令引入多个文件 会将多个页面合二为一
  3. jsp标签引入多个文件,本质还是多个页面
  • 携带参数

    • <%--携带两个参数--%>
          <jsp:forward page="/jsptag2.jsp">
              <jsp:param name="name" value="carson"></jsp:param>
              <jsp:param name="age" value="21"></jsp:param>
          </jsp:forward>
      
      
      
      <%--目标页面:jsptag2.jsp中取出参数--%>
          名字:<%=request.getParameter("name")%>
          年龄:<%=request.getParameter("age")%>
      
  • 使用JavaBean及设置和获取属性

    • <jsp:useBean id="people" class="com.carson.pojo.People" scope="page"></jsp:useBean>
      
          <jsp:setProperty name="people" property="id" value="1"></jsp:setProperty>
          <jsp:setProperty name="people" property="age" value="21"></jsp:setProperty>
          <jsp:setProperty name="people" property="address" value="SHENZHEN"></jsp:setProperty>
          <jsp:setProperty name="people" property="name" value="Carson张"></jsp:setProperty>
      
          id:<jsp:getProperty name="people" property="id"/>
          姓名:<jsp:getProperty name="people" property="name"/>
          年龄:<jsp:getProperty name="people" property="age"/>
          地址:<jsp:getProperty name="people" property="address"/>
      

JSP内置对象

四大作用域:

pageContext < request < session < application

<%--内置对象--%>
        <%
            pageContext.setAttribute("name1","Carson张1号");//保存的数据仅在一个页面中有效
            request.setAttribute("name2","Carson张2号");//保存的数据仅在一个请求中有效,请求转发会携带这个数据
            session.setAttribute("name3","Carson张3号");//保存的数据仅在一个会话中有效,即从打开浏览器到关闭浏览器
            application.setAttribute("name4","Carson张4号");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
        %>

        <%
            //从pageContext中取出,我们通过寻找的方式来
            //从底层到高层(作用域),即page-->request-->session-->application
            String name1 = (String)pageContext.findAttribute("name1");
            String name2 = (String)pageContext.findAttribute("name2");
            String name3 = (String)pageContext.findAttribute("name3");
            String name4 = (String)pageContext.findAttribute("name4");
            String name5 = (String)pageContext.findAttribute("name5");//不存在

            pageContext.forward("pageContextDemo02.jsp");
        %>

        <%--使用EL表达式进行输出,即${}的形式--%>
        <h1>取出的值为:</h1>
        <h3>${name1}</h3>
        <h3>${name2}</h3>
        <h3>${name3}</h3>
        <h3>${name4}</h3>
        <h3>${name5}</h3>
        <h3><%=name5%></h3>

  • pageContext 存东西,保存的数据只在一个页面中有效

  • request 存东西,保存的数据在一次请求中有效,请求转发会携带数据

  • response

  • session 存东西,保存的数据仅在一次会话中有效,打开到关闭浏览器

  • application 存东西,保存的数据在服务器中有效,打开到关闭服务器

  • config 等同于[ServletConfig]

  • out

  • page

  • exception

EL表达式

一般格式: ${参数名} 其与 JSP表达式:<%=%> 等价

注:

  • ${参数名} 对于不存在的值,不会在网页中输出null.
  • <%=参数名%> 对于不存在的值,会将其输出为null

EL表达式获取表单中的数据格式: ${param.参数名}


EL:(Expression Language) 表达式语言

  • 获取数据

  • 执行运算

  • 获取web开发的常用对象

  • 是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)

使用前提:

pom.xml中需要引入两个依赖

  • JSTL依赖
  • standard标签库
<!--JSTL表达式的依赖-->
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <!--standard标签库-->
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>

JSTL标签

JSTL标签库的使用就是为了弥补HTML标签的不足,它自定义了许多标签供我们使用,标签的功能和java代码一样。


JSTL标签使用步骤:

  1. 引入对应的taglib,如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--使用JSTL标签库需要引入相应的taglib标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

注意:在tomcat的lib目录中也要引入支持jstl的包,否则启动tomcat会报错。即将相关Jar包复制到tomcat的lib目录下。

  1. 使用其中的方法标签(代码示例)
<%@ page import="java.util.ArrayList" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--使用JSTL标签库需要引入相应的taglib标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>coreforeach</title>
</head>
<body>
    <%
        ArrayList<String> people = new ArrayList<String>();
        people.add(0, "张三");
        people.add(1, "李四");
        people.add(2, "王五");
        people.add(3, "赵六");
        people.add(4, "田七");
        people.add(5, "carson");
        //利用request存储
        request.setAttribute("list",people);
    %>

    <%--var,每一次遍历出来的变量
    items,要遍历的对象--%>
    <c:forEach var="people" items="${list}">
        <c:out value="${people}" /><br>
    </c:forEach>
    <hr>

    <%--设置了 起始,终止,步长的遍历--%>
    <c:forEach var="people" items="${list}" begin="1" end="5" step="2">
        <c:out value="${people}"></c:out><br>
    </c:forEach>
    <hr>
</body>
</html>

JSTL标签包括:

  • 格式化标签

  • SQL标签

  • XML标签

  • 核心标签

    • <c:out> </c:out>
      <%--用于JSP显示数据,即像" <%=..%>" -->
      
    • <c:set></c:set>
       <%--用于保存数据 -->
      
    • <c:remove></c:remove>
      <%--用于删除数据 -->
      
    • <c:if></c:if>
      <%--于一般程序中的if语句类似 -->
      
    • <c:url></c:url>
      <%--使用可选参数创造URL -->
      
    • <c:forEach></c:forEach>
      <c:choose></c:choose>
      <c:when></c:when>
      <c:otherwise></c:otherwise>
      .......
      

更多关于JSTL的内容,可参考: JSTL菜鸟教程

JavaBean

javabean,又称实体类,pojo等,其有特定的写法要求:

  • 必须要有一个无参构造
  • 属性必须私有化
  • 必须有对于的get/set方法

JavaBean一般用来和数据库的字段做ORM;

ORM:Object Relational Mapping(对象关系映射)

  • 表<---->类
  • 字段<---->属性
  • 行记录<---->对象

The End!!创作不易,欢迎点赞/评论!!欢迎关注个人公众号

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值