• JSP(java服务器页面)



    学习视频来自于:秦疆(遇见狂神说)Bilibili地址
    他的自学网站:kuangstudy

    我们缺乏的不是知识,而是学而不厌的态度


    一、JSP

    1.1 介绍

    1.1.1 JavaServer Pages

    JSP是一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,并能与服务器上的其它Java程序共同处理复杂的业务需求。

    1.1.2 JSP原理

    JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。
    编译文件夹
    tomcat 中有一个work目录。
    IDEA中C:\Users\用户\AppData\Local\JetBrains\IntelliJIdea2022.1\tomcat\7418122c-fa8f-47f6-b8e9-6f2fd0cfe9e3\work

    1.1.3 内置对象

    这些个对象我们可以在JSP页面中直接使用!

    final javax.servlet.jsp.PageContext pageContext;  //页面上下文
    javax.servlet.http.HttpSession session = null;    //session
    final javax.servlet.ServletContext application;   //applicationContext
    final javax.servlet.ServletConfig config;         //config
    javax.servlet.jsp.JspWriter out = null;           //out
    final java.lang.Object page = this;               //page:当前
    HttpServletRequest request                        //请求
    HttpServletResponse response                      //响应
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.1.4 输出页面前增加的代码

    response.setContentType("text/html;charset=UTF-8");       //设置响应的页面类型
    pageContext = _jspxFactory.getPageContext(this, request, response,
           null, true, 8192, true);
    _jspx_page_context = pageContext;
    application = pageContext.getServletContext();
    config = pageContext.getServletConfig();
    session = pageContext.getSession();
    out = pageContext.getOut();
    _jspx_out = out;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.2 JSP基础语法

    1.2.1 JSP表达式

    作用
    将程序输出到客户端。

    <%= 变量或者表达式%>
    <%--注释--%>
    
    • 1
    • 2

    练习

    <%= new java.util.Data()%>
    
    • 1

    1.2.2 JSP脚本片段

    作用
    可以在jsp页面写java程序,服务器运行后,会被生成到_jspService方法中。

    <%代码(作用域:service的局部变量)%>
    
    • 1

    练习

    <%
    int sum = 0;
    for(int i = 0; i <=10 ; i++){
    sum+=i;
    }
    out.println("<h1>Sum="+sum+"</h1>");
    %>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.2.3 JSP声明

    作用
    可以在jsp页面写java程序,服务器运行后,会被编译到JSP生成Java的类中。

    <%!代码(作用域:全局变量)%>
    
    • 1

    练习

    <%! private int num = 0;
    	public void add(int a ,int b){
    	out.println("<h1>result=" + ( a + b ) + "</h1>")
    %>
    
    • 1
    • 2
    • 3
    • 4

    1.2.4 EL表达式

    作用

    1. 获取数据
    2. 执行运算
    3. 获取web开发的常用对象
    ${(可以是java代码,或者变量)}
    
    • 1

    1.2.5 jsp注释和html注释

    写法

    <!-- html注释 -->
    <%--JSP注释--%>
    
    • 1
    • 2

    区别
    JSP的注释,不会在客户端显示,HTML就会!

    1.2.6 JSP指令

    include(包含)

    <%--@includ 将其他页面设置成页头和页尾,并将指定的页面合为一个--%>
    
    <%@include file="common/header.jsp"%>
    <h1>网页主体</h1>
    <%@include file="common/footer.jsp"%>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    page(页面)

    <%--引入jar包--%>
    <%@page import="java.util.*"%>
    <%--标明这是一个错误页面--%>
    <%@page isErrorPage="true"%>
    <%--定制一个错误页面,当前页面出现错误,跳转到指定页面--%>
    <%@page ErrorPage="error/500.jsp"%>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在web.xml也可以手动定义错误页面

    <error-page>
    	<error-code>404</error-code>
    	<location>/error/404.jsp</location>
    </error-page>
    <error-page>
    	<error-code>500</error-code>
    	<location>/error/500.jsp</location>
    </error-page>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    taglib(标签)

    <%--Taglib 指令是定义一个标签库以及其自定义标签的前缀.--%>
    <%@taglib prefix="" uri="" tagdir="" %>
    
    • 1
    • 2

    1.2.7 JSP标签

    <%--jsp:include:拼接页面,本质还是三个--%>
    <jsp:include page="common/header.jsp"/>
    <%--jsp:forward 页面跳转--%>
    <jsp:forward page="/jsptag2.jsp">
    	<%--jsp:forward 页面传值--%>
        <jsp:param name="name" value="kuangshen"></jsp:param>
        <jsp:param name="age" value="12"></jsp:param>
    </jsp:forward>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.3 九大内置对象

    1.3.1 内置对象

    对象作用
    PageContext存信息
    Request存信息
    Response
    Session存信息
    ApplicationSerlvetContext存信息
    configSerlvetConfig
    outresp.getWriter()
    pagethis
    exception错误

    1.3.2 作用域

    使用内置对象存数据,取数据

    <%--内置对象,存入字符串--%>
    <%
        pageContext.setAttribute("name1","天宇1");
        request.setAttribute("name2","天宇2");
        session.setAttribute("name3","天宇3");
        application.setAttribute("name4","天宇4");
    %>
    <%--脚本片段中的代码,会被原封不动生成到jsp.java
    要求:这里面的代码,必须保证java语法的正确性
    --%>
    <%
        // 从pageContext取出,我们通过寻找的方式来获取
        String name1 = (String) pageContext.findAttribute("name1");
        String name2 = (String) pageContext.findAttribute("name2");
        String name3 = (String) pageContext.findAttribute("name3");
        String name4 = (String) pageContext.findAttribute("name4");
        String name5 = (String) pageContext.findAttribute("name5");
    %>
    <%--使用EL表达式输出:null会自动不显示--%>
    <h1>${name1}</h1>
    <h1>${name2}</h1>
    <h1>${name3}</h1>
    <h1>${name4}</h1>
    <h1>${name5}</h1>
    <%--使用jsp表达式输出,null会显示--%>
    <h1><%=name1%></h1>
    <h1><%=name2%></h1>
    <h1><%=name3%></h1>
    <h1><%=name4%></h1>
    <h1><%=name5%></h1>
    <%
      pageContext.forward("/p2.jsp");
    %>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    jsp实现页面跳转

    <%
        pageContext.forward("/跳转页面");
    %>
    
    • 1
    • 2
    • 3

    pageContext的查找方式
    从由低到高(作用域):page–>request–>session–>application。
    优点类似jvm的双亲委派机制

    1.3.3 应用场景

    request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的!

    session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车;

    application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据;

    1.3.4 JSTL表达式

    maven导入包

    <!-- JSTL表达式的依赖 -->
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- standard标签库 -->
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在将jar包导入Tomcat服务器lib包中

    1. JSTL标签库的使用就是为了弥补HTML标签的不足
    2. 它自定义许多标签,可以供我们使用,标签的功能和Java代码一样!
    3. 核心标签 (掌握部分)
    4. XML 标签(了解)
    5. SQL标签(了解)
    6. 格式化标签(了解)
      在这里插入图片描述

    使用步骤

    1. 导包:jstl.jar
    2. 引入对应的:<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
    3. 使用其中的方法
    4. 在Tomcat 也需要引入 jstl的包,否则会报错:JSTL解析错误
      练习if
    <form action="jstl.jsp" method="post">
        <%--    EL表达式获取表单的数据
                ${param.参数名}--%>
        用户:<input type="text" name="username" value="${param.username}">
        <input type="submit" value="登录">
    </form>
    <%--如果提交用户是管理员,就登录成功--%>
    <%--test:比较条件 var:将结果赋值给isAdmin--%>
    <c:if test="${param.username=='admin'}" var="isAdmin">
        <c:out value="管理员欢迎你"/>
    </c:if>
    <c:out value="${param.username}"/><br/>
    <c:out value="${isAdmin}"/>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    练习c:choose c:when

    <%--定义一个变量--%>
    <c:set var="scoer" value="55"/>
    <c:choose>
        <c:when test="${scoer >= 90}" >
            你的成绩为优秀
        </c:when>
        <c:when test="${scoer >= 80}">
            你的成绩为良好
        </c:when>
        <c:when test="${scoer >= 70}">
            你的成绩为一般
        </c:when>
        <c:when test="${scoer >= 60}">
            你的成绩为及格
        </c:when>
        <c:when test="${scoer <60}">
            你的成绩为不及格
        </c:when>
    </c:choose>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    练习c:forEach

    <%
    	//	准备数据
        ArrayList<String> people = new ArrayList<>();
        people.add("张三");
        people.add("李四");
        people.add("王五");
        people.add("赵六");
        people.add("田七");
        request.setAttribute("list",people);
    %>
    <%--
    var:每次遍历出来的变量
    items:要遍历的对象
    begin:开始下标
    end:结束下标
    step:步长
    --%>
    <c:forEach var="people" items="${list}" begin="0" end="4" step="1">
        <c:out value="${people}"/><br/>
    </c:forEach>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    1.4 JavaBean

    1.4.1 实体类名称

    • pojo
    • entity
    • domain
    • vo
    • bean

    1.4.2 特定的写法

    1. 必须要有一个无参构造。
    2. 属性必须私有化。
    3. 必须有对应的get/set方法。

    1.4.3 用途

    一般用来和数据库的字段做映射 ORM。
    ORM :对象关系映射

    • 表—>类
    • 字段–>属性
    • 行记录---->对象

    1.4.4 JSP使用JavaBean

    JSP页面也可以使用实体类,只做了解

    <jsp:useBean id="user" class="pers.tianyu.domain.User" scope="page"/>
    <jsp:setProperty name="user" property="age" value="3"/>
    <jsp:setProperty name="user" property="id" value="1"/>
    <jsp:setProperty name="user" property="password" value="123"/>
    <jsp:setProperty name="user" property="sex" value=""/>
    <jsp:setProperty name="user" property="sign" value="-----"/>
    <jsp:setProperty name="user" property="username" value="天宇"/>
    
    姓名:
    <jsp:getProperty name="user" property="username"/>
    id:
    <jsp:getProperty name="user" property="id"/>
    年龄:
    <jsp:getProperty name="user" property="age"/>
    密码:
    <jsp:getProperty name="user" property="password"/>
    性别:
    <jsp:getProperty name="user" property="sex"/>
    地址:
    <jsp:getProperty name="user" property="sign"/>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    【前端面试题】【JavaScript】数组有哪几种循环方式?分别有什么作用?
    golang - 控制协程并发数的3种方法
    芯片学习记录TLP104
    设计模式-05建造者模式(Bulider模式)详解
    opencv c++ 实时对象追踪
    常用的git命令
    shiro的配置详解
    深潜Kotlin协程(十八):冷热数据流
    tsx 文件中的 行删除
    prometheus day06
  • 原文地址:https://blog.csdn.net/zhao854116434/article/details/125464233