• JSP使用


    目录

    简介

    作用

    创建

    结构

    常用脚本

    声名脚本

    表达式脚本

    代码脚本 

    注释

    九大内置对象

    四大域对象

    out与response.getWriter

    静态引入

    动态引入

    EL表达式

    作用

    语法

    取值顺序

    获取指定参数

    输出指定对象的数据

    运算符

    算数运算符

    关系比较

    逻辑运算符

    判空

    隐式对象


            使用Servlet返回前端页面代码编写较为复杂,并且维护与修改成本较高

    简介

            JSP (Java Server Pages) 基于Servlet技术的、运行在服务器之上、支持Java语言的动态网页技术。实际上JSP就是一个Servlet,当客户端请求一个JSP文件时,JSP文件会在服务器中转换成Servlet来执行。

    作用

             替换显示页面部分的Servlet

    创建

            在web文件夹下创建

    结构

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <html>
    3. <head>
    4. <title>Title</title>
    5. </head>
    6. <body>
    7. </body>
    8. </html>

    属性,page指令:  


    contentType:当前响应数据类型与编码格式

    language:翻译后支持的语言,目前只支持Java

    pageEncoding:设置当前编码格式

     import:导包,编译器可以自动导

    autoFlush:输出流缓冲区,满了是否自动刷新,默认是true,如果改为false,当缓冲区满了以后会报错

    buffer:缓冲区大小,默认8kb

    errorPage:当前页面出现异常时跳转的页面

    isErrorPage:当前页面是否为错误页面,默认值为false,如果为true表示捕获异常信息

    session:当前页面是否会创建session对象,默认是true

    extends:指定父类

    常用脚本

    声名脚本

    作用:声名

    语法:<%!  声名的东西  %>

    1. </head>
    2. <body>
    3. <%!
    4. private int num;
    5. private List<String> str;
    6. static {
    7. }
    8. %>
    9. </body>

    可以声名很多东西:基本数据,引用数据,静态代码块,方法,内部类

    表达式脚本

    作用:在jsp页面输出

    语法:<%=  写输出的内容  %>

     <%= "6666"%>

    地址

    代码脚本 

    作用:在jsp页面写java代码

    语法:<%  写代码  %>

    注释

    语法<%--  注释内容  -->

    九大内置对象

    jsp中的内置对象,是指Tomcat在翻译jsp页面成为Servlet源代码后,提供的九个对象

            request:请求对象

            response:响应对象

            pageContext:jsp的上下文对象,可以获取当前JSP的任何信息

            session:会话对象

            application:ServletContext对象

            config:ServletConfig对象

            out:输出流对象

            page:指向当前jsp的对象,相当于this

            exception:异常对象,注意需要在page指令中设置isErrorPage="true",

    四大域对象

    九大内置对象中用来存储数据的四个对象

    域对象:可以存储数据的对象

            pageContext:当前jsp页面中有效

            request:一次请求中使用

            session:一次会话中使用,从浏览器第一次访问该项目到浏览器关闭

            application:当前Tomcat中,从服务器打开到服务器关闭

    out与response.getWriter

    相同:都是给页面输出

    不同:response先于out执行

    原因:out输出时会先执行flush方法将输出的内容追加到response尾部导致的

            response中表示响应,经常用于设置返回给客户端的内容,out也是给用户做输出使用的。

            当jsp页面中所有代码执行完成后会执行out.flush操作,会把out缓冲区中的数据追加写入到response缓冲区末尾,会执行response的刷新操作,把全部数据写给客户端

    write:输出整型时会将数字转为字符输出

    out.write();

    print:先将类型转为字符串,再调用write

    out.print()

            在jsp页面中统一使用out.print()输出,既可以防止数据输出顺序错乱又可以保证数字不 会转换为字符输出。

    静态引入

    include指令

    语法:<%@ include file = " 引入的jsp文件 "%>

            静态引入两个jsp文件编译成一个java文件,除了page指令,两个jsp文件中可以共享同一个变量,但不能定义重名的变量。

    动态引入

    语法:

            通过代码引入另一个页面,动态引入会生成两个java文件,两个jsp文件中不可以共享同一个变量,可以定义重名的变量。

    转发

    1. <jsp:forward page="/b.jsp">
    2. </jsp:forward>
    3. 带值里面写

    试一试:

    打印九九乘法表:

    1. <%= "九九乘法表"%>
    2. <%
    3. for (int i= 0;i<10;i++){
    4. for (int j= 1;j<i+1;j++){
    5. %>
    6. <%
    7. out.print( i+"*"+j+"="+i*j+" " );
    8. out.flush();
    9. }
    10. %>
    11. <br>
    12. <%
    13. }
    14. %>
    15. ----------------------------------------------------------------------------------
    16. <%
    17. for (int i= 0;i<10;i++){
    18. for (int j= 1;j<i+1;j++){
    19. String str = i+"*"+j+"="+i*j;
    20. %>
    21. <font> <%= str %> </font> &nbsp
    22. <%
    23. }
    24. %>
    25. <br>
    26. <%
    27. }
    28. %>

     打印多个用户信息:

    1. <%
    2. ArrayList<Stu> list = new ArrayList<>();
    3. for (int i = 0 ;i<3 ;i++){
    4. Stu stu = new Stu("贺神"+i,"男",1+i);
    5. list.add(stu);
    6. }
    7. System.out.println(list);
    8. %>
    9. <table border="1" cellspacing="1" align="center">
    10. <tr>
    11. <td>姓名</td>
    12. <td>性别</td>
    13. <td>年龄</td>
    14. </tr>
    15. <tr>
    16. <td><%= list.get(0).getName()%></td>
    17. <td><%= list.get(0).getSex()%></td>
    18. <td><%= list.get(0).getAge()%></td>
    19. </tr>
    20. <tr>
    21. <td><%= list.get(1).getName()%></td>
    22. <td><%= list.get(1).getSex()%></td>
    23. <td><%= list.get(1).getAge()%></td>
    24. </tr>
    25. <tr>
    26. <td><%= list.get(2).getName()%></td>
    27. <td><%= list.get(2).getSex()%></td>
    28. <td><%= list.get(2).getAge()%></td>
    29. </tr>
    30. </table>

    EL表达式

    作用

    简化四大作用域获取数据的书写

    EL表达式就是替代以下代码的作用:

                    pageContext.getAttribute("key");             Object

                    request.getAttribute("key");

                    session.getAttribute("key");

                    application.getAttribute("key");

    语法

    ${key}

    例:

    1. <%
    2. request.setAttribute("name","凝光");
    3. %>
    4. <%= request.getAttribute("name")%>//使用Java代码获取并输出
    5. ${name};//直接搞

    取值顺序

    从小到大

    pageContext.setAttribute(String,Object); 同一个页面

    request.setAttribute(String,Object); 一个请求

    session.setAttribute(String,Object); 一个会话

    application.setAttribute(String,Object); 服务器中

    获取指定参数

    例:获取application的

    ${applicationScope.name}
    1. pageScope对应pageContext
    2. requestScope对应request
    3. sessionScope对应session
    4. applicationScope对应application

    输出指定对象的数据

    简单类型

    1. <%
    2. request.setAttribute("key",666);
    3. %>
    4. ${key}

    数组

    1. String[] arr = {"a","b","c"};
    2. request.setAttribute("key",arr);
    3. ${key[1]}

    对象

    1. request.setAttribute("key",Stu);
    2. ${key.name}

    集合

    1. List<Stu> list = new ArrayList<>();
    2. list.add(Stu1);
    3. list.add(Stu2);
    4. list.add(Stu3);
    5. request.setAttribute("key",list);
    6. ${key[1].name}

    字典

    1. Map<String,Stu> map = new HashMap<>();
    2. map.put("z",Stu1);
    3. map.put("l",Stu2);
    4. map.put("x",Stu3);
    5. request.setAttribute("key",map);
    6. ${key.z.name}
    7. ${key['z'].name}
    8. 如果有特殊符号,可以用[' '],

    一般默认打印,

    运算符

    算数运算符

    +      例:${key1+key2}

    -

    *

    /或div

    %或mod

    关系比较

    ==或eq        返回值为true/false

    !=或ne

    > 或gt

    <或lt

    >=或ge

    <=或le

    逻辑运算符

    &&     and

    ||           or

    !          not

    判空

    empty           ${empty key}

    隐式对象

    param获取Rquest对象的参数,返回String, ${param.key} 等价于 request.getParameter("key")
    paramValues获取Rquest对象传递的所有的参数值,返回字符串集合 ${paramValues} 等价于request.getParameterMap()
     
    header获取HTTP请求头 ${header.contentPosition}
    headerValues获取HTTP请求头中所有的值
    initParam获取上下文初始化参数(在web.xml中配置的context-param中的数据)
    pageContext一般用于获取 协议 服务器端口 获取工程路径(重点) 获取请求方式 等
    cookie获取cookie中的值,${cookie.username}

  • 相关阅读:
    Are Large Language Models Really Robust to Word-Level Perturbations?
    文件上传到oss上以及下载
    IPQ6010+QCN9074|QCN9074-6E Throughput Test Report in DR6018
    在docker环境下从头搭建openvslam/orb_slam3的流程记录以及问题总结
    【Pytorch基础教程35】引入非线性的激活函数
    外包干了五年,废了...
    cola架构:一种扩展点的实现思路浅析
    hive中concat_ws的秘密
    打造千万级流量秒杀系统第六课 云架构:基础设施是如何做到高可用的?
    2006-2021年上市公司社会责任报告基本信息数据
  • 原文地址:https://blog.csdn.net/weixin_44207220/article/details/127906549