zoukankan      html  css  js  c++  java
  • jsp是有自己的编译引擎的

    什么是jsp?

    JSPJava Server Pages)是指:

    HTML中嵌入Java脚本代码

    由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码

    然后将生成的整个页面信息返回给客户端

    Jsphtml的区别:jsp动态网页,可以传递数据html:静态网页,获取不到数据

    JSP执行过程

    web容器处理JSP文件请求需要经过3个阶段:

    • 翻译阶段:JSP文件会被Web容器中的JSP引擎转换成Java源码
    • 编译阶段:Java源码会被编译成可执行的字节码
    • 执行阶段:容器接受了客户端的请求后,执行编译成字节码的JSP文件;处理完请求后,容器把生成的页面反馈给客户端进行显示
    • 页面中java的多,就用servlet,如果静态html的多,就用jsp,一般一个项目中jsp和servlet搭配使用

    指令元素之include指令

    include指令用于在JSP页面中静态包含一个文件,该文件可以是JSP页面、HTML网页、文本文件或一段Java代码。使用了include指令的JSP页面在转换时,JSP容器会在其中插入所包含文件的文本或代码。

    语法:<%@ include file="file URL"%>

    file URL写相对于当前JSP页面的URL

    可以将一些共性的内容写入一个单独的文件中,然后通过include指令引用该文件,从而降低代码的冗余问题,也便于修改共性内容。

    例子:想用代码实现访问控制,没登录不允许看到主页,这个功能就可以使用include指令来简化。

    • 创建登录验证文件 checklogin.jsp

    <%@ page import="s2jsp.sg.ch07.User"%>

    <%

    User user = (User) session.getAttribute("LOGINED_USER");

    if (user == null) {

    response.sendRedirect(login.html");

    }

    %>

    • 在后台首页面(index.jsp)中使用include指令引用登录验证文件

    <%@ include file="checklogin.jsp"%>

    指令元素之taglib指令

    taglib指令允许页面使用用户定制的标签。用来引入标签库。

    语法:

    <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>

    其中uri属性用来指定标签库的存放位置,prefix属性用来指定该标签库使用的前缀。

    静态include和动态include的区别

    include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改,否则视为已被修改。由于被包含的文件是在编译时才插入的,因此如果只修改了include文件内容,而没有对JSP修改,得到的结构将不会改变,所以直接执行已经存在的字节码文件,而没有重新编译。因此对不经常变化的内容,用include指令是合适的,如果需要的内容是经常变化的,则需要动作元素<jsp:include>.

    (1)include指令

    include可以在JSP页面转换成Servlet之前,将JSP代码插入其中。它的主要优点是功能强大,所包含的代码可以含有总体上影响主页面的JSP构造,比如属性、方法的定义和文档类型的设定。它的缺点是难于维护只要被包含的页面发生更改,就得更改主页面,这是因为主页面不会自动地查看被包含的页面是否发生更改。

    语法:<%@ include file="sample.jsp" %>

    2.include动作

    jsp:include动作是在主页面被请求时,将次级页面的输出包含进来。尽管被包含的页面的输出中不能含有JSP,但这些页面可以是其他资源所产生的 结果。服务器按照正常的方式对指向被包含资源的URL进行解释,因而这个URL可以是Servlet或JSP页面。服务器以通常的方式运行被包含的页面, 将产生的输出放到主页面中,这种方式与RequestDispatcher类的include方法一致。它的优点是在被包含的页面发生更改时,无须对主页 面做出修改。它的缺点是所包含的是次级页面的输出,而非次级页面的实际代码,所以在被包含的页面中不能使用任何有可能在整体上影响主页面的JSP构造。

    语法: <jsp:include page="sample.jsp" flush="true"> <jsp:param

    name="name" value="value"/> </jsp:include>

    其中参数设置可以没有,如果没有参数设置,则必须采用<jsp:include page="sample.jsp" flush="true"/>形式。

    EL表达式

    EL表达式语法

    EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到RequestSessionApplication范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null

    自动所搜范围如下:

    Page-------------PageScope

    Request---------RequestScope

    Session----------SessionScope

    Application-----ApplicationScope

    指定搜索范围如下标准写法

    ${ PageScope .username}:取出page范围的username的变量

    ${ RequestScope }:取出request范围的username的变量

    ${ SessionScope }:取出session范围的username的变量

    ${ ApplicationScope }:取出application范围的username的变量

    表达式语言

    ${sessionScope.user.name}等同于${sessionScope.user["name"]}

    两种方式比较:

    (1) 当要存取的属性名称中包含一些特殊字符,如 . – 等并非字母或数字的符号,就一定要使用 [ ],例如:

    ${user.My-Name } 上述是不正确的方式,应当改为:${user["My-Name"] }

    (2) 我们来考虑下列情况:

    ${sessionScope.user[data]}。此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};假若data 的值为"name"时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,就可以用上述的方法来做,但 . 无法做到动态取值。

  • 相关阅读:
    [NOI Online 2021 提高组] 愤怒的小 N
    CF1474F 1 2 3 4 ...
    CF1466H Finding satisfactory solutions
    CF1336F Journey
    [PKUSC2021]代金券
    如何科学地设计对拍随机种子
    CF1168E Xor Permutations
    「JOISC 2019 Day2」两种运输
    springboot json参数
    springboot整合webserver应用
  • 原文地址:https://www.cnblogs.com/panxuejun/p/5973917.html
Copyright © 2011-2022 走看看