JavaWeb(六)jsp

JavaWeb(六)jsp

基本概念

什么是jsp,它有什么作用

jsp的全称是Java server pages。Java的服务器页面jsp的主要作用是代替Servlet程序回传html页面的数据因为Servlet程序回传html页面是一件非常繁琐的事情。开发成本和维护成本都极高

如何创建jsp的页面

选中web_app,new-jsp文件

如何访问

jsp 页面和html 页面一样,都是存放在web 目录下。访问也跟访问html 页面一样。

比如:

在web 目录下有如下的文件:

web 目录

a.html 页面访问地址是:>>>>>> http://ip:port/工程路径/a.html

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

jsp的本质

jsp页面本质上是一个Servlet程序当我们第一次访问jsp页面的时候。Tomcat服务器会帮我们把jspp页面翻译成为一个Java源文件。并且对它进行编译成.class字节码程序。我们跟踪原代码发现,HttpJspBase 类。它直接地继承了HttpServlet 类。也就是说。jsp 翻译出来的java 类,它间接了继承了HttpServlet 类。也就是说,翻译出来的是一个Servlet 程序

jsp的三种语法

jsp头部的page指令

jsp 的page 指令可以修改jsp 页面中一些重要的属性,或者行为。

<%--

Created by IntelliJ IDEA.

User: ningqian

Date: 2021/5/10

Time: 16:56

To change this template use File | Settings | File Templates.

--%>

<%@ page import="java.util.Map" %>

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>

<%@ page errorPage="/error500.jsp"

language="java" %>

<%--errorPage表示错误后自动跳转的路径,这个路径一般以斜杠打头,它表示请求地址为:http://ip:port/工程路径/

映射到代码的web目录--%>

Title

这是html数据

i. language 属性表示jsp 翻译后是什么语言文件。暂时只支持java。

ii. contentType 属性表示jsp 返回的数据类型是什么。也是源码中response.setContentType()参数值

iii. pageEncoding 属性表示当前jsp 页面文件本身的字符集。

iv. import 属性跟java 源代码中一样。用于导包,导类。

两个属性是给out 输出流使用=====

v. autoFlush 属性设置当out 输出流缓冲区满了之后,是否自动刷新冲级区。默认值是true。

vi. buffer 属性设置out 缓冲区的大小。默认是8kb

vii. errorPage 属性设置当jsp 页面运行时出错,自动跳转去的错误页面路径。

viii. isErrorPage 属性设置当前jsp 页面是否是错误信息页面。默认是false。如果是true 可以

获取异常信息。

ix. session 属性设置访问当前jsp 页面,是否会创建HttpSession 对象。默认是true。

x. extends 属性设置jsp 翻译出来的java 类默认继承谁。

jsp的常用脚本

声明脚本(极少使用)

格式

<%! 声明的内容 %>

作用

声明类属性声明静态代码块声明类的方法声明内部类

示例

<%--1.声明类属性--%>

<%!

private Integer id;

private String name;

private static Map map;

%>

<%--2.静态代码块--%>

<%!

static{

map = new HashMap();

map.put("key1","value1");

map.put("key2","value2");

map.put("key3","value3");

}

%>

<%--3. 声明类的方法--%>

<%!

public int sum(){

return 1+1;

}

%>

<%--4. 声明内部类--%>

<%!

public static class A{

private int num;

private String nickname;

}

%>

表达式脚本(经常使用)

格式

<%=表达式%>

作用

在jsp页面上输出数据

示例

<%--1. 输出整形--%>

<%=12%>

<%--2. 输出浮点型--%>

<%=13.14%>

<%--3. 输出字符串--%>

<%="字符串"%>

<%--4. 输出对象--%>

<%=map%>

特点

1、所有的表达式脚本都会被翻译到_jspService() 方法中

2、表达式脚本都会被翻译成为out.print()输出到页面上

3、由于表达式脚本翻译的内容都在_jspService() 方法中,所以_jspService()方法中的对象都可以直接使用。

4、表达式脚本中的表达式不能以分号结束。

代码脚本

格式

<%

java语句

%>

作用

可以在jsp页面中,编写我们自己需要的功能(Java语句)

特点

可以由多个代码脚本块组合完成一个完整的java 语句。代码脚本还可以和表达式脚本一起组合使用,在jsp 页面上输出数据

示例

<%

for(int i=0;i<3;i++){

%>

<%="你还好吗"%>

<%

System.out.println("宁好难受");

}

%>

jsp的九大内置对象

** jsp中的内置对象,是指Tomcat在翻译jsp页面成为Servlet源代码后,内部提供的九大对象,叫内置对象**

request 请求对象response 响应对象pageContext jsp的上下文对象session 会话对象application ServletContext对象config ServletConfig对象out jsp输出流对象page 指向当前jsp的对象exception 异常对象

jsp的四大域对象

域对象是可以像Map一样存取数据的对象,四个域对象功能一样,不同的是他们对数据的存取范围不同

pageContext、request、application、session

pageContext

所属类:PageContextImpl类存取范围:当前jsp页面

request

所属类:HttpServletRequest存取范围:一次请求有效

session

所属类:HttpSession类存取范围:一次会话有效(打开浏览器访问服务器,直到关闭浏览器)

application

所属类:ServletContext类存取范围:整个web工程(只要web工程不停止,数据都在)

示例

创建一个jsp页面,命名为scope.jsp

<%--

Created by IntelliJ IDEA.

User: ningqian

Date: 2021/5/10

Time: 21:18

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

jsp的九大内置对象

scope.jsp页面

<%

/*往四个域中分别保存了数据*/

/*如果pageContext对象没有setAttribute方法,需要到tomcat的安装目录下的lib文件夹下找到jsp-api.jar导入到项目中*/

pageContext.setAttribute("key","pageContext");

request.setAttribute("key","request");

session.setAttribute("key","session");

application.setAttribute("key","application");

%>

pageContext域是否有值:<%=pageContext.getAttribute("key")%>

request域是否有值:<%=request.getAttribute("key")%>

session域是否有值:<%=session.getAttribute("key")%>

application域是否有值:<%=application.getAttribute("key")%>

<%

request.getRequestDispatcher("/scope2.jsp").forward(request,response);

%>

创建第二个jsp页面,命名为scope2.jsp

<%--

Created by IntelliJ IDEA.

User: ningqian

Date: 2021/5/10

Time: 21:18

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

jsp的九大内置对象

scope2.jsp页面

pageContext域是否有值:<%=pageContext.getAttribute("key")%>

request域是否有值:<%=request.getAttribute("key")%>

session域是否有值:<%=session.getAttribute("key")%>

application域是否有值:<%=application.getAttribute("key")%>

测试

(1) 启动服务器,打开浏览器,输入http://localhost:8080/jsp/scope.jsp,查看四个域对象存的属性值

(2)在地址栏输入http://localhost:8080/jsp/scope2.jsp,查看四个域对象存的属性值

(3)关闭浏览器,重新输入http://localhost:8080/jsp/scope2.jsp

(4)重新配置服务器,刷新浏览器,查看四个域对象存的属性值

四大域对象的使用顺序

按照有效范围由小到大使用

pageContext->request->session->application

jsp中的out输出和response.getWriter输出的区别

由于jsp 翻译之后,底层源代码都是使用out 来进行输出,所以一般情况下。我们在jsp 页面中统一使用out 来进行输出。避

免打乱页面输出内容的顺序。

out.write() 输出字符串没有问题

out.print() 输出任意数据都没有问题(都转换成为字符串后调用的write 输出)

jsp常用的标签

静态包含

<%–

<%@ include file=""%> 就是静态包含

file 属性指定你要包含的jsp 页面的路径

地址中第一个斜杠/ 表示为http://ip:port/工程路径/ 映射到代码的web 目录

静态包含的特点:

1、静态包含不会翻译被包含的jsp 页面。

2、静态包含其实是把被包含的jsp 页面的代码拷贝到包含的位置执行输出。

–%>

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

动态包含

示例说明:

<%–

这是动态包含

page 属性是指定你要包含的jsp 页面的路径

动态包含也可以像静态包含一样。把被包含的内容执行输出到包含位置

动态包含的特点:

1、动态包含会把包含的jsp 页面也翻译成为java 代码

2、动态包含底层代码使用如下代码去调用被包含的jsp 页面执行输出。

JspRuntimeLibrary.include(request, response, “/include/footer.jsp”, out, false);

3、动态包含,还可以传递参数

jsp标签转发

<%--

是请求转发标签,它的功能就是请求转发

page 属性设置请求转发的路径

--%>

Listener监听器

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

听器。

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

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

ServletContextListener 监听器

ServletContextListener 它可以监听ServletContext 对象的创建和销毁。

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

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

两个方法分别是:

public interface ServletContextListener extends EventListener {

/**

* 在ServletContext 对象创建之后马上调用,做初始化

*/

public void contextInitialized(ServletContextEvent sce);

/**

* 在ServletContext 对象销毁之后调用

*/

public void contextDestroyed(ServletContextEvent sce);

}

使用ServletContextListener 监听器监听ServletContext 对象

1、编写一个类去实现ServletContextListener

2、实现其两个回调方法

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

监听器实现类:

public class MyServletContextListenerImpl implements ServletContextListener {

@Override

public void contextInitialized(ServletContextEvent sce) {

System.out.println("ServletContext 对象被创建了");

}

@Override

public void contextDestroyed(ServletContextEvent sce) {

System.out.println("ServletContext 对象被销毁了");

}

}

web.xml 中的配置:

com.atguigu.listener.MyServletContextListenerImpl

相关推荐

热血传奇私服快捷键收人技巧,如何一键解决行会招人难题 365手机版游戏中心官网

热血传奇私服快捷键收人技巧,如何一键解决行会招人难题

📅 07-05 👁️ 2012
喜力啤酒延长赞助欧洲冠军联赛至2027年 365bet取款要多久到账

喜力啤酒延长赞助欧洲冠军联赛至2027年

📅 07-24 👁️ 6011
苹果6电池多少毫安(苹果6手机电池待机多久?) 365bet取款要多久到账

苹果6电池多少毫安(苹果6手机电池待机多久?)

📅 07-24 👁️ 4580