首页 > 其他分享 >jsp学习日记

jsp学习日记

时间:2024-06-03 11:10:47浏览次数:22  
标签:map 代码 list 学习 获取 jsp user 日记

JSP学习日记

什么是JSP? 曾经我以为jsp就是 "javascript" , 但显然并不是 ,jsp全称为 Java Server Pages , 翻译过来为 java服务器页面 , 其可以在静态的HTML页面中添加java代码 ,使得原来的静态HTML页面变得具有动态交互效果,我觉得这就是jsp目前对我来说最重要的功能及作用.

//开始我的学习路线

​ 怎样在IDEA(2024.1)上新建一个能够创建jsp的项目?

​ 因为之前做过一段时间Java EE的项目 , 因此找到这个样板还是挺简单的


ok,下一步 , 红1 , 蓝2,创建web服务。

之后就会出现

webapp很重要,因为我们的jsp代码要写到webapp里,出现之后就可以开始下一步编写代码了

代码编写

<1 : 网页呈现出 "我的第一个jsp网页"
    
    
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>jsp页面</title>
    </head>
    <body>
        <h2>我的第一个JSP页面</h2>
    </body>
</html>
是不是感觉和HTML很像?几乎一模一样 , JSP实质上就是在原本静态的HTML网页中添加一段或多端Java代码使其成为具有交互功能的动态网页 ,因此若果不去实现交互那么HTML就和JSP一模一样
 
<2: jsp中基本的注释
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>JSP基础语法</title>
    </head>
    <body>
       <pre>
         显示注释
            1:  能够在客户端查看的注释
            继承HTML风格注释 &lt;!--HTML注释--&gt;
           <!--HTML注释-->
               
               
       
         隐式注释
            不能能够在客户端查看的注释
            1:  jsp自己的注释  &lt;%--jsp自己的注释 --%&gt;
            <%-- jsp自己的注释 --%>
            2:  继承JAVA风格注释
                单行 //
                多行 /**/
       </pre>
    </body>
</html>
 &lt;!--HTML注释--&gt;就是 <!-- HTML注释 --> 为了将这行代码显示到网页上就只能将其不作为一段代码,当作一行字符串来向网页上引用 , ctri + / 快捷键注释
<3: jsp中最关键的script脚本小程序介绍
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Scriptlet</title>
    </head>
    <body>
     <%--
        在Jsp中Scriptlet脚本小程序一共有三种
            1: java脚本段 : 可以写Java代码 , 定义局部变量 , 编写语句
                <%
                    // 里面可以写java代码
                %>
                生成的代码在servlet中的service方法体中
                上面这句话我也有点懵 , 总之大致意思应该就是把在HTMl中写的Java代码会按照标签放在servlet中编译解析
                
            2: 声明 : 声明全局变量 , 或者 声明方法类
                <%!
                    声明全局变量
                 %>
                  生成的代码在servlet中的service方法类体中
                  这也就是为什么他可以是全局变量的关键
                
            3: 输出表达式 : 输出变量或者字面量
                <%=数值%>
                
                    生成的代码在servlet中的service方法体中 , 相当于out.print()输出
     --%>
                
    <%--  Java脚本段  --%>
                
    <%
        //注意观察标签
        //定义局部变量
        String str = "HELLO JSP" ;
        //输出内容到控制台
        System.out.println(str);
        //输出到浏览器
        out.print(str);
        //输出全局变量
        out.write("全局变量: " + num);
    %>
        
    <%--  2声明全局变量  --%>
    <%!
        //注意观察标签
        //声明全局变量
        int num = 10;
    %>
    <%--  3输出表达式  --%>
    <%=str%>
    </body>
</html>
总之就分为三种   <%  用来写Java代码 %>
              <%!  用来定义全局变量 %>
        	  <%= 输出%>
//自我认为,包含就是为了提高代码的复用率 , 什么叫复用率 ,将大量的相同的的代码,有着相同作用的集合封装起来
//使用时不必一行一行代码重复进行多次的 C V ,利用某行”包含代码“顶替一大堆代码.
<4: 静态包含
    1 , 创建三个jsp页面
    (1):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>include静态包含-头部</title>
  </head>
  <body>
    <h2>头部内容</h2>
  </body>
</html>
    
    
    (2):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>include静态包含</title>
  </head>
  <body>
    <%--
      include静态包含
      格式:
      <%@include file="要包含的页面地址"%>
      特点:
      1: 将内容进行直接替换
      2: 静态包含只会生成一个源码文件最终全部在JSPservice源码文件中 , 因此不能出现同名变量
      3: 效率高 , 耦合度高 , 因此用的较多的为动态包含
     --%>
    <%@include file="04-jsp-include-static-head.jsp"%>
    <h2>主体内容</h2>
    <%@include file="04-jsp-include-static-tail.jsp"%>
  </body>
</html>
          
          
    (3):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>include静态包含-尾部</title>
  </head>
  <body>
    <h2>尾部内容</h2>
  </body>
</html>
    
<5: 动态包含
动态包含和静态很像 , 只不过静态像是在原本的主函数里面在增添新的代码 , 而动态就像是写出一个个函数,  主函数若是需要就直接调用函数。
1.创建三个jsp页面

(1):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>include动态包含-头部</title>
  </head>
  <body>
    <h2>头部内容</h2>
  </body>
</html>

(2): 
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>include动态包含</title>
    </head>
    <body>
        <%--
        相当于方法的调用,相当于函数
            动态包含格式:
                <jsp:include page="要包含的地址"></jsp:include>
                特点:
                    1: 动态包含相当于方法的调用
                    2: 动态包含会生成多个源码文件
                    3: 可以定义同名文件
                    4: 效率高 , 耦合度低
                    提示:
                        当动态包含不需要传递参数时,双标签中不能出现任何内容

                    使用动态包含传递参数
                    <jsp:include page="要包含的地址">
                           <jsp:param name="参数名" value="参数值"/>
                    </jsp:include>
                    提示:
                        name属性不支持参数值 , value支持参数值
                    获取参数值:
                        request.getParameter(name); 通过指定参数名获取参数值
          --%>
<%--        这行代码只会获取null值 , 因为只要跳转页面page就会失效--%>
        <jsp:include page="05-jsp-include-dynamic-head.jsp"></jsp:include>
        <h2>主体内容</h2>
        <%
            String str = "code" ;
            String url = "05-jsp-include-dynamic-tail.jsp" ;
        %>
        <jsp:include page="<%=url%>"></jsp:include>
        <%--  动态包含传递参数      --%>
        <jsp:include page="<%=url%>">
            <jsp:param name="uname" value="admin"/>
            <jsp:param name="msg" value="<%=str%>"/>
        </jsp:include>
    </body>
</html>

(3):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>include动态包含-尾部</title>
  </head>
  <body>
    <h2>尾部内容</h2>
    <%-- 获取动态包含传递的参数 --%>
    <%
      String uname = request.getParameter("uname");
      String msg = request.getParameter("msg");
//      输出
      out.print(uname + " , " + msg + "\n");
    %>
  </body>
</html>

<6: 域
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>四大域对象</title>
    </head>
    <body>
     <%--
        四大域对象
        page:
         在当前页面有效 , 跳转后无效
        request:
         在一次请求中有效 , 服务端跳转有效 , 客户端跳转无效
        session:
         再一次会话中有效 , 服务端 , 客户端跳转都有效果
        application:
         在整个应用中都有效


         jsp中跳转方式
          1 : 服务端跳转
            <jsp:forward page = "需要跳转的页面地址" > </jsp:forward>
          2 : 客户端跳转
            超链接



        在合理范围内尽可能小

     --%>
     <%
         //内部对象
         //配置page范围内的域对象
            pageContext.setAttribute("name1","张三");
         //配置request范围内的域对象
            request.setAttribute("name2","张四");
         //配置session范围内的域对象
            session.setAttribute("name3","张五");
         //配置application范围内的域对象
            application.setAttribute("name4","张六");
     %>
     <%-- jsp中服务端跳转  page失效 --%>
<%--    <jsp:forward page="06-jsp-FOUR-field-getparmeter.jsp"></jsp:forward>--%>
     <%-- 超连接跳转   request失效 --%>
        <a href="06-jsp-FOUR-field-getparmeter.jsp" >跳转</a>
     <%-- 关闭浏览器再打开 session失效   --%>
     <%-- 服务器关闭 application失效   --%>

    </body>
</html>
    
    
//获取四大域的值
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>四大域对象</title>
    </head>
    <body>
     <%--
        四大域对象

     --%>
     <%
         //获取域对象的值
         out.print("page范围: " + pageContext.getAttribute("name1") + "<br>");

         out.print("request范围: " + request.getAttribute("name2") + "<br>" );

         out.print("session范围: " + session.getAttribute("name3") + "<br>" );

         out.print("application范围: " + application.getAttribute("name4") + "<br>" );

     %>


    </body>
</html>
<7: El表达式
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>EL表达式</title>
    </head>
    <body>
        <%--
            EL表达式是为了简化JSP
                格式: ${experssion}  experssion: 域对象的名称
                操作对象 : 域对象,不能操作局部变量
                操作范围 : page  request session application
                提示:
                    如果El表达式获取域对象的值为空 , 默认为空字符串
                    , 默认从小到大寻找 , 找到即止 , 若四个范围都没找到 , 显示空字符串
                若想查找指定范围
                pageScope , requestScope , sessionScope , apolicationScope

          --%>
        <%--      设置数据--%>
        <%
            pageContext.setAttribute("uname","张三");
            request.setAttribute("uname","李四");
            session.setAttribute("uname","王五");
            application.setAttribute("uname","马六");
            //定义局部变量
            String str = "侯七" ;
        %>
        <%--    获取数据--%>

        <%--            拿不到局部变量--%>
            获取局部变量: ${str}  <br>
                
            获取域对象: ${uname}  <br>
            获取指定范围的 page作用域 ${pageScope.uname} <br>
            request作用域 ${requestScope.uname} <br>
            session作用域 ${sessionScope.uname} <br>
            application作用域 ${applicationScope.uname} <br>
    </body>
</html>
<8 EL表达式的使用
    <1 , 新建一个User.java文件作为javabean
    package org.example.po;

public class User {
    private Integer id;
    private String name;
    private String password;

    public User() {
    }

    public User(Integer id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

    
    
    <2 : 开始编写EL使用的代码
    
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="org.example.po.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>EL使用</title>
    </head>
    <body>
        <%--      EL表达式的使用
                    获取LIST
                        获取list的size : ${list.size()}
                        获取list的指定下标 : ${list[num]}   num,为指定下标
                        list代表的是限域变量名
                    获取map
                        获取map中指定key的value : ${map.ket}      ${map["key"]}
                        map代表的限域变量名
                    获取javabean
                        获取JavaBean中的属性 : ${javabean.属性名}   ${javabean.get属性名}
                    提示:
                        javabean中的属性字段必须要提供get方法否则获取不到
         --%>
        <%
            //获取list
            List<String> list = new ArrayList<String>();
            list.add("aaa");
            list.add("bbb");
            list.add("ccc");
            request.setAttribute("list", list);

            //获取map
            Map map = new HashMap();
            map.put("aaa","111") ;
            map.put("bbb","222") ;
            map.put("ccc","333") ;
            request.setAttribute("map", map);

            //获取javabean
            User user = new User();
            user.setId(1);
            user.setName("zhangsan");
            user.setPassword("123456");
            request.setAttribute("user", user);

        %>
    <h4>获取LIST</h4>
        获取listsize : ${list.size()} <br>
        获取list指定下标 : ${list[1]} <br>
    <h4>获取map</h4>
        获取map指定key的value : ${map.aaa}-----${map["bbb"]} <br>

    <h4>获取javabean</h4>
        ${user} <br>
    获取javabean中的属性: ${user.name} ------ ${user.password} <br>


    </body>
</html>

标签:map,代码,list,学习,获取,jsp,user,日记
From: https://www.cnblogs.com/123456-BX/p/18228386

相关文章

  • java springboot基于Android平台的诗词学习系统APP小程序万字文档和PPT(源码+lw+部署
    前言......
  • Go 语言学习笔记之数组与切片
    大家好,我是码农先森。数组与切片的区别在Go语言中,数组和切片是两种不同的数据结构,它们之间有以下主要区别。参数长度:数组(Array):数组的长度是固定的,在创建时就需要指定数组的长度,无法动态改变;只有长度信息,通过len()函数获取。切片(Slice):切片是对数组的一个引用,底层使用的是......
  • Vue.js - 生命周期与工程化开发【0基础向 Vue 基础学习】
    文章目录Vue的生命周期Vue生命周期的四个阶段Vue生命周期函数(钩子函数工程化开发&脚手架VueCLI**开发Vue的两种方式:**脚手架目录文件介绍项目运行流程组件化开发&根组件App.vue文件(单文件组件)的三个组成部分普通组件的注册使用局部注册的方法全局注册的方法......
  • docker学习--docker容器镜像常用命令大全(简)
    文章目录一、镜像命令二、容器管理命令一、镜像命令dockersearch#搜索镜像dockerpull/push#下载/上传镜像dockerimages#查看所有本地主机上的镜像可以使用dockerimagels代替dockertag#源镜像名新镜像名dockerrmi#删除镜像dockerimageprune#移......
  • 深度学习知识与心得
    目录深度学习简介传统机器学习深度学习发展感知机前馈神经网络前馈神经网络(BP网络)深度学习框架讲解深度学习框架TensorFlow一个简单的线性函数拟合过程卷积神经网络CNN(计算机视觉)自然语言处理NLPWordEmbedding词向量词向量学习方法:LSA、PLSA词向量训练词向量......
  • 《Linux内核完全注释》学习笔记:2.5 Linux内核对内存的使用方法
    在Linux0.11内核中,为了有效地使用机器中的物理内存,内存被划分成几个功能区域,如图2-9所示。图2-9物理内存使用的功能区域分布图Linux内核程序占据在物理内存的开始部分,接下来是用于供硬盘或软盘等块设备使用的高速缓冲区部分。当一个进程需要读取块设备中的数据时,系统会......
  • 遥感图像的深度学习的任务类型
    在遥感图像的深度学习任务中,利用深度学习技术处理和分析遥感图像已经成为一个重要的研究方向。遥感图像来自卫星、无人机等设备,包含了丰富的地球表面信息。以下是遥感图像深度学习中的主要任务类型:1.图像分类(ImageClassification)描述:将整幅遥感图像分配到特定的类别中,例如......
  • 【Django】学习笔记
    文章目录@[toc]MVC与MTVMVC设计模式MTV设计模式Django下载Django工程创建与运行创建工程运行工程子应用创建与注册安装创建子应用注册安装子应用数据模型ORM框架模型迁移Admin站点修改语言和时区设置管理员账号密码模型注册显示对象名称模型显示中文App显示中文视图......
  • 【机器学习】基于tensorflow实现你的第一个DNN网络
    博客导读:《AI—工程篇》AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效AI智能体研发之路-工程篇(二):Dify智能体开发平台一键部署AI智能体研发之路-工程篇(三):大模型推理服务框架Ollama一键部署AI智能体研发之路-工程篇(四):大模型推理服务框架Xinference一键部署AI智能体......
  • 七、FreeRTOS学习笔记-中断管理
    FreeRTOS学习笔记-中断管理中断:让CPU打断正常运行的程序,转而去处理紧急的事件(程序)中断执行机制,可简单概括为三步:1、中断请求:外设产生中断请求(GPIO外部中断、定时器中断等)2、响应中断:CPU停止执行当前程序,转而去执行中断处理程序(ISR)3、退出中断:执行完毕,返回被打断的程序处,继续......