Java打怪之路-----JavaWeb之JSP

(一)JSP简介

1.1jsp初步

jsp是服务器页面,其作用主要是代替Servlet程序回传html页面数据。

jsp页面与html页面一样,直接通过输入页面名.jsp来进行访问。

jsp 如何访问:
jsp 页面和 html 页面一样,都是存放在 web 目录下。访问也跟访问 html 页面一样。
比如:
在 web 目录下有如下的文件:
web 目录
a.html 页面 访问地址是 =======>>>>>> http://ip:port/工程路径/a.html

b.jsp 页面 访问地址是 =======>>>>>> http://ip:port/工程路径/b.jsp

1.2jsp页面的本质

jsp本质上是一个servlet程序

当我们第一次访问 jsp 页面的时候。Tomcat 服务器会帮我们把 jsp 页面翻译成为一个 java 源文件。并且对它进行编译成为.class 字节码程序。我们打开 java 源文件不难发现其里面的内容是:
在这里插入图片描述我们跟踪原代码发现,HttpJspBase 类。它直接地继承了 HttpServlet 类。也就是说。jsp 翻译出来的 java 类,它间接了继承了 HttpServlet 类。也就是说,翻译出来的是一个 Servlet 程序
在这里插入图片描述
源码继承HttpJspBase,这个又继承httpServlet。
其把html页面数据回传给客户端用的是writer字符流。

PrintWriter writer = resp.getWriter();
writer.write("response's content!!!");

(二)JSP的三种语法

2.1jsp头部的page指令

2.2 jsp中的脚本

2.2.1声明脚本

<%!声明 java 代码%>
作用:可以给 jsp 翻译出来的 java 类定义属性和方法甚至是静态代码块。内部类等。

2.2.2表达式脚本

<%=表达式%>
作用:在jsp页面上输出数据

表达式脚本的特点:
1、所有的表达式脚本都会被翻译到_jspService() 方法中
2、表达式脚本都会被翻译成为 out.print()输出到页面上
3、由于表达式脚本翻译的内容都在_jspService() 方法中,所以_jspService()方法中的对象都可以直接使用。
4、表达式脚本中的表达式不能以分号结束

2.2.3代码脚本

<%java语句%>
作用:可以在jsp页面中,编写需要的功能。

代码脚本的特点是:
1、代码脚本翻译之后都在_jspService 方法中
2、代码脚本由于翻译到_jspService()方法中,所以在_jspService()方法中的现有对象都可以直接使用。
3、还可以由多个代码脚本块组合完成一个完整的 java 语句。
4、代码脚本还可以和表达式脚本一起组合使用,在 jsp 页面上输出数据

(三)jsp九大内置对象

3.1四大域对象

主要搞清楚在什么情况下,域对象的值会消失(对象的范围是什么)。

四个域对象分别是:
1、pageContext (PageContextImpl 类) 当前 jsp 页面范围内有效
2、request (HttpServletRequest 类)、 一次请求内有效
3、session (HttpSession 类)、 一个会话范围内有效(打开浏览器访问服务器,直到关闭浏览器)
4、application (ServletContext 类) 整个 web 工程范围内都有效(只要 web 工程不停止,数据都在)

域对象是可以像 Map 一样存取数据的对象。四个域对象功能一样。不同的是它们对数据的存取范围。
虽然四个域对象都可以存取数据。在使用上它们是有优先顺序的。
四个域在使用的时候,优先顺序分别是,他们从小到大的范围的顺序。
pageContext ====>>> request ====>>> session ====>>> application

3.2out与response.getWriter

response 中表示响应,我们经常用于设置返回给客户端的内容(输出)
out 也是给用户做输出使用的。

在这里插入图片描述

(四)jsp常用标签

4.1静态包含

使用场景:当一个页面中会有一些重复的内容需要在每个页面中出现,将这个页面封装在一个jsp页面中,使用的时候包含进来就行。

语法:<%@ include file="/include/footer.jsp"%>

<%@ include file=""%> 就是静态包含
file 属性指定你要包含的 jsp 页面的路径
地址中第一个斜杠 / 表示为 http://ip:port/工程路径/ 映射到代码的 web 目录

静态包含的特点:
1、静态包含不会翻译被包含的 jsp 页面。
2、静态包含其实是把被包含的 jsp 页面的代码拷贝到包含的位置执行输出。

4.2动态包含

语法:<jsp:include page=""></jsp:include>

<jsp:include page=""></jsp:include> 这是动态包含
page 属性是指定你要包含的 jsp 页面的路径
动态包含也可以像静态包含一样。把被包含的内容执行输出到包含位置

动态包含的特点:
1、动态包含会把包含的 jsp 页面也翻译成为 java 代码
2、动态包含底层代码使用如下代码去调用被包含的 jsp 页面执行输出。
JspRuntimeLibrary.include(request, response, “/include/footer.jsp”, out, false);
3、动态包含,还可以传递参数

//include.jsp
<jsp:include page="include2.jsp">
    <jsp:param name="key1" value="value1"/>
</jsp:include>
//include2.jsp
<%=request.getParameterValues("key1")%>
//我这输出的为什么是地址呢?

4.3转发

语法:<jsp:forward page="/scope2.jsp"></jsp:forward>

(五)总结

在实际开发中,jsp页面主要是用于向客户端回传数据。(servlet回传数据比较麻烦)。回传的方式是采用转发的方式。在这里插入图片描述

(六)监听器

1、Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监
听器。
2、Listener 它是 JavaEE 的规范,就是接口
3、监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。

猜你喜欢

转载自blog.csdn.net/weixin_44020747/article/details/117442799