Loading

JavaWeb-jsp

简介

JSP:Java Server Page

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet。
JSP最终也会被转换成为一个Java类。

原理

image-20210817155150846

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<% String name = "Bob"; %>
hello, <%=name%>!
</body>
</html>

本质

在访问JSP时,java代码会原封不动的输出,HTML代码会变转化,可以看到本质都是Servlet!

image-20210817160042389

依赖

<dependencies>
  <!-- servlet的依赖 -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
  </dependency>

  <!-- jsp的依赖 -->
  <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
    <scope>provided</scope>
  </dependency>

  <!-- standard标签库 -->
  <dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
  </dependency>

  <!-- jstl表达式依赖 -->
  <dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
  </dependency>

</dependencies>

基础语法

表达式

<%= 变量或表达式%> 将输出展示在客户端

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%= new java.util.Date()%>
  </body>
</html>

image-20210819100522614

脚本片段

<% java代码 %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%
    int sum=0;
    for (int i = 0; i < 100; i++) {
      sum +=i;
    }
    out.println("sum=" + sum);
  %>
  </body>
</html>

image-20210819100645660

脚本再实现

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%= new java.util.Date()%>
  <hr>
  <%
    for (int i = 0; i < 5; i++) {
  %>
  hello world!<%=i%> <br>
  <%
    }
  %>
  </body>
</html>

image-20210819101218481

声明

<%! java代码 %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <% int i = 1/0; %>
</body>
</html>

<%!
    static {
    System.out.println("Loading servlet");
}
	private int globalVar = 0;
	public void fun(){
   		System.out.println("It is a function");
	}
%>

jsp的声明会被JSP生成到Java的类中,其他的被生成到_jspService 方法中

注释

<%-- 注释 --%>

自定义错误页面

规定页面

<%@ page errorPage="xxx.jsp" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page errorPage="/error/500.jsp" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <% int i = 1/0; %>
</body>
</html>

image-20210819110129608

全局

配置web.xml

<error-page>
	<error-code>404</error-code>
	<location>/error/404.jsp</location>
</error-page>

image-20210819111736752

包含页面

<%-- 将两个页面合二为一 会产生影响 --%>
<%@include file = "commmon/header.jsp" %>
<%-- 拼接页面 互不影响 --%>
<jsp:include page = "/common/header.jsp" />

九大对象

  • PageContext JSP的页面容器
  • Request 获取用户的请求信息
  • Response 服务器向客户端的回应信息
  • Session 用来保存每一个用户的信息
  • ServletContext 表示所有用户的共享信息
  • Config 服务器配置信息
  • out 页面输出
  • page 只在一个页面中保存属性
  • exception 错误处理

获取对象

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    //保存的数据仅在一个页面中有效
    pageContext.setAttribute("name1", "test1");
    //保存的数据仅在一次请求中有效,请求转发会携带
    request.setAttribute("name2", "test2");
    //在一次会话中有效,从打开浏览器到关闭浏览器
    session.setAttribute("name3", "test3");
    //保存的数据在服务器中有效,从打开服务器到关闭服务器
    application.setAttribute("name4", "test4");
%>

<%
    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表达式输出--%>
<h2>${name1}</h2>
<h2>${name2}</h2>
<h2>${name3}</h2>
<h2>${name4}</h2>
<h2>${name5}</h2>
</body>
</html>

image-20210820103524433

pageContext.forword("1.jsp") request数据也会转发

标签

jsp标签

jspTag.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <jsp:forward page="/jspTag2.jsp">
        <jsp:param name="name" value="Bob"/>
        <jsp:param name="age" value="18"/>
    </jsp:forward>
</body>
</html>

jspTag2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%=request.getParameter("name")%>
    <%=request.getParameter("age")%>
</body>
</html>

image-20210820110609874

jstl标签

JSTL标签库的使用就是为了弥补HTML标签的不足;它自定义许多标签,可以供我们使用,标签的功能和ava代码一样

  • 核心标签
  • 格式化标签
  • sql标签
  • xml标签

核心标签

image-20210820111006816

使用步骤

  • 引入对应的taglib
  • 使用其中的方法
  • 在tomcat中也需要引入jstl的包
<%@ 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>
<form action="jstl.jsp" method="get">
    <%--el表达式获取表单内容--%>
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="登录">
</form>
<%--判断--%>
<c:if test="${param.username == 'admin'}" var="isAdmin">
    <c:out value="welcome" />
</c:if>
</body>
</html>

image-20210820112637942

JavaBean

实体类

  • 必须要有无参构造
  • 属性必须私有化
  • 必须有有对应的get/set方法

一般用于数据库的字段映射 ORM

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

People.class

package com.th0r.pojo;

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

    public People() {
    }

    public People(int id, String name, String address) {
        this.id = id;
        this.name = name;
        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 String getAddress() {
        return address;
    }

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

javabean.jsp

<%@ page import="com.th0r.pojo.People" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>

<jsp:useBean id="people" class="com.th0r.pojo.People" scope="page" />
<jsp:setProperty name="people" property="id" value="1"/>
<jsp:setProperty name="people" property="name" value="Bob"/>
<jsp:setProperty name="people" property="address" value="Beijing"/>

学号:<jsp:getProperty name="people" property="id"/>
姓名:<jsp:getProperty name="people" property="name"/>
地址:<jsp:getProperty name="people" property="address"/>
</body>
</html>
posted @ 2021-08-20 11:32  Th0r  阅读(62)  评论(0编辑  收藏  举报