JSP

    全称:Java Server Pages,动态生成html文档的技术

    jsp的主要作用是代替servlet程序回传HTML页面的数据。因为Servlet程序回传HTML页面数据是一件非常繁琐的事情。开发成本和维护成本都很高。
    注意:html是静态资源,jsp是动态资源,jsp可以动态请求后端资源,比如用el表达式获得数据,但html不行。
    可以通过HttpServletResponse对象回传html标签:

    1. resp.setContentType("text/html;charset=utf-8")
    2. PrintWriter writer = resp.getWriter();
    3. writer.write("<!DOCTYPE html><br>")

    jsp本质是一个servlet程序
    Java学习十五——jsp与el表达式 - 图1

    jsp脚本:
    脚本的本质:就是将代码插入到Servlet的service()方法中

    声明脚本的格式:<%!声明Java代码%>
    内容会放到_jspService()方法之外,被类直接包含,JSP其实就是一个类,一个Servlet类。<%!…%>的作用是在类中添加方法或成员的,所以<%!…%>中的内容不会出现在_jspService()中。

    1. <%! private String name="张三"%>
    2. <%! private String age="23"%>

    表达式脚本的格式:<%=表达式%>
    <%=…%>与out.print()功能是相同的!它们都是向客户端输出,例如:
    <%=s1%>等同于<% out.print(s1); %>
    表达式的本质:在将JSP页面转换成Servlet后,使用out.print()将表达式的值输出

    1. <%=name%>
    2. <%=age%>

    代码脚本的格式:<%Java语句%> 代码脚本中可以写任意Java脚本,JSP中多个<%…%>是相通的,甚至可以将代码分开写在代码脚本中。

    比如这样:

    1. <%
    2. for (int i = 0;i < 100;i++){
    3. %>
    4. <%
    5. System.out.println(i);
    6. }
    7. %>

    jsp中的三种注释:
    html注释:
    java注释:
    <%
    //单行Java注释
    /多行Java注释/
    %>
    jsp注释:<%—jsp注释—%>

    JSP九大内置对象

    一、四大域对象

    1.request
    类型:HttpServletRequest
    作用范围:一次请求之内(转发属于一次请求,重定向不属于)。
    生命周期:在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。

    2.pageContext
    (页面上下文对象)
    类型PageContext
    作用范围:当前jsp界面。
    生命周期:当对JSP的请求时开始,当响应结束时销毁。

    3.session
    (会话对象)
    类型:HttpSession
    作用范围:一次会话之内(浏览器的开启到关闭)
    生命周期:在第一次调用 request.getSession() 方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。如果调用session提供的invalidate(),可以立即销毁session。
    注意:服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,则活化后session还是存在的。否则Session不存在。 如果JavaBean 数据在session钝化时,没有实现Serializable 则当Session活化时,会消失。

    4.application

    类型:ServletContext
    作用范围:整个web工程

    生命周期:当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。

    四个域对象完成的功能相同:保存数据,获取数据,共享数据。但域的作用范围不同。例如request取值范围是一次请求之内。
    从小到大的顺序是:pageContext,request,Session,application

    ps: jsp中,域对象需要写在脚本里。

    二、其余的输出对象和配置对象(只做了解)

    response

    out输出

    servletConfig

    page

    exception

    jsp常用标签:
    静态包含:一个页面包含另一个页面的数据

    格式:

    1. <%--file:包含的页面(相对路径)--%>
    2. <%@include file=" "%>

    静态包含实际上运行后只生成了运行页面的.java文件,被包含页面并没有生成,而是将被包含页面的数据通过流的形式打印到前端。

    动态包含:

    格式(双标签):

    1. <%--page:包含的页面(相对路径)--%>
    2. <jsp:include page="/jsp/test2.jsp"></jsp:include>

    `<br />动态包含会在运行后生成运行界面和被包含页面的.java`文件。

    请求转发:格式:<jsp:forward page="/jsp/test2.jsp"></jsp:forward>

    el表达式

    主要是为了替换jsp中的输出脚本<%=xxx%>

    1、判断集合,对象,数组,属性是否为空:${empty xxx}

    2、获取数据

    从各种类型的web域中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

    1. <%
    2. ArrayList<String> strings = new ArrayList<>();
    3. strings.add("dfas");
    4. %>
    5. ${strings[0]}

    3、执行运算

    利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。

    1. ${50+40}
    2. ${50+40 == 100}

    4、获取web开发常用对象

    EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

    5、调用Java方法

    el表达式允许用户开发自定义el函数,以在JSP页面中通过EL表达式调用Java类的方法。通过el表达式获取类的对象字段时,实际上是通过调用get方法获取的。
    例如获取person.name,实际是通过getName方法获取的。