JSP 简单总结

分享 HLSO6 ⋅ 于 2020-07-08 22:28:17 ⋅ 最后回复由 青牛 2020-07-09 16:52:23 ⋅ 2065 阅读

JSP

JSP可以用来进行数据交互,数据实时更新

程序框架

  • C/S
    服务器/客户端

  • B/S
    浏览器/服务器
    执行原理
    1. 基于请求和向右的
    2. 客户端向服务器发生请求
    3. 服务器向右客户端
      关键字 URL、HTTP、URI(地址中端口后边的部分)

tomcat服务器

apache推出的web应用服务器

可以把java编译的代码运行到服务器,端口配置需要在服务器配置

运行web项目时,需要配置tomcat环境。

JSP基本使用

  • JSP基本用法
    可以直接在html页面中嵌入java代码
    <%  %>  //书写代码
    <%= %>  //表达式
    <%! %>  //注释
    <%@page %>  //指令
        <%@page import="com.hnxy.dbutils.JdbcUtils"%>
        <%@page import="org.apache.commons.dbutils.QueryRunner"%>
        <%@ page language="java" contentType="text/html; charset=UTF-8"
            pageEncoding="UTF-8"%>
  • JSP执行过程
    • 翻译
      将jsp文件翻译成java文件
    • 编译
      将java文件编译成字节码文件
    • 执行
      执行字节码问题

内置对象

jsp内置对象是web容器创建的一组对象
引入原因
由于功能原因,比如客户端/服务端的区分,可以创建多个jsp文件,多个jsp文件需要互相传递数据
那么就需要内置对象了,以此来处理数据。后续会详细介绍

  • request
    代表了客户端的请求信息
    作用域为一次请求
  • response
    代表了对客户端的相应
    只在jsp页面中有效
  • session
    由服务器自动创建的与用户请求相关的对象
    服务器为每一个用户生成一个session
  • application
    可以将信息保存在服务器中
    类似于全局变量
  • out
    在浏览器输出信息
  • pageContext
    取得任何范围的参数
  • config
    获得服务器的配置信息
  • page
    对象代码的jsp本身
  • exception
    显示异常信息

    el

el Expression Language

表达式语言:
引入原因
JSP中嵌入java代码,整体感觉java代码与html代码互相嵌套

<%      
    for(Person p : persons){
        %>
            <tr>
                <td>    <%=p.getId() %> </td>
                <td>    <%=p.getName() %>   </td>
                <td>    <%=p.getSex() %>    </td>
                <td>    <%=p.getAge() %>    </td>
                <td>    <%=p.getFrom() %>   </td>
            </tr>
        <% 
    }   
%>    

使用el与jstl后

    <c:forEach items = "${persons }" var="p">
        <tr>
            <td>${p.id }</td>
            <td>${p.name }</td>
            <td>${p.sex }</td>
            <td>${p.age }</td>
            <td>${p.from }</td>
        </tr>
    </c:forEach>

可以做到 HTML代码中没有java代码,使用统一的标签形式

  • 语法规则
    ${EL expression}
    // 在Servlet或JSP中保存数据
    request.setAttribute("username", "admin");
    // 在JSP中访问数据
    姓名: ${username}

jstl

JavaServer Pages Standard Tag Library
引入原因
el作为简单的表达式,不能做逻辑、控制等

jstl优点就是提供一组标签,做逻辑运算。

        <%--  通用标签  --%>
        <c:set var="a" value="123"></c:set>

        el:${a}<br>
        jstl:<c:out value="${a}"></c:out>

        <c:remove var="a"></c:remove>

        el:${a} <br>
        jstl:<c:out value="${a}"></c:out>

        <br>
        <%--   分支标签 --%>
        <c:set var="b" value="1"></c:set>

        <c:if test="${b>=0}">
            >=0
        </c:if>
        <c:if test="${b<0}">
            b<0
        </c:if>

        <c:choose>
            <c:when test="${b>0}">
                >0
            </c:when>
            <c:when test="${b==0}">
                b=0
            </c:when>
            <c:otherwise>
                coco
            </c:otherwise>
        </c:choose>
        <br>
        <%--  循环标签  --%>
        <c:forEach var="i" begin="1" end="9" step="2">
            ${i},
        </c:forEach>

请求转发与重定向

  • 请求转发

    request.getRequestDispatcher("page2.jsp").forward(request,response);
  • 重定向
    response.sendRedirect("page2.jsp");
# 请求转发 重定向
1 地址栏中不会显示最终跳转的地址 地址栏中会跳转到最终页面的地址
2 服务端行为 客户端行为
3 查询 增删改

session对象

保存在服务端
会话描述
一个会画就是在一段时间内,一个客户端与web服务器的一连串相关的交互过程

  • 会话
    在一段时间内,客户端与服务器的一连串的交互过程
  • 作用域
    一次会话有效,无论使用数据转发还是重定向,都可以保存数据
  • 应用场景
    用户登录成功,保存用户信息
  • session失效
    1. 关闭浏览器
    2. 调用invalidate方法
    3. 最大不活动时间到期了
    <!-- page1.jsp -->
    <%
        //在session作用域保存数据
        session.setAttribute("msg3", "session msg");
        //输出回话的id
        System.out.println(session.getId());

    %>
    session:${msg3}<br>
    <%
        //移除session保存的数据
        session.removeAttribute("msg3");
        //使session失效
        session.invalidate();

        //设置最大不活动时间,单位秒
        session.setMaxInactiveInterval(10);
    %>

    <!-- page2.jsp -->
    PageContext:${msg}<br>
    request:${msg2}<br>
    session:${msg3}<br>
    application:${msg4}<br>

    <%
        System.out.println(session.getId());
    %>

cookie对象

保存在客户端

    1. 创建cookie对象,保存名值对
    2. 设置cookie的有效期
    3. 将cookie的数据写到客户端
    1. 使用request对象,获得客户端所有的cookie信息
    2. 遍历cookie数组
    <!-- page1.jsp -->
    <%
        //cookie的使用,写
        //创建对象
        Cookie cookie = new Cookie("msg5", "cookie msg");

        //设置有效期,单位是秒
        cookie.setMaxAge(7 * 24 * 60 * 60);

        //写到客户端
        response.addCookie(cookie);
    %>
    <!-- page2.jsp -->
    <%
        System.out.println(session.getId());

        //读cookie 保存的数据

        //获得客户端所有的cookie信息
        Cookie[] cookies = request.getCookies();

        //遍历数组,查找自己保存的cookie信息
        for(Cookie c:cookies){
            if("msg".equals(c.getName())){
                System.out.println(c.getValue());
            }
        }
    %>

session与cookie对比

# session cookie
1 保存在服务器 保存在客户端
2 数据类型是Object 数据类型是String
3 随着session的失效数据销毁 在有效期范围内有效
2 保存重要信息 保存不重要信息
版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-HLSO6,http://hainiubl.com/topics/75190
回复数量: 1
  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2020-07-09 16:52:23

    可以再补充一下request、session、application、cookie的应用场景。

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter