JSP基本知识
前言
了解Jsp基本知识,Jsp三大脚本、Jsp三种注释、Jsp九大内置对象、Jsp常用标签。
一、JSP
1、Jsp有什么用?
Servlet向浏览器回传HTML数据非常繁琐,开发和维护成本都非常高,所以用JSP(Java Server Pages)来快速整合数据和HTML页面并回传。
2、Jsp本质
Jsp本质是一个Servlet程序,将Jsp编译之后,变成一个Jsp类,继承了HttpJspPage,该类继承了HttpServlet。
所以Jsp算是一个中间件,它将我们写的HTML和Java数据变成字符文件流进行回传。
3、Jsp指令
A.Page指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
A)language,表示将该jsp用什么编程语言翻译,这里当然是翻译成Java写的Servlet。
B)contentType,表示Jsp返回的数据类型是什么以及解码的方式。
C)pageEncoding,表示当前页面的编码格式。
D)import,导Java包和类。
E)autoFlush,设置输出流对象的基本属性,设置是否缓冲区满了就刷新缓存区,默认是true。
F)buffer,设置输出流对象的缓冲区大小,一般设为8kb。
G)errorPage,设置该页面出错时跳到友好的出错页面。
H)isErrorPage,设置该页面是否为有异常,默认false,若设为true,则将其翻译成Servlet时会捕获异常。
I)session,访问当前页面是否创建HttpSession对象,默认true。
J)extends,设置将Jsp翻译成Servlet时默认继承什么类。
4、Jsp三大脚本
A.声明脚本
格式)<%! Java声明代码 %>
作用)为Jsp翻译出来的Java声明出属性、方法、静态块、内部类等。
private boolean status = true;
private Map<Integer, Integer> mark = null;
public static int count;
{
mark = new HashMap<>();
mark.put(1, 1);
}
static {
count = 1;
}
public void test(){
System.out.println("ok");
}
B.表达式脚本
格式)<%=Java变量 %>
作用)可输出整型、浮点型、字符串、对象。
<%= mark.get(1)%>
<%= Double.valueOf("1.0")%>
<%= String.valueOf(mark.get(1))%>
<%= mark%>
对应servlet中的out.print();
C.代码脚本
格式)<% java 语句 %>
作用)相当于在service中写代码
5、Jsp三种注释
1)HTML注释,<!-- -->该注释会被输出到客户端。
2)Java注释,<% //Java注释 %>会被翻译成Java注释。
3)Jsp注释,<%-- --%>jsp里真正的注释。
6、Jsp中9大内置对象
jsp被翻译成servlet之后,会生成9大内置对象。
1)request
2)response
3)pageContext
4)session
5)application
6)config
7)out
8)page
9)exception
A.四大域对象
四个域对象功能一样,像Map一样存取域中数据,但是范围不一样。
pageContext | request | session | application |
---|---|---|---|
当前jsp页面有效 | 一次请求过程中 | 一次客户端与服务端的会话中 | 项目部署后的整个生命周期 |
pageContextImpl | HttpServletRequest | HttpSession | ServletContxt |
B.out和response.getWriter()的区别
我们知道往客户端回传的数据是通过response获取其中一种流,一种字符流和一种字节流。而out流不能回传数据,那么在service结束时就会把out流入out的缓存区数据flush到response获得的流中,然后response获得的流中的缓冲区再把数据回传。
注:jsp底层使用out输出,所以为了不打乱页面,所以一般都用out输出。
7、Jsp常用标签
A.静态包含
需求)当成千上万个jsp都有相同的一块内容,而想维护这一块内容时,就需要修改这成千上万的页面,比如当公司改名时要修改最下面的版权所有。
分析)这个时候就可以把这一块内容做成一个页面,然后其它页面引入它即可,此时只需修改一次源头页面就可以修改所有页面的引入内容。
实现)<%@include file="/footer.html"%>
注:可包含jsp,但是是直接拷贝过来,而不会单独翻译成servlet。
B.动态包含
实现)<jsp:include page="/footer.html"></jsp:include>
注:
1)包含的jsp页面会被翻译成Servlet,此时会把req,resp,out传过去,然后在包含的jsp中处理它自己的内容。
2)可以传递参数<jsp:include page="/index.html"> <jsp:param name="username" value="lls"/> <jsp:param name="passname" value="lls"/> </jsp:include>
C.转发
<jsp:forward page="/index.html">
<jsp:param name="username" value="lls"/>
<jsp:param name="password" value="lls"/>
</jsp:forward>
替代下面的Java代码
<%
request.getRequestDispatcher("/index.html").forward(request, response);
%>
8、九九乘法表
<!-- 九九乘法表 -->
<h1>九九乘法表</h1>
<%
for (int i = 0; i < 9; i++) {
for (int i1 = 0; i1 <= i; i1++) {
%>
<%=(i + 1)%> * <%=(i1 + 1)%> = <%=(i + 1) * (i1 + 1)%>
<%
}
%><br>
<%
}
%>
9、Listener监听器
1)Javaweb三大组件Servlet、Listener、Filter之一。
2)Listener同其它两个组件一样是JavaEE规范,即接口。
3)用于监听某些状态的变化,通过回调函数来对变化进行相应的处理。
1、ServletContextListener
监听ServletContextListener对象的创建和销毁,该对象在工程启动时创建,停止时销毁。
public interface ServletContextListener extends EventListener {
//ServletContextListener对象创建时做一些处理
default void contextInitialized(ServletContextEvent sce) {
}
//ServletContextListener对象销毁时做一些处理
default void contextDestroyed(ServletContextEvent sce) {
}
}
使用步骤入下,
1)实现该接口
2)重写回调函数
3)web.xml中配置监听器
package com.xhu.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ServletContextListenerImlp implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
//做一些初始化处理
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
//做一些收尾工作
}
}
<!-- 配置监听器-->
<listener>
<listener-class>com.xhu.listener.ServletContextListenerImlp</listener-class>
</listener>
总结
1)Jsp三大脚本
2)Jsp三种注释
3)Jsp九大内置对象
4)Jsp常用标签
参考文献
[1] Java Web尚硅谷