zoukankan      html  css  js  c++  java
  • JAVA框架-JSP的使用

    jsp的使用

    概述

    • Jsp 是由sun公司研发的一种 动态生成html页面的一种网页技术
    • 简单来说 jsp是java与html的结合体
    • 可以在任意系统上运行
    • 在web开发过程中担任显示层(视图层)的角色

    语法

    1. 注释

      <!-- html注释 (客户端能看到注释内容) -->
      <%-- jsp注释(客户端看不到内容)      --%>
      
    2. 声明
      格式:<%! java代码 %> 用于定义方法成员变量

    3. 脚本
      格式:<% java代码%> 用于定义局部变量 和执行语句

    4. 表达式
      格式:<%=表达式(值)%> 用于输出变量或者表达式的值

    5. 指令

       page
       language="java"  指定语言
       contentType="text/html; charset=UTF-8" 文档类型
       pageEncoding="UTF-8" 页面编码
       isErrorPage="true"  结合errorpage属性使用     错误页面设置(可以用来指定出错处理的页面)
       import="" 用来导包
      
    6. 动作

       include:在页面请求的引入一个页面
       usebean: 实例化javabean
       getproperty:取得javabean属性
       setproperty: 设置javaBean属性
       forword:转发
      

      下面是使用jsp相关动作的一个案例:

      <%@page import="java.util.ArrayList"%>
      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
      
      <!--  html注释 (客户端能看到的内容)-->
      <%--  jsp注释(客户端不可以看到)  --%>
          
      用于成员变量和方法的声明
      <%! String name = "Jeason";
      ArrayList al = new ArrayList();
      	public void show(){}
      %>
      
      用于局部变量和执行语句的声明(在转化为java文件时候,实在servelet的方法中的)
      <% String test = "test"; %>
      
      表达式,用于输出我们的变量或者表达式的值
      <%= name %>
      
      <jsp:include page="insert.jsp"></jsp:include>
      <jsp:useBean id="p1" scope="session" class="bean.Person"></jsp:useBean>
      <br>
      <%-- 输出我们刚在用useBean建立的对象信息 --%>
      <%= p1.toString() %>
      <br>
      <%-- 下面我们给刚才建立的Bean对象来赋值 --%>
      <jsp:setProperty property="name" value="Jeason" name="p1"/>
      <jsp:setProperty property="sex" value="man" name="p1"/>
      <jsp:setProperty property="age" value="24" name="p1"/>
      <%= p1.toString() %>
      
      <%-- 下面我们做一次转发 --%>
      <jsp:forward page="insert.jsp"></jsp:forward>
      
      </body>
      </html>
      

      未执行转发前的网页输出如下:

      用于成员变量和方法的声明 用于局部变量和执行语句的声明(在转化为java文件时候,实在servelet的方法中的) 表达式,用于输出我们的变量或者表达式的值 Jeason 测试一下jsp的include 啦啦啦
      啦啦啦
      Person [name=Jeason, sex=null, age=null]
      Person [name=Jeason, sex=man, age=24]
      

    面试题:jsp 和servlet 谁的速度效率高
    jsp本质就是servlet 在第一次被访问时候 被翻译成servlet类 我们可以在tomcat 目录work里面找到生成servlet

    jsp的内置对象和四大作⽤域

    1. 九大内置对象

      out:用于输出  正常 out.print  out.write  用户向页面输出数据
      pageContext:可以获取其他八大对象
      request:请求对象   可以得到请求参数(请求头相关信息)
      response:响应对象  跳转页面  响应页面数据
      session:会话技术   域对象   会话技术 
      application:就是servlet中servletContext 上下问对象 三个作用 根据相对路径取绝对路径  全局参数  域对象等
      exception:异常信息
      page:代指当前jsp页面  相对于javathis引用 
      config: 就是servletConfig  可以获取servlet中配置参数
      
      <%-- 演示 --%>
      <% out.write("jsp的out对象");  %>
      <br>
      <% out.write(pageContext.getSession().getId()); %>
      
      可以获得输出如下:
      jsp的out对象 
      07BC61F5C328BDABEB6C224FF5EBF9C7
      
    2. 四大作用域
      范围从大到小
      servletContext:整个工程 (整个项目下jsp和servlet都可以获取域对象中数据)
      session:一次会话(多页面 范围一次会话 存储用户信息)
      request:一次请求(多页面 转发虽然跳转了页面触发的是一次请求 一搬用于2个页面传递数据的时候使用)
      pageContext:当前jsp页面(当前页面)

    EL表达式的使⽤

    我们一般用EL来简化在jsp中编写的java代码。主要用来从request或者其他对象中取值.

    下面是一些简单的示例,我们在servlet程序中提前对request和session进行了参数赋值。

      ${1+1}
      ${1==1}
      ${1!=1}
    
    <%--  从请求对象中获取数据--%>
      <h1>用户名:${requestScope.username}</h1>
      <h1>年龄:${requestScope.age}</h1>
      <%--  从会话对象中获取数据--%>
      <h1>用户名2:${sessionScope.username}</h1>
    
    <%--  算数运算符--%>
      ${10 % 3}
      ${10 / 3}
      ${10 - 3}
    
    <%--  逻辑运算符--%>
      ${true && true}
      ${true && false}
      ${true || false}
      ${!true}
    
      ${not true}
      ${true or false}
      ${true and false}
    
    <%--  比较运算符--%>
      ${100 >= 100}
      ${sessionScope.username == tom}
    
    <%--  判断是否为空--%>
      ${!empty sessionScope.age}
    
    <%--  隐藏对象--%>
      <%--  从请求中获取参数--%>
      ${param.password}
    
    <%--EL会自动搜索4个作用域 --%>
      ${username}
    
    

    JSTL标签库

    JSTL也是同样,目的是为了完成减少java代码量,使用类似于html标签的方式来完成一些页面的流程控制

    语法也比较简单,使用前需要连接两个jar包jstl.jar和standard.jar,示例代码如下

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
    <%--配置JSTL--%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    
    
    
    <%--判断结构(常用)--%>
        <c:if test="fasle">
            <h1>判断通过了</h1>
        </c:if>
    <%--循环结构--%>
        <c:forEach begin="1" end="10">
            <a href="http://www.baidu.com">百度一下</a>
        </c:forEach>
    
    <%--循环遍历(常用)--%>
        <c:forEach items="1,2" var="temp" varStatus="vt">
            <spa>遍历的值${temp}</spa>
            <span>循环索引${vt.index}</span>
            <span>循环次数${vt.count}</span>
            <span>当前的值${vt.current}</span>
            <span>是否是第一个${vt.first}</span>
            <br/>
        </c:forEach>
    
    
    <c:if test="${empty myname}">
        <h1>myname是空的</h1>
    </c:if>
    <c:if test="${!empty myname}">
        <h1>myname不是空的</h1>
    </c:if>
    
    <%--选择结构--%>
    <c:choose>
        <c:when test="true">
            when1
        </c:when>
        <c:otherwise>
            其他的
        </c:otherwise>
    </c:choose>
    
    
    </body>
    </html>
    

    利用JSP进行分页展示案例

    <%--
      Created by IntelliJ IDEA.
      User: 17390
      Date: 2020/5/9
      Time: 16:34
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>pagetest</title>
    </head>
    <body>
    
        <%--1.用户请求是发送需要显示的页码--%>
        <%--2.获取页码(查询相关数据),需要考虑用户是否发送页码,没有的话默认第一页--%>
        <%--3.添加两个按钮,上一页和下一页--%>
        <%--4.如果当前是第一页 不显示上一页按钮 (另外一个同理)--%>
    
        <c:if test="${param.page == null}">
            <c:set var="page" value="1" scope="request"/>
        </c:if>
        <c:if test="${param.page != null}">
            <c:set var="page" value="${param.page}" scope="request"/>
        </c:if>
    
        当前的页数:${requestScope.page}
    
        <c:if test="${page>1}">
            <a href="pagetest.jsp?page=${requestScope.page-1}">上一页</a>
        </c:if>
        <c:if test="${page<10}">
            <a href="pagetest.jsp?page=${requestScope.page+1}">下一页</a>
        </c:if>
    
    
    
    </body>
    </html>
    
    

    利用JSP的el表达式和jstr来进行简单的分表

    首先在servelt程序中构建一个list,并放入request域中,进行页面的转发。

    package com.kkb.servlets;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.ArrayList;
    
    @WebServlet(name = "ListServlet",urlPatterns = "/list")
    public class ListServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ArrayList<String>  list = new ArrayList<>();
            list.add("jerry");
            list.add("tom");
            list.add("scot");
            list.add("jack");
            request.setAttribute("list",list);
            request.getRequestDispatcher("list.jsp").forward(request,response);
        }
    }
    
    

    页面从request中获得list,进行循环遍历并输出。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <table border="1px">
            <tr>
                <th>人员列表</th>
            </tr>
    <%--        遍历列表 变成一个个的单元格标签--%>
            <c:forEach items="${list}" var="name">
                <tr>
                    <td>${name}</td>
                </tr>
            </c:forEach>
        </table>
    </body>
    </html>
    
    
    

    小结

    EL 表达式可以编写一些简单的表达式例如算数 比较 逻辑判断 取值(最常用的)
    JSTL 用于实现流程控制 常见的 if for

  • 相关阅读:
    linux获取日志指定行数范围内的内容
    python解决open()函数、xlrd.open_workbook()函数文件名包含中文,sheet名包含中文报错的问题
    robot framework添加库注意事项
    robot framework取出列表子元素
    Vue 及框架响应式系统原理
    响应式布局和自适应布局的不同
    前端综合学习笔记---异步、ES6/7、Module、Promise同步 vs 异步
    前端综合学习笔记---变量类型、原型链、作用域和闭包
    doT.js模板引擎及基础原理
    Spring Boot入门第五天:使用JSP
  • 原文地址:https://www.cnblogs.com/JeasonIsCoding/p/13232622.html
Copyright © 2011-2022 走看看