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>
重新部署,再停止,输出结果