当前位置 主页 > 行业资讯 >

    jsp是什么意思,什么是jsp?jsp是什么技术?

    栏目:行业资讯 时间:2021-02-23 13:56

         JSP是什么技术
         JSP【Java Server Page】 JAVA 服务页面。
         它是从 Servlet 技术规范中分离出来的一个分支,目的是把 Servlet 在视图这一层面的东西给独立出来,从而让 Servlet 只专注于控制。
         它本质上是 servlet, 由 WEB CONTAINER 提供的 JSP 引擎来转换,把所有静态的容器转解成打印输出,动态的内容则 java 代码负责处理。这样一来,程序员写 jsp 时,无需写 java 代码,使用标签来代替,静态的内容就是HTML的语法,所以,学习的成本也很低。
         JSP 的文件必须放到 /src/main/webapp 下,文件名必须以 .jsp 结尾,整个文件与 HTML 并无太大区别,但需要插入变量,或者动态输出的地方,使用特殊指令 <% … %>
         我们来编写一个hello.jsp,内容如下:
    <%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
    <html>
    <head>
    <title>Hello JSP</title>
    </head>
    <body>
    <h2>你好,JSP</h2>
    <%
    out.println("Hello JSP!");    //在网页上打印输出"Hello JSP!"语句
     %>
    </body>
    </html>
         开发 JSP,基本上就是 JSP 指令、标签和HTML的综合体。
         静态的部份由 HTML,CSS 负责。
         动态的部份由 JSP 指令、标签负责。
         JSP 的三大指令
         1. page 指令
         语法:
    <%@ page  属性名=属性值  %>
         如:
      <%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
         2. taglib 指令
         用来导入各种各样的标签库,其中最重要的标签库是 JSTL。
         JSTL: Jsp Standard Tag Library   [JSP标准标签库], 主要包含如下标签库:
         核心标签,以 c 为前缀;
         格式化标签,以fmt 为前缀;
         sql 标签, 以  sql 为前缀 【已基本不使用】;
         xml 标签, 以 xml 为前缀【已基本不使用】;
         函数标签, 以fn 为前缀【已基本不使用】
         如:
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
         3. include 指令
         这个指令是用来包含其它的资源进来。
         语法:
    <%@ include  file="被包含的 jsp 路径" %>
         JSP 中一早就存在的代码片断和表达式。
         代码片断,故明思义,就是在 JSP 中写 Java 代码 【不可取,所以现在已经淘汰】。
         语法:
         <%
         java代码
         %>
         表达式的语法:<%= java变量 %> 【不可取,所以现在已经淘汰】。
         在 JSP 中不去写代码片断,那我们该如何去获取 “动态”的数据?
         答案是: 使用标签和 EL 表达式。
         JSP 的原理
         JSP 本身就是 Servlet。
         web 容器在处理 jsp 时,会利用引擎把 jsp 转换成 servlet, 在Tomcat 中,转换出来的 Servlet 存放在 work 目录。
         看一看它的继承层次结构:
    HttpServlet
    HttpJspBase    [ Tomcat 容器提供的一个抽象父类]
    jsp文件名   [文件名_jsp.java,  如: index_jsp.java]
         当我们去访问一个 jsp 资源时,容器会把这个 JSP 进行翻译,翻译成 Servlet 的代码,主要就是执行这个 Servlet 中的 _jspService 方法。
         JSP 九大隐式对象
         在这个方法,定义了9个局部变量,也就是 JSP 的 九大隐式对象,分别如下:
    pageContext =》PageConext
    request => HttpServletRequest
    session => HttpSession
    application => ServletContext 
    out => JspWriter,类似于  PrintWriter
    config => ServletConfig
    response => HttpServletResponse
    page => this,代表当前的页面对象
    exception => Throwable ,代表的是可抛出的对象。
         以上九大 JSP 隐式对象中,pageContext 可以获取所有的其它的对象,而如何获取 pageContext 呢?
         它是容器自动帮助我们创建好的,直接就可以使用。
         如何在 JSP 获取在控制层绑定的对象呢?
         通过 EL 表达式来获取 ;
         语法:
    ${KEY} 
    说明,这个 KEY 就是在控制器绑定的KEY, 默认情况下,EL 表达式的上下文会在四大范围中从小到大
    去依次搜索,找到就直接返回,如果都没有,则返回 NULL。
    如是你想指定搜索范围,则通过如下四个关键字:
    ${pageScope.KEY} => 只在 pageContext中搜索
    ${requestScope.KEY} => 只在 request 中搜索
    ${sessionScope.KEY} => 只在 session中搜索
    ${applicationScope.KEY} => 只在application中搜索
    在 EL 表达式中,也有一些隐式对象,如:
    pageContext 同 JSP 隐式对象
    param 相当于获取请求参数
    paramValues 相当于获取请求参数
    header 相当于获取请求头
    headerValues 相当于获取请求头
    cookie 相当于获取 cookie 的值
         如何取对象的属性值呢?
         EL对于遵守 JAVABEAN 规范方法,直接通过 . 获取属性。
         如:
    ${USER_KEY_REQ}     ==> 取出来的 User 对象
    ${USER_KEY_REQ.username}    ==> 相当于  [取到的是 user 对象的  username 属性值 ((User)request.getAttribute("USER_KEY_REQ")).getUsername();
    ${pageContext.request}         ==>  pageContext.getRequest()
    ${pageContext.request.contextPath}  ==> pageContext.getRequest().getContextPath();
    ${pageContext.session}         ==> pageContext.getSession();
         注:
    ${} 表达式中第一个单词只有两种可能
    ①. KEY 的名字
    ②. EL 的内置对象【不同的内置,理解是不一样的】
    ${param.name} ==> request.getParameter(“name”);
         注:
         EL 表达式中也支持各种运算,如:
    , < , ==, !=, <=, >=
    empty
    not
         JSTL中的核心标签库
         也就是所谓的C标签它是用来处理数据的,比如:迭代、判断、分支。
         注:要导入标签库,利用 <%@ taglib %> 指令。
         首先,来看一下判断:
    <c:if test="判断表达式">
    </c:if>
         迭代标签:
    <c:forEach>
    </c:forEach>
         分支:
    <c:choose>
    <c:when test=""> </c:when>
    <c:otherwise></c:otherwise>
    <c:choose>
         原文链接:https://blog.csdn.net/weixin_49770443/article/details/109337189