zoukankan      html  css  js  c++  java
  • Java Web JSP语法:

    1. JSP语法分为三种不同的类型:

    ①编译器指令(DIRECTIVE) 例如: <%@page import="java.io.*"%>

    ②脚本语法(Scripting)

    ③动作语法(Action):

    例如: <jsp:forward>, <jsp:getProperty>, <jsp:include>

    2. 脚本语法:

    脚本语法包括:

    -- "HTML注释" : <!--comments-->

    --"隐藏注释": <%--comments--%>

    --"声明"

    -- "表达式": 后面不能加分号

    -- "脚本段": 后面必须加上分号.

    3. HTML注释:

    JSP语法格式如下:

    <!--comment[<%= expression%>]-->或

    <!--注释[]<%= 表达式%>-->

    这种注释发送到客户端, 但不直接显示, 在源代码中可以看到.

    4. 编译器指令:

    编译器指令包含"包含指令", "页指令"和"taglib指令"

    它们包含在"<%@ %>"卷标里.

    两个主要的指令是page与include.

    page指令的属性: language, pageEncoding, import

    5. JSP声明语法格式如下:

    <%! declaration; [declaration;] …%> 或

    <%! 声明; [声明;] …%>, 当服务器将JSP转换为Servlet时, 会将JSP中的声明转换为成员变量,而将脚本段转换为方法中的局部变量, Servlet是单实例的, 这样成员变量的值就只能有一个,每个用户都会访问到它, 而脚本段的值则是局部变量, 每个用户访问的是偶各有一份, 互不影响.

    例:

    <%! int a = 3%>与

    <% int a = 3%>的区别.

    声明会生成成员JSP对应类的成员变量.

    6. JSP脚本段, 语法格式如下:

    <%code fragment %> 或

    <%代码%>

    转义字符: 双引号 \", 单引号 \', 反斜杠\\, 回车\r, 换行\n, 制表符\t, 退格 \b

    7. 包含指令:

    include指令: 向当前页中插入一个静态文件的内容.

    JSP语法格式如下:

    <%@ include file="relativeURL"%>或

    <%@include file="相对位置"%>

    8. Page指令:

    "Page"指令用于定义JSP文件中的全局属性.

    "<%@page %>"指令作用于整个JSP页面, 同样包括静态的包含文件, 但是"<%@page%>"指令不能作用于动态的包含文件, 比如"<jsp:include>".

    可以在一个页面中用上多个"<%!@ page%>"指令, 但是其中的属性只能用一次, 不过也有例外, 那就是import属性. 因为import属性和Java中的import语句类似(import语句引入的是Java语言中的类), 所以此属性就能用多次.

    无论把"<%@page%>"指令放在JSP的文件的哪个地方, 它的作用范围都是整个JSP页面. 不过, 为了JSP程序的可读性, 以及好的变成习惯, 最好还是把它放在JSP文件的顶部.

    属性:

    1). language = "java"

    声明脚本语言的种类, 目前只能用"java"

    2). import="{package.class | package.*}, …"

    需要导入的Java包的列表, 这些包作用与程序段, 表达式, 以及声明, 下面的包在JSP编译时已经导入了, 所以就不需要再指明了:

    java.lang.*javax.servlet.*

    javax.servlet.jsp.*

    javax.servlet.http.*

    3) errorPage = "relativeURL"

    设置处理异常事件的JSP文件.

    4) isErrorPage = "true | false"

    设置此页是否为出错页, 如果被设置为true, 你就能使用exception对象.

    9. taglib指令

    语法:

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

    用于引入定制标签库.

    属性:

    1) uri="URIToTagLibrary"

    Uniform Resource Identifier(URI)根据标签的前缀对自定义的标签经行唯一的命名. URI可以是以下内容:

    Uniform Resource Locator(URL)

    Uniform Resource Name(URN)

    一个相对或绝对的路径

    可以是标签库的描述文件.

    2) prefix = "tagPrefix"

    表示标签在JSP中的名称.

    在自定义标签之前的前缀, 比如, 在<public:loop>中的public, 如果这里不写public, 那么这就是不合法的, 请不要用jsp, jspx, java, javax, servlet, sun, 和sunw做为你的前缀, 这些已被Sun公司声明保留.

    10. <jsp:forward>

    1)<jsp:forward page={"relativeURL" | "<%expression%>"}/>

    2)<jsp:forward page={"relativeURL"|"<%=expression%>"}>

    <jsp:param name="parameterName" value="{parameterValue | <%=expression%>}"/ >

    [<jsp:param…/>]

    </jsp:forward>

    ("[<jsp:param…/>]"指可以有多个"<jsp.param/>"标记)

    属性:

    1) page="{relativeURL | <%= expression%>}"

    这里是一个表达式或是一个字符串用于说明你将要定要的文件或URL, 这个文件可以是JSP, 或程序段.

    2) <jsp:param name="parameterName" value="{parameterValue | <%=expression%>}"/ >

    向一个动态文件发送一个或多个参数, 这个文件必须是动态文件. 如果想传递过个参数, 可是在一个JSP文件中使用多个"<jsp:param>"; "name"指定参数名,"value"指定参数值.

    <jsp:forward>指令用于转向页面,在该指令后面的所有代码都没有机会执行了, 因为页面的流程已经转向了另外一个页面了.

    Tomcat生成的代码如下:

    if (true) {

    _jspx_page_context.forward("ForwardTo.jsp" + (("ForwardTo.jsp").indexOf('?')>0? '&': '?') + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("username", request.getCharacterEncoding())+ "=" + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("donaldjohn", request.getCharacterEncoding()));

    return;

    }

    11. <jsp:include>

    包含一个静态或动态文件:

    JSP语法格式如下:

    1)<jsp:include page="{relativeURL | <%=expression%>}" flush="true"/>

    2) <jsp:include page="{relativeURL | <%=expression%>}" flush="true">

    <jsp:param name="parameterName" value="{parameterValue | <%=expression%>}"/>

    </jsp:include>

    Java We JSP内置对象比较和分析

    1. JSP内置对象:

    JSP有以下九种内置对象, 包括:

    request, javax.servlet.ServletRequest请求对象

    response, javax.servlet.ServletResponse响应对象

    pageContext, javax.servlet.jsp.PageContext页面上下文对象

    session, javax.servlet.http.HttpSession会话对象

    application, javax.servlet.ServletContext应用程序对象

    out, javax.servlet.jsp.JspWriter输出对象

    config, javax.servlet.ServletConfig配置对象

    page, java.lang.Object页面对象

    exception, java.lang.Throwable异常对象

    request和response:

    2. "request"对象代表的是来自客户端的请求, 例如我们在FORM表单中填写的信息等. 是最常用的对象. 关于它的方法使用较多的是getParameter, getParameterNames和getParameterValues, 通过调用这几个方法来获取请求对象中所包含的参数的值

    getParameter()方法是getParameterValues()方法的特例, 表示请求参数值只有一个, 如果请求参数值由多个, 请使用getParameterValues方法, 在多选框的情况下, 需要使用getParameterValues方法来获取用户所选择的多个复选框的值.

    <input type="checkbox" name = "interest">football

    <input type="checkbox" name = "interest">basketball

    <input type="checkbox" name = "interest">volleyball

    3. "response" 对象代表的是对客户端的响应, 也就是说可以通过"response"对象来组织发送到客户端的数据, 但是由于组织方式比较底层, 所以不建议普通读者使用, 需要向客户端发送文字时直接使用"out" 对象即可. response可以使用在文件下载中.

    4. "pageContext"对象可以成为"页面上下文"对象, 代表的是当前页面运行的一些属性, 常用的方法包括findAttribute, getAttribute, getAttributesScope和getAttributeNamesInScope, 一般情况下"pageContext"对象用到的也不是很多, 只有在项目所面临的情况比较复杂的情况下, 才会利用页面属性来属猪处理. 一般Servlet容器会使用该对象.

    5. session对象:

    代表服务器和客户端所建立的会话, 当需要在不同的JSP页面中保留客户信息的情况下使用, 比如在线购物, 客户轨迹跟踪等.

    为什么要引入session:

    Http是无状态(stateless)的协议

    Web Server对每一个客户端请求都没有历史记忆

    Session用来保存客户端状态信息.

    6. application对象:

    "application"对象负责提供应用程序在服务器中运行时的一些全局信息, 常用的方法有getMimeType和getRealPath等.

    7. out对象代表了向客户端发送数据的对象, 与"response"对象不同, 通过"out"对象发送的内容将是浏览器需要显示的内容, 是文本一级, 可以通过"out"对象直接对客户端写一个由程序动态生成的HTML文件, 常用的方法包括: print, println, clear, clearBuffer, flush, getBufferSize, getRemaining, 这是因为"out" 对象内部包含了一个缓冲区, 所以需要一些对缓冲区进行操作的方法.

    8. config, page, exception:

    "config"对象提供了一些配置信息, 常用的方法有getInitParameter()和getInitParameterNames(),以获得Servlet初始化时的参数.

    "page" 对象代表了正在运行的由JSP文件产生的类对象, 不建议一般读者使用.

    "exception"对象则代表了JSP文件运行时所产生的异常现象, 此对象不能再一般JSP文件中直接使用, 而只能在使用了 "<%@ pageisErrorPage="true"%>"的JSP文件中使用.

    9. request请求对象:

    getAttribute()

    原型: public java.lang.Object getAttribute(java.lang.String name)

    说明: 以对象的形式返回特定名称的属性值, 这个方法允许Servlet引擎给出一个客户请求的特定信息.

    如果说给名称的属性不存在,将返回空值.

    参数: name一个表示属性名的字符串.

    返回值: 一个包含属性值的对象, 当属性不存在时为空.

    10. request的setAttribute与getAttribute方法一般都是成对出现的, 首先通过setAttribute方法设置属性与属性值, 然后通过getAttribute方法根据属性获取到与该属性对应的对象值(获取后一般都需要进行向下类型转换, 将属性转换为真正的对象). setAttribute与getAttribute方法都是在服务器端内部执行的, 客户端不知道服务器是否执行了这两个方法.

    11. request的getParameter()方法的作用是获取到客户端, 通过表达或url请求参数所发送过来的参数值, 是客户端与服务器之间的交互, 服务器端要想获取到客户独拏发送过来的数据, 就需要使用getParameter()方法来获取, 没有与getParameter()方法对应的setParameter()方法.

    12. request对象内数据的存货范围就是request对象的存货范围内, 当客户端向服务器端发送一个请求, 服务器想客户端返回一个响应后, 该请求对象就被小会了; 之后想服务器端发送新的请求时, 服务器会创建新的request对象, 该request对象与之前的request对象没有热河关系, 因此无法获得在之前的request对象中所存放的任何数据.

    13. session对象内数据的存活范围也就是session对象的存活范围(只要浏览器不关闭, session对象就会一直存在, 事实上, 这种说法不正确). 因此在同一个浏览器窗口中,不论想客户端发送多少请求, session对象只有一个.

    14. application(应用对象):存活范围最大的对象, 只要服务器没有关闭,application对象中的数据就会一直存在. 在整个服务器的运行当中, application对象只有一个.

    15. request, session和application这3个对行的范围是逐个增加的, request只在一个请求的范围内; session是在浏览器窗口的范围内, application则是在整个服务器的运行过程中.

    application.getRealPath()很重要.

    本博客内容所有权限保留,若需合作请与博主联系.博主邮箱:donaldjohn@qq.com
  • 相关阅读:
    P3157 [CQOI2011]动态逆序对
    P2468 [SDOI2010]粟粟的书架
    P2564 [SCOI2009]生日礼物
    P2698 [USACO12MAR]花盆Flowerpot
    【2018 Multi-University Training Contest 6】
    【HDOJ6351】Beautiful Now(贪心,搜索)
    【HDOJ6354】Everything Has Changed(计算几何)
    【2018 Multi-University Training Contest 5】
    【HDOJ6319】Ascending Rating(单调队列)
    【Educational Codeforces Round 48】
  • 原文地址:https://www.cnblogs.com/donaldjohn/p/2106514.html
Copyright © 2011-2022 走看看