笔记代码

分割线

JSP

定制错误页面

  • 方法一: 直接在 jsp 页面配置 errorPage

    • errors/index.jsp

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <%--此处定制错误页面指向--%>
      <%@ page errorPage="errors/500.jsp" %>

      <html>
      <head>
      <title>错误页面</title>
      </head>
      <body>
      <%
      int a = 1 / 0;
      %>
      </body>
      </html>

    • errors/500.jsp

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
      <title>500错误</title>
      </head>
      <body>
      <h1>500错误页面.</h1>
      </body>
      </html>

  • 方法二: 在 web.xml 中配置

    • errors/404.jsp

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
      <title>404错误</title>
      </head>
      <body>
      <h1>404错误页面.</h1>
      </body>
      </html>

    • web.xml

      <!DOCTYPE web-app PUBLIC
      "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
      "http://java.sun.com/dtd/web-app_2_3.dtd" >

      <web-app>
      <display-name>Archetype Created Web Application</display-name>
      <error-page>
      <error-code>404</error-code>
      <location>/errors/404.jsp</location>
      </error-page>
      <error-page>
      <error-code>500</error-code>
      <location>/errors/500.jsp</location>
      </error-page>
      </web-app>

合并页面

  • common/header.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <h1>这里是header</h1>


  • common/footer.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <h1>这里是footer</h1>

  • common/index.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
    <title>测试common</title>
    </head>
    <body>
    <!--
    这种会把include的页面内容合并进本页面,最后是展示一个页面
    -->
    <%@ include file="header.jsp" %>
    <h1>网页主体</h1>
    <%@ include file="footer.jsp" %>

    <HR />

    <!--
    jsp:include标签,本质是导入其他文件内容,最后是多个文件合为一个页面展示
    (更灵活,建议用这个)
    上面方法的因为是合并,所以很有可能出现变量重名,干扰的问题
    这个方法不同文件之间互不干扰
    -->
    <jsp:include page="/common/header.jsp" />
    <h1>网页主体</h1>
    <jsp:include page="/common/footer.jsp" />
    </body>
    </html>

内置对象及作用域

  • 内置对象

    PageContext 存东西
    Request 存东西
    Response
    Session 存东西
    Application 【SerlvetContext】 存东西
    config 【SerlvetConfig】
    out
    page ,不用了解
    exception

  • 操作对象 demo/1.jsp

    <!--
    * @?: *********************************************************************
    * @Author: Weidows
    * @Date: 2021-04-07 16:29:42
    * @LastEditors: Weidows
    * @LastEditTime: 2021-04-07 17:29:11
    * @FilePath: \Weidows\JavaWeb\JSP\src\main\webapp\1.jsp
    * @Description:
    * @!: *********************************************************************
    * servlet 2.3默认不支持EL表达式,需要开启.
    -->
    <%@ page isELIgnored="false" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
    <title>index4</title>
    </head>
    <body>
    <%--
    PageContext 存东西
    Request 存东西
    Response
    Session 存东西
    Application 【SerlvetContext】 存东西
    config 【SerlvetConfig】
    out
    page ,不用了解
    exception
    --%>
    <%
    pageContext.setAttribute("name1", "秦疆1号"); // 保存的数据只在一个页面中有效
    request.setAttribute("name2", "秦疆2号"); // 保存的数据只在一次请求中有效,请求转发会携带这个数据
    session.setAttribute("name3", "秦疆3号"); // 保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
    application.setAttribute("name4", "秦疆4号"); // 保存的数据只在服务器中有效,从打开服务器到关闭服务器

    // 作用域从小到大
    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表达式
    ${内容} == <%= 内容 %>
    用EL表达式的话,null值不会显示,而使用JSP表达式会显示null
    --%>
    <h1>取出的内容:</h1>
    <h3>${name1}</h3>
    <h3>${name2}</h3>
    <h3>${name3}</h3>
    <h3>${name4}</h3>
    <HR>
    <h3>${name5}</h3>
    <h3><%=name5%></h3>
    </body>
    </html>
    20210407173249
  • 作用域

    20210407175219

JSP 标签

  • 例子: 使用 JSP 标签转发页面,读取参数并显示出来.

  • src/main/webapp/demo/JSP-label/forward.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
    <title>JSP-label</title>
    </head>
    <body>
    <%-- 转发request携带的参数(注意JSP标签内不能有注释,会报错500) --%>
    <jsp:forward page="forward.jsp">
    <jsp:param name="name" value="kuangshen"/>
    <jsp:param name="age" value="12"/>
    </jsp:forward>
    </body>
    </html>

  • src/main/webapp/demo/JSP-label/forward.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ page isELIgnored="false" %>

    <html>
    <head>
    <title>转发页面</title>
    </head>
    <body>
    <%
    pageContext.setAttribute("name", request.getParameter("name"));
    pageContext.setAttribute("age", request.getParameter("age"));

    %>
    <h3>姓名: ${name}</h3>
    <h3>年龄: ${age}</h3>
    </body>
    </html>

JSTL 表达式

JSTL 标签库的使用就是为了弥补 HTML 标签的不足,功能上与 Java 相似.

  • 分类

    • 格式化标签

    • SQL 标签

    • XML 标签

    • JSTL 函数

    • 核心标签 (掌握部分)

      20210407195349
  • 使用

    • 在 pom.xml 中导入依赖

      <!-- JSTL表达式依赖 -->
      <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
      </dependency>
      <!-- Standard标签库 -->
      <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
      </dependency>
    • 在 JSP 页面还需要引入对应要使用的 taglib,这里只用到 core:

      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

  • if

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib
    prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page
    isELIgnored="false" %>
    <html>
    <head>
    <title>if测试</title>
    </head>
    <body>
    <%--action是代码提交位置--%>
    <form action="if.jsp" method="post">
    <label>
    用户名:
    <input type="text" name="username" />
    </label>
    <input type="submit" value="登录" />
    </form>

    <hr />

    <%--
    EL表达式获取表单中的数据 ${param.参数名}
    判断如果提交的用户名是admin,则登录成功,并把isAdmin置为true
    --%>
    <c:if test="${param.username=='admin'}" var="isAdmin">
    <c:out value="管理员欢迎您!" />
    </c:if>
    </body>
    </html>

  • choose-when


    <%-- Created by IntelliJ IDEA. User: 29845 Date: 2021/4/8 Time: 20:38 To change
    this template use File | Settings | File Templates. --%> <%@ page
    contentType="text/html;charset=UTF-8" language="java" %> <%@ page
    isELIgnored="false" %>
    <html>
    <head>
    <title>choose-when测试</title>
    </head>
    <body>
    <form action="" method="post">
    <label>
    <%--定义一个变量score--%>
    <input type="text" name="score" />
    </label>
    <input type="submit" name="提交" />
    </form>
    <c:choose>
    <c:when test="${param.score>=90}"> 你的成绩为优秀 </c:when>
    <c:when test="${param.score>=80}"> 你的成绩为一般 </c:when>
    <c:when test="${param.score>=70}"> 你的成绩为良好 </c:when>
    <c:when test="${param.score<=60}"> 你的成绩为不及格 </c:when>
    </c:choose>
    </body>
    </html>

  • forEach

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page import="java.util.ArrayList" %><%--
    Created by IntelliJ IDEA.
    User: 29845
    Date: 2021/4/8
    Time: 20:59
    To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ page isELIgnored="false" %>
    <html>
    <head>
    <title>forEach</title>
    </head>
    <body>

    <%
    ArrayList<String> setPeople = new ArrayList<>();
    setPeople.add(0, "张三");
    setPeople.add(1, "李四");
    setPeople.add(2, "王五");
    setPeople.add(3, "赵六");
    setPeople.add(4, "田六");
    request.setAttribute("list", setPeople);
    %>

    <%--
    var , 每一次遍历出来的变量
    items, 要遍历的对象
    可选:
    begin, 哪里开始
    end, 到哪里
    step, 步长
    --%>
    <c:forEach var="getPeople" items="${list}" begin="1" end="3" step="1">
    <c:out value="${getPeople}"/>
    <br/>
    </c:forEach>
    </body>
    </html>

分割线

JavaBean

  • JavaBean(实体类) 有特定的写法:

    • 一个无参构造

    • 属性必须私有化

    • 必须有对应的 get/set 方法;


  • 一般用来和数据库的字段做映射 ORM(对象关系映射)

    • 表—>类

    • 字段–>属性

    • 行记录---->对象


  • 样例 Java 类: src/main/java/pojo/People.java

    package pojo;

    public class People {
    private int id;
    private String name;
    private int age;
    private String address;

    public People() {
    }

    public People(int id, String name, int age, String address) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.address = address;
    }

    public int getId() {
    return id;
    }

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

    public String getName() {
    return name;
    }

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

    public int getAge() {
    return age;
    }

    public void setAge(int age) {
    this.age = age;
    }

    public String getAddress() {
    return address;
    }

    public void setAddress(String address) {
    this.address = address;
    }

    @Override
    public String toString() {
    return "People{" +
    "id=" + id +
    ", name='" + name + '\'' +
    ", age=" + age +
    ", address='" + address + '\'' +
    '}';
    }

    public static void main(String[] args) {
    new People(1, "秦疆1号", 3, "西安");
    new People(2, "秦疆2号", 3, "西安");
    new People(3, "秦疆3号", 3, "西安");
    }
    }

  • 样例 JSP: src/main/webapp/javaBean.jsp

    • 这里只是简单介绍 JavaBean 及其使用,并不推荐用 JSP 标签来操作 JavaBean,还是推荐用 Java 代码操作实体类对象.
    <%-- Created by IntelliJ IDEA. User: 29845 Date: 2021/4/8 Time: 23:32 To change
    this template use File | Settings | File Templates. --%> <%@ page
    contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
    <title>javaBean测试</title>
    </head>
    <body>
    <jsp:useBean id="people" class="pojo.People" scope="page" />
    <jsp:setProperty name="people" property="id" value="1" />
    <jsp:setProperty name="people" property="name" value="狂神说" />
    <jsp:setProperty name="people" property="age" value="3" />
    <jsp:setProperty name="people" property="address" value="西安" />

    id:
    <jsp:getProperty name="people" property="id" />
    name:
    <jsp:getProperty name="people" property="name" />
    age:
    <jsp:getProperty name="people" property="age" />
    address:
    <jsp:getProperty name="people" property="address" />
    </body>
    </html>