jsp3

简介: jsp3

7.jsp的常用标签

a) jsp 静态包含

演示:

在web下建include下建main.jsp和footer.jsp

main.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/13
  Time: 下午 03:52
  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>
    头部信息 <br>
    主体内容 <br>
<%--
     <%@include file=""%> 就是静态包含
        file属性指定你要包含的jsp页面的路径
        地址中第一个斜杠/表示为 http://ip/port/工程路径/  映射到代码的web目录
        静态包含的特点:
            1.静态包含不会翻译被包含的jsp页面
            2.静态包含其实只是把被包含的jsp页面的代码拷贝到包含的位置执行输出
--%>
    <%@include file="/include/footer.jsp"%>
</body>
</html>

footer.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/13
  Time: 下午 03:53
  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>
    页脚信息 <br>
    改一下
</body>
</html>

b) jsp 动态包含

动态包含的原理:

演示:

main.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/13
  Time: 下午 03:52
  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>
    头部信息 <br>
    主体内容 <br>
<%--
     <%@include file=""%> 就是静态包含
        file属性指定你要包含的jsp页面的路径
        地址中第一个斜杠/表示为 http://ip/port/工程路径/  映射到代码的web目录
        静态包含的特点:
            1.静态包含不会翻译被包含的jsp页面
            2.静态包含其实只是把被包含的jsp页面的代码拷贝到包含的位置执行输出
--%>
<%--    <%@include file="/include/footer.jsp"%>--%>
<%--    <jsp:include page=""></jsp:include>     这是动态包含
        page 属性指定你要包含的jsp页面的路径
        动态包含也可以像静态包含一样,把被包含的内容执行输出到包含位置
        动态包含的特点:
            1.动态包含会把被包含的jsp页面也翻译成java代码
            2.动态包含底层代码使用如下代码去调用被包含的jsp页面执行输出。
                   JspRuntimeLibrary.include(request,response,"/include/footer.jsp",out,false);
            3.动态包含还可以传递参数
--%>
    <jsp:include page="/include/footer.jsp">
        <jsp:param name="username" value="bbj"/>
        <jsp:param name="password" value="root"/>
    </jsp:include>
</body>
</html>

footer.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/13
  Time: 下午 03:53
  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>
    页脚信息
    <br>
    改一下
    改二下
    <br>
    <%=request.getParameter("password")%>
</body>
</html>

c) jsp 标签-转发

示例说明:在scope.jsp中改一改

<%--
    <jsp:forward page=""></jsp:forward> 是请求转发标签,它的功能就是请求转发
            page 属性设置请求转发的路径
--%>
    <jsp:forward page="/scope2.jsp"></jsp:forward>

jsp的练习题

练习一:在jsp页面输出九九乘法表

在web下,新建test下,下新建test1.jsp

test1.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/13
  Time: 下午 04:33
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style type="text/css">
        table{
            width: 650px;
        }
    </style>
</head>
<body>
<%--    练习一:在jsp页面输出九九乘法表   --%>
    <h1 align="center">九九乘法表</h1>
    <table align="center">
    <%
        for (int i=1;i<=9;i++){%>
        <tr>
            <%for (int j = 1; j <=i; j++) {%>
                <td><%=j+"*"+i+"="+(i*j)%></td>
            <% } %>
        </tr>
        <% } %>
    </table>
</body>
</html>

练习二:jsp输出一个表格,里面有10个学生信息

在src/com下,新建包pojo,新建类Student

Student

package com.pojo;
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private String phone;
    public Student() {
    }
    public Student(Integer id, String name, Integer age, String phone) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.phone = phone;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", phone='" + phone + '\'' +
                '}';
    }
}

test2.jsp

<%@ page import="java.util.List" %>
<%@ page import="com.pojo.Student" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/13
  Time: 下午 04:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        table{
            border: 1px black solid;
            width: 600px;
            border-collapse: collapse;
        }
        td,th{
            border: 1px black solid;
        }
    </style>
</head>
<body>
<%--练习二:jsp输出一个表格,里面有10个学生信息--%>
    <%
        List<Student> studentList=new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            int t=i+1;
            studentList.add(new Student(t,"name"+t,18+t,"phone"+t));
        }
    %>
    <table>
        <tr>
            <td>编号</td>
            <td>姓名</td>
            <td>年龄</td>
            <td>电话</td>
            <td>操作</td>
        </tr>
    </table>
    <table>
    <% for (Student student : studentList) { %>
        <tr>
            <td><%=student.getId()%></td>
            <td><%=student.getName()%></td>
            <td><%=student.getAge()%></td>
            <td><%=student.getPhone()%></td>
            <td>删除/修改</td>
        </tr>
    <% } %>
    </table>
</body>
</html>

请求转发的使用说明


在service下新建SearchStudentServlet,并在web.xml下配置

SearchStudentServlet

package com.servlet;
import com.pojo.Student;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class SearchStudentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的参数
        //发SQL语句查询学生的信息
        //使用for循环生成查询到的数据做模拟
        List<Student> studentList=new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            int t=i+1;
            studentList.add(new Student(t,"name"+t,18+t,"phone"+t));
        }
        //保存查询到的结果(学生信息)到request域中
        req.setAttribute("stuList",studentList);
        //请求转发到showStudent.jsp页面
        req.getRequestDispatcher("/test/showStudent.jsp").forward(req,resp);
    }
}

把test2改为

showStudent.jsp

<%@ page import="java.util.List" %>
<%@ page import="com.pojo.Student" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/13
  Time: 下午 04:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        table{
            border: 1px black solid;
            width: 600px;
            border-collapse: collapse;
        }
        td,th{
            border: 1px black solid;
        }
    </style>
</head>
<body>
<%--练习二:jsp输出一个表格,里面有10个学生信息--%>
    <%
        List<Student> studentList= (List<Student>) request.getAttribute("stuList");
    %>
    <table>
        <tr>
            <td>编号</td>
            <td>姓名</td>
            <td>年龄</td>
            <td>电话</td>
            <td>操作</td>
        </tr>
    </table>
    <table>
    <% for (Student student : studentList) { %>
        <tr>
            <td><%=student.getId()%></td>
            <td><%=student.getName()%></td>
            <td><%=student.getAge()%></td>
            <td><%=student.getPhone()%></td>
            <td>删除/修改</td>
        </tr>
    <% } %>
    </table>
</body>
</html>

注意

访问:http://localhost:8080/08_jsp/searchStudentServlet
不能直接访问showStudent.jsp

9、什么是Listener监听器?

1、Listener监听器它是JaaWeb的三大组件之-。JavaWeb的三大组件分别是:Servlet程序、Filter过滤器、Listener监 听器。

2、Listener它是JavaE的规范,就是接口

3、监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。

9.1、 ServletContextlListener监听器

Sectntogtlstener它可以监听Senletcontext对象的创建和销毁。


ServletContext对象在web工程启动的时候创建,在web工程停止的时候销毁。


监听到创建和销毁之后都会分别调用ServletContextListener监听器的方法反馈。


两个方法分别是:

public interface ServletContextListener extends EventListener {
  /**
  * 在ServletContext对象创建之后马上调用,做初始化
  **/
    void contextInitialized(ServletContextEvent var1);
  /**
  * 在ServletContext对象销毁之后调用
  **/
    void contextDestroyed(ServletContextEvent var1);
}

如何使用ServletContextListener 监听器监听ServletContext对象。

使用步骤如下:

1、编写一个类去实现ServletContextListener

2、实现其两个回调方法

3、到web.xml中去配置监听器
演示

在com下新建包listener下,新建MyServletContextListenerImpl

MyServletContextListenerImpl

package com.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletContextListenerImpl implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext对象被创建了");
    }
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext对象被销毁了");
    }
}

web.xml中配置

<!--    配置监听器-->
    <listener>
        <listener-class>com.listener.MyServletContextListenerImpl</listener-class>
    </listener>

重新部署,再停止,输出结果




相关文章
|
JSON 小程序 算法
uniapp小程序封装常用工具函数
类似的工具函数还有很多,这里暂时不一一列举了,上面提到的银行卡校验,还可以使用阿里公开的一个校验接口cardNo=银行卡号码&cardBinCheck=true这个接口会返回对应的银行简称银行卡类型,如果想要显示对应的银行logo的话,可以联系我,由于JSON数据太大,没办法全部放在这里。
432 0
|
监控 Kubernetes 负载均衡
spring boot应用优化,6s内启动,内存减半
taptap-developer是一个spring boot框架驱动的纯Grpc服务,所以,只用了四步,移除了web和spring cloud相关的模块后,启动速度就稳稳的保持在了6s内。除了启动速度提升外,在服务待机状态下,内存锐减了50%左右,从500M左右的内存占用,缩减到了250M不到。
9954 0
spring boot应用优化,6s内启动,内存减半
|
安全 网络安全 数据安全/隐私保护
IP申请SSL证书的条件和方法
IP申请SSL证书的条件和方法 互联网信息安全时代,网站部署SSL证书能实现HTTPS加密。通常SSL证书是颁发给域名的,但很多企事业单位需要IP地址实现HTTPS加密,那么IP能申请SSL证书吗?小编了解到数安时代GDCA能为IP地址颁发SSL证书。
9991 0
|
存储 安全 Linux
在Linux中,如何进行系统镜像管理?
在Linux中,如何进行系统镜像管理?
|
JSON 算法 数据库
用python实现诸葛神数
本文内容旨在使用python实现一个很简单的诸葛神数卜筮的小脚本。当然这个卜筮结果希望大家不必过分当真,明显从步骤和卦签上能感受到,这不是一个严肃正经的占卜,权当练习吧。
306 29
|
存储 前端开发 小程序
大象转身:支付宝资金技术运营提效实践
大象转身:支付宝资金技术运营提效实践
393 4
大象转身:支付宝资金技术运营提效实践
|
安全 关系型数据库 MySQL
DVWA
【7月更文挑战第11天】
324 0
|
Web App开发 JavaScript
使用 SharedWorker 进行跨标签通信
sharedWorker 也是一种 worker,sharedWorker 的创建和 webWorker 的创建一样,使用 new 关键字来进行初始化(不能通过代码片段创建),不同的是可以在浏览器不同标签下(同源,后面的跨页面等均是在同源的前提下)使用同一个js url 创建sharedWorker 会复用同一个实例。
710 0
|
JavaScript
Vue3中怎么设置全局变量
Vue3中怎么设置全局变量
|
Web App开发 缓存 前端开发
关于图片的Base64编码
什么是Base64编码 Base64编码是一种图片处理格式,通过特定的算法将图片编码成一长串字符串,在页面上显示的时候,可以用该字符串来代替图片的url属性。 base64编码就是长得像下面这样子的代码: thunder://QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5naWZaWg== 上面代码大家都熟悉吧,迅雷下载链接哦,就是base64编码后的地址,所以以后看到这种:一堆连续字母,最后有1~2个"="的代码就是base64。
3778 0