• jsp-一篇就够


    目录

    jsp是什么

    jsp如何插入java代码:

    Servlet与JSP异同点

    JSP 生命周期:

     第一个jsp程序

    jsp内置对象 

    JSP指令

    EL表达式

    JSTL作用和语法格式


    jsp是什么

    是一种动态网页开发技术。是一个以.jsp结尾的特殊的servlet文件。

    jsp如何插入java代码:

    标签通常以<%开头,以%>结束

    Servlet与JSP异同点

    序号ServletJSP
    1Servlet 在 Java 内添加 HTML 代码JSP 在 HTML 内添加 Java 代码
    2Servlet 是一个 Java 程序,支持 HTML 标签JSP 是一种 HTML 代码,支持 Java 语句
    3Servlet 一般用于开发程序的业务层(做一些复杂的逻辑处理)JSP 一般用于开发程序的表示层(显示数据)
    4Servlet 由 Java 开发人员创建和维护JSP 常用于页面设计,由 Web 开发人员使用

    JSP 生命周期:

    定义了 JSP 从创建到销毁的整个过程。这类似于 Servlet 生命周期,不同的是,JSP 依赖于 Servlet,用户访问 JSP 页面时,JSP 代码会被编译成 Servlet 代码,最终,以字符串的形式向外输出 HTML 代码。所以,JSP 只是在 Servlet 的基础上做了进一步封装。
    JSP 生命周期阶段如下:

    1. 编译
    2. 初始化(容器调用 jspInit() 方法)
    3. 执行(容器调用 _jspService() 方法)
    4. 销毁(容器调用 jspDestroy() 方法)

     第一个jsp程序

    index.jsp 代码如下:

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%out.print("Hello");%>
    1. 启动服务器
    2. 通过 URL 访问,例如:http://localhost:8080/index.jsp

    jsp内置对象 

    为了简化页面的开发过程,JSP 提供了九个内置对象。

    JSP 内置对象又称为隐式对象,它们由容器实现和管理。在 JSP 页面中,这些内置对象不需要预先声明,也不需要进行实例化,我们可以直接在脚本和表达式中使用。

    对  象类型说  明
    requestjavax.servlet.http.HttpServletRequest获取用户请求信息
    responsejavax.servlet.http.HttpServletResponse响应客户端请求,并将处理信息返回到客户端
    outjavax.servlet.jsp.JspWriter输出内容到 HTML 中
    sessionjavax.servlet.http.HttpSession用来保存用户信息
    applicationjavax.servlet.ServletContext所有用户共享信息
    configjavax.servlet.ServletConfig这是一个 Servlet 配置对象,用于 Servlet 和页面的初始化参数
    pageContextjavax.servlet.jsp.PageContextJSP 的页面容器,用于访问 page、request、application 和 session 的属性
    pagejavax.servlet.jsp.HttpJspPage类似于 Java 类的 this 关键字,表示当前 JSP 页面
    exceptionjava.lang.Throwable该对象用于处理 JSP 文件执行时发生的错误和异常;只有在 JSP 页面的 page 指令中指定 isErrorPage 的取值 true 时,才可以在本页面使用 exception 对象。

    具体 用法和区别:

    1. <%--四个可存值取值的内置对象--%>
    2. <%--setAttribute(name,value):吧name属性设置为相应的value--%>
    3. <%--在某次请求有效--%>
    4. <% request.setAttribute("a1","aaa");%>
    5. <%request.getAttribute("a1");%>
    6. <%--多次请求--%>
    7. <%session.setAttribute("b1","bbb");
    8. session.getAttribute("b1");%>
    9. <%--application表示在整个程序运行期间,换浏览器也可以得到--%>
    10. <%application.setAttribute("c1","ccc");
    11. application.getAttribute("c1");%>
    12. <%--page=this 在当前页面有效--%>
    13. <%pageContext.setAttribute("d1","ddd");
    14. pageContext.getAttribute("d1");%>
    15. <%--<%response.sendRedirect("");%>:重定向--%>
    16. <%response.getWriter();%>
    17. <%--out输出--%>
    18. <%out.print("out-----");%>
    19. <%out.print("<script>alert('succse');script>");%>
    20. <%--config用来获得初始化参数--%>
    21. <%config.getInitParameter("");%>
    22. <%--exception:在页面有错误情况下才会使用,一般不使用--%>

    JSP指令

    JSP 指令(directive)用来告诉 Web 服务器如何处理 JSP 页面的请求和响应。

    服务器会根据 JSP 指令来编译 JSP,生成 Java 文件。JSP 指令不产生任何可见输出,在生成的 Java 文件中,不存在 JSP 指令。

    JSP 指令以<%@开始,以%>结束,语法如下:

    <%@ directive attribute = "value" [attribute2 = "value2" ...]%>

     指令分为以下 3 种类型。

    指  令说  明
    <%@ page ... %>定义与页面相关的属性,例如脚本语言、错误页面和缓冲要求
    <%@ include ... %>引入其它 JSP 文件
    <%@ taglib ... %>声明并导入标签库

     page 指令用来定义当前页面的相关属性。page 指令可以在 JSP 页面的任意位置编写,通常放在 JSP 页面的顶部。

     page指令各个属性解释:

    属  性取  值说  明举  例
    buffernone、缓冲区大小(默认值为 8kb)指定输出流是否有缓冲区<%@ page buffer="16kb" %> 
    autoFlushtrue(默认值)、false指定缓冲区是否自动清除<%@ page autoFlush="true" %> 
    contentTypetext/html; charset = ISO-8859-1、
    text/xml;charset = UTF-8 等
    指定 MIME 类型和字符编码<%@ page contentType="text/html;charset=UTF-8" %>
    errorpage页面路径指定当前 JSP 页面发生异常时,需要重定向的错误页面<%@ page errorpage="myerrorpage.jsp" %>

    注意:myerrorpage.jsp 的 isErrorpage 值必须为 true
    isErrorpagetrue、false(默认值)指定当前页面为错误页面<%@ page isErrorpage="true" %>  
    extends包名.类名指定当前页面继承的父类,一般很少使用<%@ page extends="mypackage.SampleClass"%>
    import类名、接口名、包名导入类、接口、包,类似于 Java 的 import 关键字<%@ page import = " java.util.Date" %>
    <%@ page import="java.io.*, java.lang.*"%>
    info页面的描述信息定义 JSP 页面的描述信息,可以使用 getServletInfo() 方法获取<%@ page info="这里是编程帮的页面信息"%>
    isThreadSafetrue(默认值)、false是否允许多线程使用<%@ page isThreadSafe="false" %>
    language脚本语言指定页面中使用的脚本语言<%@ page language= "java" %>
    sessiontrue(默认值)、false指定页面是否使用 session<%@ page session="false" %>
    isELIgnoredtrue(默认值)、false指定页面是否忽略 JSP 中的 EL<%@ page isELIgnored="false" %>

     以上属性除了 import 可以声明多个外,其它属性都只能出现一次。

    include 指令用于在 JSP 页面引入其它内容,可以是 JSP 文件、html 文件和文本文件等,相当于把文件的内容复制到 JSP 页面。引入的文件和 JSP 页面同时编译运行

    在 index.jsp 页面使用 include 指令引入 head.jsp。head.jsp 代码如下:

    <p>header内容​p>

    index.jsp 代码如下:

    1. <html>
    2. <head>
    3. <title>$Title$title>
    4. head>
    5. <body>
    6. <%@ include file="head.jsp"%>
    7. body>
    8. html>

     taglib 指令声明并引入标签库。Java API 允许在页面中自定义标签,标签库就是自定义标签的集合 .具体下面在描述

    EL表达式

    主要作用展示数据

    EL 表达式语法如下:

    ${EL表达式}

    EL支持算术运算符、逻辑运算符、比较运算符等

    注意:EL 的+运算符与 Java 的+运算符不一样,它无法实现两个字符串的连接运算。

    具体用法

    1. <body>
    2. <%
    3. //EL如果读取变量变量一定要在作用域中pageContext,request,session,application中
    4. // 下面a不可读取,但a1可以
    5. int a=10;
    6. pageContext.setAttribute("a1",a)
    7. //集合类型,但这里只能一个一个读取循环集合读取下面会讲
    8. List list = new ArrayList();
    9. list.add("abc");
    10. pageContext.setAttribute("a2",list);
    11. Map map = new HashMa();
    12. map.put("k1","key");
    13. pageContext.setAttribute("a3",map);
    14. %>
    15. ${20+30}<br> //50
    16. ${20>30}<br> //false
    17. ${20<30}<br> //true
    18. ${20>30?"aaa":"bbb"}<br> //bbb
    19. a=${a}<br> //a=
    20. a=${a1}<br> // a=10
    21. abc=${a2[0]} //abc=abc
    22. k1=${a3.k1} //k1=key

    如果集合中键值相同会怎样?怎样获得指定作用域的值?

    1. <%
    2. pageContext.setAttribute("a4",pageContext内容);
    3. request.setAttribute("a4",request内容);
    4. session.setAttribute("a4",session内容);
    5. application.setAttribute("a4",application内容);
    6. %>
    7. //键值相同,按顺序获取最前面的
    8. a4=${a4} //pageContext内容
    9. session=${sessionScope.a4} //session内容
    10. pageContext = ${pageScope.a4} //pageContext内容

    JSTL作用和语法格式

    作用:简化jsp页面编写

    语法格式:

    在jsp界面引入

     prefix前缀是固定的

     常用标签

     

     具体用法

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3. <html>
    4. <head>
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <h1>yih1>
    9. <c:set var="uname" value="zhangsan" scope="session">
    10. c:set>
    11. <c:if test="${uname == "zhangsan}">
    12. 这是张三
    13. c:if>
    14. <c:choose>
    15. <c:when test=$"{uname =='zhangsan'}">
    16. c-choose-zhangsan
    17. c:when>
    18. <c:otherwise>
    19. c-choose-bushizhangsan
    20. c:otherwise>
    21. //foreach
    22. <%
    23. List list = new ArrayList();
    24. list.add("abc");
    25. list.add("123");
    26. list.add("zhangsan");
    27. pageContext.setAttribute("ulist",list);
    28. %>
    29. <c:forEach items="${ulist}" var="user" varStatus="sta">
    30. ${user}<br>
    31. c:forEach>
    32. //日期
    33. date = <fmt:formatDate value="${mytime}" pattern="yyyy-,,-dd">fmt:formatDate>
    34. ${sessionScope.uname}
    35. body>
    36. html>

     foreach

  • 相关阅读:
    最近公共祖先(LCA)
    基于单片机的智能蓝牙避障循迹小车
    android--TextView在刷新时宽度变大的问题排查记录
    数学建模学习(105):五种正态检验方法的实践,Python实现
    Linux的20个常用命令
    c++学习--第三部分
    ESXI之IOChain网络框架
    STM32 定时器介绍
    【SpringCloud Alibaba -- Nacos】Linux 搭建 Nacos 集群
    洛谷题目题解详细解答
  • 原文地址:https://blog.csdn.net/m0_56223907/article/details/127039981