JSP

JSp

什么是jsp为什么要学习它?

* jsp 全称Java Server Pages是为了解决动态生成HTML文档的技术
* Servlet程序输出HTML文档比较麻烦
* 访问jsp必须通过浏览器访问Tomcat 服务器再访问jsp页面
* jsp页面是一个类似于HTML的一个页面,直接放在WebContent目录下,和HTML一样
* jsp的默认编码集是iso-8859-1修改jsp的默认编码为UTF-8
* jsp的本质是一个servlet程序
* jsp的html页面内容都被翻译到Servlet中的service方法中直接输出

jsp的语法

1. 头部声明文件的介绍(page 指令介绍)
    *  <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    *  language 属性 值只能是 java。 表示翻译的得到的是 java 语言的
    * contentType 属性 设置响应头 contentType 的内容
    *  pageEncoding 属性 设置当前 jsp 页面的编码
    *   import 属性 给当前 jsp 页面导入需要使用的类包
    *   autoFlush 属性 设置是否自动刷新 out 的缓冲区,默认为 true
    *   buffer 属性 设置 out 的缓冲区大小。默认为 8KB
    *  errorPage 属性 设置当前 jsp 发生错误后,需要跳转到哪个页面去显示错误信息 
    *  isErrorPage 属性 设置当前 jsp 页面是否是错误页面。是的话,就可以使用 exception 异 
    * session 属性 设置当前 jsp 页面是否获取 session 对象,默认为 true
    * extends 属性 给服务器厂商预留的 jsp 默认翻译的 servlet 继承于什么类
2.  jsp 中的三种脚本介绍
    1.  第一种,声明脚本:
        *  声明脚本格式如下:
            *  <%! 
                    java代码
                %>
        * 声明脚本块中,我们可以做4件事
            * 我们可以定义全局变量
            * 定义static静态代码块
            * 定义方法
            * 定义内部类
    2. 第二种,表达式脚本(***重点,使用很多):
        * 表明脚本格式如下:
            <%=表达式 %>
        * 表达式脚本用于向页面输出内容。
        * 表达式脚本 翻译到Servlet程序的service方法中,以out.print()打印输出
        * out 是jsp的一个内置对象,用于生成html的源代码
        * 不要以分号结尾,否则会报错
        * 表达式脚本可以输出任意类型
            1. 输出整型
            2. 输出浮点型
            3. 输出字符串
            4. 输出对象
    3. 代码脚本(****重点使用最多)
        * 代码脚本格式
            * <% java代码 %>
        * 代码脚本里可以书写任意的 java 语句。
        * 代码脚本的内容都会被翻译到 service 方法中。所以 service 方法中可以写的 java 代码,都可以书写到代码脚本中

JSP的注释

1.  //单行Java注释
2.  /*
        多行Java注释
    */
3.  单行注释和多行注释能在翻译后的java源代码中看见
4.  <%-- jsp注释--%>  jsp注释在翻译的时候会直接接被忽略掉
5.  <!-- html注释 --> html 注释会被翻译到java代码中输出到HTML页面中查看

jsp九大内置对象

1. request 对象   请求对象,可以获取请求信息
2. response对象   响应对象, 可以设置响应对象
3. pageContext 对象       当前页面上下文对象,可以在当前上下文保存属性信息
4. session对象    会话对象,可以获取会话信息
5. exception对象   异常对象只有在jsp页面的page指令中设置 isErrorPage="true" 的时候才会存在
6. application对象    ServletContext对象实例,可以获取整个工程的一些信息
7. config对象 ServletConfig对象实例,可以获取Servlet的配置信息
8. out对象 输出流
9. page对象   表示当前Servlet对象实例(无用,用它不如使用this对象)
* 九大内置对象都是可以在代码脚本和表达式脚本中直接使用的对象

jsp四大域对象

常用来保存数据信息

1. pageContext 可以保存数据在同一个jsp页面中使用
2. request 可以保存数据在同一个request对象中使用,经常用于在转发的时候传递数据
3. session 可以保存在一个会话中使用
4. application (ServletContext) 就是ServletCont对象

jsp中out输出流和response.getwriter() 输出流

image.png

jsp的常用标签(重点***)

* 静态包含,动态包含,转发
1. 静态包含--很常用
    *  <%@ include file=""%>
    *  静态包含就是包含的页面内容原封不动的输出到包含的位置

2. 动态包含--很少用
    * <jsp:include page=""></jsp:include>
    * 动态包含会把包含的 jsp 页面单独翻译成 servlet 文件,然后在执行到时候再调用翻译的 servlet 程序。并把计算的结果返回。
    * 动态包含是在执行的时候,才会加载。所以叫动态包含。
3. 页面转发--常用
    * <jsp:forward page=""></jsp:forward>
    * <jsp:forward 转发功能相当于request.getRequestDispatcher("/xxxx.jsp").forward(request, response); 的功能

4. 区别:见下面
5. 在这里需要补充说明一点:我们在工作中,几乎都是使用静态包含。理由很简单。因为 jsp 页面虽然可以写 java 代码,做其他的功能操作。但是由于 jsp 在开发过程中被定位为专门用来展示页面的技术。也就是说。jsp 页面中,基本上只有 html,css,js。还有一些简单的 EL,表达式脚本等输出语句。所以我们都使用静态包含。
静态包含和动态包含区别 静态包含 动态包含
是否生成java文件 不生成 生成
service方法中的区别 把包含的内容原封拷贝到service中 JspRuntimeLibray.include方法
是否可以传递参数 不能
编译次数 1 包含的文件+1
适用范围 适用包含纯静态内容(CSS,HTML,JS),或没有非常耗时操作。或大量 java 代码的 jsp 包含需要传递参数。含有大量 java

Listener 监听器

*  什么是监听器?监听器就是实时监视一些事物状态的程序,我们称为监听器。
    * 就好像朝阳群众?朝阳区只要有哪个明星有什么不好的事,他们都会知道,然后举报。
    * 那么朝阳群众就是监听器,明星就是被监视的事物,举报就是响应的内容。
    * 又或者说是,电动车的报警器。当报警器锁上的时候。我们去碰电动车,电动车就会报警。
    * 报警器,就是监听器,电动车就是被监视的对象。报警就是响应的内容。
* 适用步骤
    1. 第一步: 定义一个类,然后去继承生命周器的监听接口
    2. 第二步: 在web.xml文件中去配置
    3. ServletContextListener 监听器,一定要在 web.xml 文件中配置之后才会生效
    4.  <listener>
        <listener-class>全类名</listener-class>
        </listener>
    5. 声明周期监听的两个方法
        1. public void contextInitialized(ServletContextEvent sce) 是ServletContext 对象的创建回调
        2. public void contextDestroyed(ServletContextEvent sce) 是 ServletContext 对象的销毁回调
* 演示:我们以 ServletContext 的监听器为例演示如下:
    1. 创建一个 ServletContextListenerImpl 类实现 ServletContextListener 接口。
        import javax.servlet.ServletContextEvent;
        import javax.servlet.ServletContextListener;
        public class ServletContextListenerImpl implements ServletContextListener {
        @Override
            public void contextInitialized(ServletContextEvent sce) {
            System.out.println("ServletContext 对象被创建了");
            }
        @Override
            public void contextDestroyed(ServletContextEvent sce) {
            System.out.println("ServletContext 对象被销毁了");
            }
        }
    2. 在 web.xml 文件中的配置如下:
        <listener>
            <listener-class>com.atguigu.listener.RequestListener</listener-class>
        </listener>
    3. 3)这个时候,启动 web 工程和正常停止 web 工程,后台都会打印:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容