JSP学习总结

1.什么是jsp,jsp的作用?

        全称为java server pages,java的服务器页面。

        主要作用:代替Servlet程序回传html页面的数据

        原因:Servlet程序回传html页面是一件非常繁琐的事情,开发成本和维护成本极高。

2.jsp的本质是什么?

        本质为一个Servlet程序(通过输出流来输出html页面数据)

3.jsp的三中语法

a)jsp头部的page指令

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  1. language属性:jsp翻译后是什么语言文件
  2. contentType属性:表示jsp返回的数据类型是什么(一般为utf-8)
  3. pageEcoding属性:表示jsp页面本身的字符集(一般为utf-8)
  4. import属性:和Java源码一样,用于导包,导类
  5. autoFlush属性:设置当out输出流缓冲区满了后,是否自动刷新缓冲区,默认为true
  6. buffer属性:设置缓冲区大小(默认为8kb)
  7. errorPage属性:出错后自动跳转的页面,路径一般都是 / 开头
  8. isErrorPage属性:判断当前页面是否是错误页面,默认为false,为true可以获取异常信息
  9. session属性:设置访问当前jsp页面是否会创建HttpSession对象,默认是true
  10. extends属性:设置jsp翻译出来的java类默认继承类

b)jsp的常用脚本

1.声明脚本

        格式:<%! 声明java代码 %>

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

<body>
<%--    1.声明类属性--%>
    <%!
        private Integer id;
        private String name;
        private static HashMap<String,String> map;
    %>
<%--    声明静态代码块--%>
    <%!
        static {
            map = new HashMap<>();
            map.put("key1","value1");
        }
    %>
<%--    声明类方法--%>
    <%!
        public int abc(){
            return 12;
        }
    %>
<%--    声明内部类--%>
    <%!
        public class ABC{
            private int a = 100;
        }
    %>
</body>

2.表达式脚本

        格式: <%=  表达式>

        作用:在jsp页面上输出数据。

        特点:

  1. 表达式脚本都会被翻译到_jspService方法中
  2. 表达式脚本都会被翻译成为 out.print()输出到页面
  3. 因为表达式脚本都会被翻译到_jspService方法中,所以_jspService的对象中都可以使用
  4. 表达式脚本的表达式不能以分号结尾
<%--    1.输出整型--%>
    <%=12%><br>
<%--    2.输出浮点型--%>
    <%=12.12%><br>
<%--    3.输出字符串--%>
    <%="字符串"%><br>
<%--    4.输出对象--%>
    <%=map%>

3.代码脚本

        格式:<% java语句 %>

        作用:可以在jsp页面中,编写我们自己需要的功能(写的是java语句)

<%--    1.if语句--%>
    <%
        int i = 12;
        if(i == 12){
            System.out.println("hahaha");
        }else{
            System.out.println("dididid");
        }
    %>
<%--    2.for循环--%>
    <%
        for(int j=1;j<10;j++){
//            System.out.println(j);
        }
    %>
<%--    3.翻译后java文件中_jspService方法内的代码都可以写--%>
    <%
        String s = request.getParameter("username");
        System.out.println(s);
    %>

        特点:

  1. 代码脚本翻译之后都在_jspService方法中
  2. 代码脚本由于翻译到_jspService()方法中,所以_jspService的对象中都可以使用
  3. 可以由多个代码脚本块组合完成一个完整的java代码
  4. 代码脚本可以和表达式代码一起组合使用,在jsp页面上输出数据
    <table border="1" cellspacing="0">
        <%
            for (int k=1;k<10;k++){
        %>
        <tr>
            <td>第<%=k%>列</td>
        </tr>
        <%
            }
        %>
    </table>

c)jsp三种注释

1.html注释: <!--  html注释 -->  

        html注释会被翻译到java源代码中,在_jspServcie方法中,以out.writer输出到客户端。

2.java注释:<%   //单行java注释, /**/多行java注释   %>

         java注释会被翻译到java源代码中

3.jsp注释:<%-- jsp注释 --%> 

        jsp注释可以注掉jsp页面中的所有代码

4.jsp九大内置对象

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

  1. request   请求对象
  2. reponse   响应对象
  3. pageContext    jsp的上下文对象
  4. session    会话对象
  5. application   ServletContext对象
  6. config  ServletConfig对象
  7. out   输出流对象
  8. page   指向当前jsp的对象
  9. exception 异常对象

5.jsp四大域对象

四个域对象分别是:

PageContext(PageContextIml类)当前jsp页面范围内有效

Request(HttpServletRequest类) 一次请求内有效

Session(HttpSession类)   一个会话范围内有效(打开浏览器访问服务器,直到关闭浏览器)

application(ServletContext类)整个Web工程都有效(只要Web工程不停止,数据都在)

域对象:可以向Map一样存取数据的对象。四个域对象功能一样。不同的是它们对数据的存取范围。

四个域使用优先顺序:

pageContext ==> request ==> session ==> application

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

response中表示响应,常用于设置返回给客户端的内容(输出)

out也是给用户做输出使用的

    <%
        out.write("out输出1<br>"); //将out1写到out缓冲区

        out.flush(); //将out1转出到response缓冲区

        out.write("out输出2<br>");  //将out2写到out缓冲区

        response.getWriter().write("response输出1<br>");
        response.getWriter().write("response输出2<br>"); //将response1、2写到response缓冲区

        //结束时 将out缓冲区的内容接到response区中
    %>

一般使用out输出避免打乱输出顺序

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

        out.print()输出任意数据都没有问题

在jsp页面中可以统一使用out.print()输出

7.jsp常用标签

a)静态包含

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

静态包含的特点:
    1.静态包含不会翻译被包含的jsp页面
    2.静态包含其实是把被包含的jsp页面的代码拷贝到包含的位置输出
<body>
    头部信息<br>
    主题信息<br>

    <%@include file="/include/foot.jsp"%>  
    
    <%--foot.jsp 页面:
        <body>
            尾部信息<br>
        </body>
    --%>

</body>

 b)动态包含

<jsp:include page=""></jsp:include>就是动态包含
page属性指定要包含jsp页面的路径
第一个斜杠 / 表示为http://ip:port/工程路径   映射到代码的web目录
动态包含和静态包含一样就是把被包含的jsp页面的代码拷贝到包含的位置输出

动态包含的特点:
    1.动态包含会把包含的jsp页面也翻译成java代码
    2.动态包含底层代码使用如下代码去调用被包含的jsp页面执行输出
    3.动态包含还可以传递参数

动态包含的底层原理

    <jsp:include page="/include/foot.jsp">
        <jsp:param name="username" value="li"/>
        <jsp:param name="password" value="123"/>
    </jsp:include>
<body>
    尾部信息<br>
    <%=request.getParameter("username")%>
</body>

c)请求转发

<jsp:forword page="/..."></jsp:forword>

8.Listener监听器

        1.Listener监听器是javaweb的三大组件之一,其他两个为Servlet程序,Filter过滤器

        2.Listener是javaEE的规范,就是接口

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

8.1、ServletContextListener 监听器

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

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

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

        两个方法:

public interface ServletContextListener extends EventListener {
    default void contextInitialized(ServletContextEvent sce) {
    }

    default void contextDestroyed(ServletContextEvent sce) {
    }
}

如何使用ServletContextListener监听器监听ServletContext对象

使用步骤:

  1. 编写一个类实现ServletContextListener
  2. 实现两个回调方法
  3. 到web.xml中去配置监听器
public class MyServletListenerImpl implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Servletcontext对象被创建了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext对象被销毁了");
    }
}
    <listener>
        <listener-class>com.Listener.MyServletListenerImpl</listener-class>
    </listener>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值