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}。因此,如果要动态取值时,就可以用上述的方法来做,但 . 无法做到动态取值。

  • 相关阅读:
    iOS中Zbar二维码扫描的使用
    SOJ 1135. 飞跃原野
    SOJ 1048.Inverso
    SOJ 1219. 新红黑树
    SOJ 1171. The Game of Efil
    SOJ 1180. Pasting Strings
    1215. 脱离地牢
    1317. Sudoku
    SOJ 1119. Factstone Benchmark
    soj 1099. Packing Passengers
  • 原文地址:https://www.cnblogs.com/panxuejun/p/5973917.html
Copyright © 2011-2022 走看看