Jsp

jsp


JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者全称JavaServer Pages 是一种动态网页技术标准 。

maven导入jar包

 <!-- servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>

    </dependency>
    <!-- jsp-api -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
    </dependency>
    <!-- jstl-api -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency>
	<!-- standard.jar -->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>

1.指令标签

1.1、include

语法

<%@include file="相对路径"%>

实例

include.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/4/1
  Time: 8:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <H1>静态包含</H1>
<%--    也可以为html--%>
    <%@include file="Head.jsp"%>
    <P>--------------------------</P>
    <P>Hello world</P>
</body>
</html>

Head.jsp

<%--<%@include file="相对路径"%>--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2 style="font-family: Arial;color: red;font-size:25px;text-align: center ">red world</h2>
</body>
</html>

1.2Page

[language="java"]

声明脚本语言的种类,默认情况下为 java。

[extends="package.class"]

指定 JSP 页面所生成的 servlet 的超类(superclass )。这个属性一般为开发人员或提供商保留,由他们对页面的运作方式做出根本性的改变(如添加个性化特性)。一般人应该避免使用这个属性,除非引用由服务器提供商专为这种目的提供的类。

[import="{package.clas|package.*},..."]

使用 page 指令的 import 属性指定 JSP 页面转换成的 servlet 应该输入的包。在 JSP 中,包是绝对必需的。原因是,如果没有使用包,系统则认为所引用的类与当前类在同一个包中。默认情况下,servlet 导入一些服务器特有的包,例如:java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.* 在编译时已导入了,不需要再指明。使用示例:<%@ page import="package.class" %><%@ page import="package.class1, ..., package.classN" %><%@ page import="java.uti1., cn.foololdfat." %>

[contenType="TYPE;charset=CHARSET"]

contentType 属性设置 Content-Type 响应报头,标明即将发送到客户程序的文档的 MIME 类型。默认 MIME 类型是 text/html,默认字符集为 ISO-8859-1。简单示例:改变内容类型:<%@ page contentType="text/html" %>;改变字符集:<%@ page pageEncoding="GBK" %>;改变内容类型和字符集:<%@ page contentType="text/html; charset=utf-8" %>

[session="True|False"]

控制页面是否参与 HTTP 会话。默认值为 true,若存在已有会话,则预定义变量 session (类型为HttpSession)应该绑定到现有的会话;否则,创建新的会话并将其绑定到 session。false 值表示不自动创建会话,在 JSP 页面转换成 servlet 时,对变量 session 的访问会导致错误。注意,session="false" 并不禁用会话跟踪,它只是阻止 JSP 页面为那些尚不拥有会话的用户创建新的会话。由于会话是针对用户,不是针对贞面,所以,关闭某个页面的会话跟踪没有任何益处,除非有可能在同一客户会话中访问到的相关页面都关闭会话跟踪。

[buffer="none|8kb|sizekb"]

buffer 的大小被 out 对象用于缓存处理执行后的 JSP 对客户端浏览器的输出。none 是指没有任何缓存,直接输出到客户端浏览器。用户可通过指定 buffer 的大小来指定缓存处理的大小,默认值为 8kb。

[autoFlush="True|False"]

控制当缓冲区充满之后,是应该自动清空输出缓冲区(默认true),还是在缓冲区溢出后抛出一个异常(autoFlush="false")。在 buffer="none" 时,false 值是不合法的。

[isThreadSafe="True|False"]

设置 JSP 文件是否多线程使用。若为 True,那么一个 JSP 能同事处理多个用户的请求,默认值为 True。

[info="text"]

定义一个可以在 servlet 中通过 getServletInfo 方法获取的字符串。在 JSP 被执行时,用来描述当前 JSP 文件的相关信息。

[isErrorPage="True|False"]

是否使用 exception 对象。

1.3自定义错误页面

404.jsp和500.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>这是404页面</h1>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>这是500页面</h1>
</body>
</html>

在web.xml加入

<!--//定义错误页面-->
  <error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
  </error-page>

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

2.基础语法

2.1.out

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    out.println("hello world");
%>
<hr/>
<%
    //write输出字符串,下面的没有结果
    out.write(12);
    int a =123;
%>
<h1><%=a%></h1>
</body>
</html>

2.2.request

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
//    getContextPath()  得到工程名
//    getServletPath()  得到当前页面所在目录下全名称
//    getRequestURL()  得到IE地址栏地址
//    getServletPath()  得到相对地址
    String contextPath = request.getContextPath();
    String servletPath = request.getServletPath();
    String requestURI = request.getRequestURI();
    String servletPath1 = request.getServletPath();
    out.println("工程名"+contextPath);
    out.println("当前页面所在目录下全名称"+servletPath);
    out.println("IE地址栏地址"+requestURI);
    out.println("相对地址"+servletPath1);

%>
</body>
</html>

2.3.response

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
//    sendRedirect重定向
//    RequestDispatcher.forward跳转request
//    setHeader定时跳转
    response.sendRedirect("500.jsp");
    request.getRequestDispatcher("500.jsp").forward(request, response);
    response.setHeader("refresh", "5;URL=500.jsp");
    //  设置服务器端的编码
//  response.setCharacterEncoding(‘utf-8”);
//  通知浏览器服务器发送的数据格式
//    response.setContentType(‘text/html;charset=utf-8”);
//  sp页面通知浏览器展示的编码格式
//    < meta http - equiv = "Content-Type"content = "text/html; charset=utf-8" />;

%>
</body>
</html>

2.4.application

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/4/6
  Time: 23:00
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%@ page import="java.util.*" contentType="text/html;charset=UTF-8"%>
<%! int numbers = 1;%>
<%! public synchronized void SumPeople(){
    numbers=numbers+1;
}%>
<%
    if(session.isNew()){
        SumPeople();
        session.setAttribute("count",String.valueOf(numbers));
    }
    application.setAttribute(session.getId(),Integer.toString(numbers));
    Enumeration e = application.getAttributeNames();
    while(e.hasMoreElements()){
        out.println(e.nextElement().toString()+"<br>");
    }
%>

<html>
你的sessionID为<%=session.getId()%>
你是第<%=(String)session.getAttribute("count")%>个访问本站的人。
</html>
</body>
</html>

3.JSP标签、JSTL标签、EL表达式

<!-- standard.jar -->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
<!-- jstl-api -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency>

EL表达式:

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象

3.1JSP标签

jsptag1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>LOGIN</title>
</head>
<body>
<%-- ${pageContext.request.contextPath }代表web应用的根 --%>
<form action="jsptag2.jsp" method="POST">
    姓名:<input type="text" name="name"/><br>
    年龄:<input type="text" name="age"/><br>
    <input type="submit" value="提交">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>login in this</title>
</head>
<body>
name=<%=request.getParameter("name")%>><br>
age=<%=request.getParameter("age")%><br>
</body>
</html>

3.2JSTL标签

是为了弥补html的不足而设计的标签,提供了许多标签供我们使用,功能和java代码一样

3.21.核心标签

引用核心标签库的语法如下:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
标签 描述
<<c:out>> 用于在JSP中显示数据,就像<%= ... >
<<c:set>> 用于保存数据
<<c:remove>> 用于删除数据
<<c:catch>> 用来处理产生错误的异常状况,并且将错误信息储存起来
<<c:if>> 与我们在一般程序中用的if一样
<<c:choose>> 本身只当做<c:when>和<c:otherwise>的父标签
<<c:when>> <c:choose>的子标签,用来判断条件是否成立
<<c:otherwise>> <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
<<c:import> 检索一个绝对或相对 URL,然后将其内容暴露给页面
<<c:forEach>> 基础迭代标签,接受多种集合类型
<<c:forTokens>> 根据指定的分隔符来分隔内容并迭代输出
<<c:param>> 用来给包含或重定向的页面传递参数
<<c:redirect>> 重定向至一个新的URL.
<<c:url>> 使用可选的查询参数来创造一个URL

3.22.JSTL标签库使用步骤

  1. 引入jar包
  2. 使用其方法
  3. 使用tomcat9

3.23.EL不能使用显示${xxx}

第一种:

需要在jsp之前引用

阻止忽略el表达式,el表达式立即生效

<%@ page isELIgnored="false" %>

servlet是2.3的版本,2.4及以后更新的版本中是不存在这个问题的,因为新版本中的isELIgnored是默认false,而老版本中默认是true.

第二种:

更改web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee     http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
 <display-name>Archetype Created Web Application</display-name>
</web-app>

3.23实例

<c:if>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入jstl核心标签库--%>
<%--<%@ page isELIgnored="false" %>--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="coreif.jsp" method="get">
    EL表达式获取表单的数据
<%--    ${param.参数名}--%>
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="提交">
</form>

<c:if test="${param.username == ‘admin‘}" var="isAdmin">
    <c:out value="管理员欢迎你!"/>
</c:if>
<br>
<c:out value="${isAdmin}"/>
</body>
</html>

<c:when>

<%@ 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>
<form action="corewhern.jsp" method="get">
    请输入分数:<input type="text" name="score"><br>
    <input type="submit" value="提交">
</form>

<%--定义一个变量score为80--%>
<%--<c:set var="score" value="80"></c:set>--%>
<c:choose>
    <c:when test="${param.score>=90}" >
        你的成绩为优秀
    </c:when>
    <c:when test="${param.score>=80}" >
        你的成绩为良好
    </c:when>
    <c:when test="${param.score>=60}" >
        你的成绩为及格
    </c:when>
    <c:when test="${param.score<60}" >
        你的成绩为不及格
    </c:when>
</c:choose>

</body>
</html>

<c:for>

<%@ 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>
<form action="corewhern.jsp" method="get">
    请输入分数:<input type="text" name="score"><br>
    <input type="submit" value="提交">
</form>

<%--定义一个变量score为80--%>
<%--<c:set var="score" value="80"></c:set>--%>
<c:choose>
    <c:when test="${param.score>=90}" >
        你的成绩为优秀
    </c:when>
    <c:when test="${param.score>=80}" >
        你的成绩为良好
    </c:when>
    <c:when test="${param.score>=60}" >
        你的成绩为及格
    </c:when>
    <c:when test="${param.score<60}" >
        你的成绩为不及格
    </c:when>
</c:choose>

</body>
</html>

3.3javaBen

实体类

JavaBean有特定的写法:

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

一般用和数据库的字段做映射:ORM

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

people.java

package com.xiaozhi.pojo;

public class People {
    private int id=0;
    private String name=null;
    private int age=10;
    private String address="无法无天";

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

    @Override
//    重写
    public String toString() {
        return "People{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ", age=" + age +
                ", 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;
    }
}

jspbean.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/4/8
  Time: 23:41
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
hello
<jsp:useBean id="people" class="com.xiaozhi.pojo.People">
    <jsp:setProperty name="people" property="name" value="小智"/>
    <jsp:setProperty name="people" property="id" value="15"/>
    <jsp:setProperty name="people" property="age" value="15"/>
    <jsp:setProperty name="people" property="address" value="山和大海"/>
</jsp:useBean>

id:<jsp:getProperty name="people" property="id"/>
姓名:<jsp:getProperty name="people" property="name"/>
年龄:<jsp:getProperty name="people" property="age"/>
地址:<jsp:getProperty name="people" property="address"/>
</body>
</html>

Jsp

上一篇:全局定义vue组件


下一篇:pipenv学习记录(三)