JSP、HTML页面概述

1.  展示

<%-- 此页面为jsp页面    --%>

<!--        <%-- 注释 --%>           JSP注释,注释内容不会被发送至浏览器甚至不会被编译         -->
<%--        <!-- 注释  -->             HTML注释,通过浏览器查看网页源代码时可以看见注释内容     --%>

<!-- jsp指令
        <%@ page ... %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等。
            pageEncoding :说明jsp内容的编码。
            contentType:设置JSP源文件和响应正文的字符集编码及MIME类型, contentType的charset是指服务器发送给客户端时的内容编码。  --> 
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>

<!-- taglib 导入标签库(实例导入JSTL的核心标签库)  -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!-- 1.<% %>叫做脚本片段,定义局部变量或者调用方法,但不能定义方法。
     2.<%! %>称作声明,声明方法、属性、全局变量。
     3.<%= %>称作jsp表达式,用于将已经声明的变量或者表达式输出到网页上面。   -->
<%
    </* JSP 九大内置对象 
        1. request      请求对象        类型 javax.servlet.ServletRequest     作用域 Request
        2. response     响应对象         类型 javax.servlet.SrvletResponse     作用域 Page
        3. pageContext  页面上下文对象    类型 javax.servlet.jsp.PageContext    作用域 Page
        4. session      会话对象         类型 javax.servlet.http.HttpSession   作用域 Session
        5. application  应用程序对象     类型 javax.servlet.ServletContext     作用域 Application
        6. out          输出对象         类型 javax.servlet.jsp.JspWriter      作用域 Page
        7. config       配置对象        类型 javax.servlet.ServletConfig      作用域 Page
        8. page         页面对象         类型 javax.lang.Object                作用域 Page
        9. exception    例外对象         类型 javax.lang.Throwable             作用域 Page
    */>
    </*  jsp的4个作用域 pageScope、requestScope、sessionScope、applicationScope的区别:
        1. page指当前页面有效。
        2. request代表变量能在一次请求中生效,一次请求可能包含一个页面,也可能包含多个页面。
                  指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象中。在这个过程中可以使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。
        3. session代表变量能在一次会话中生效,基本上就是能在web项目下都有效,session的使用也跟cookie有很大的关系。一般来说,只要浏览器不关闭,cookie就会一直生效,cookie生效,session的使用就不会受到影响
                  (或者直到用户一直未活动导致会话过期,默认session过期时间为30分钟,或调用HttpSession的invalidate()方法)。存放在HttpSession对象中)。
        4. application代表变量能一个应用下(多个会话),在服务器下的多个项目之间都能够使用。比如baidu、wenku等共享帐号。
                  作用范围最大,在服务器一开始执行服务到服务器关闭为止。可能造成服务器负载过重。
                  存放在ServletContext对象中。它的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。
    */>
    // request.getParameter(name值)来获取表单信息    
    // String path = request.getContextPath();
%>

<!--  <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前。
      <!DOCTYPE> 声明html版本,防止浏览器的怪异模式。 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <!--  <head> 标签用于定义文档的头部,它是所有头部元素的容器。<head> 中的元素可以引用脚本、指示浏览器在哪里找到样式表、提供元信息等等。
          文档的头部描述了文档的各种属性和信息,包括文档的标题、在 Web 中的位置以及和其他文档的关系等。绝大多数文档头部包含的数据都不会真正作为内容显示给读者。
       *  下面这些标签可用在 head 部分:<base>, <link>, <meta>, <script>, <style>, 以及 <title>。
          <title> 定义文档的标题,它是 head 部分中唯一必需的元素。-->
    <head>
        <!-- <meta>定义了HTML文档中的元数据。
             对于中文网页需要使用 <meta charset="utf-8"> 声明编码,否则会出现乱码。有些浏览器(如 360 浏览器)会设置 GBK 为默认编码,则你需要设置为 <meta charset="gbk">。 -->
        <meta charset="utf-8">
        <title>文档标题</title>
        
        <!-- <link>标签定义文档与外部资源的关系。最常见的用途是链接样式表。  -->
        <link rel="stylesheet" type="text/css" href="theme.css" />
        
        <!-- <script>定义了客户端的脚本文件。<script>中的src 标签属性:规定外部脚本文件的 URL。 -->
        <script src="../static/js/jquery.js"></script>
        
        <!-- <style>定义了HTML文档的样式文件 -->
        <style>    </style>
        
        <!-- <base> 标签为页面上的所有链接规定默认地址或默认目标。(使用指定的基本 URL 来解析所有的相对 URL)
             通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白。
             使用 <base> 标签可以改变这一点。浏览器随后将不再使用当前文档的 URL,而使用指定的基本 URL 来解析所有的相对 URL。这其中包括 <a>、<img>、<link>、<form> 标签中的 URL。-->
    </head>
    
    <!-- body 元素定义文档的主体。
         body 元素包含文档的所有内容(比如文本、超链接、图像、表格和列表等等。) -->
    <body>
        
    </body>
    
    <script type="text/javascript">
        // jQuery 强制刷新
        $("#id").attr('src',"../static/test.png");
    </script>
</html>

2.  HTML标签

  标签及属性:详见W3C参考APIhttp://www.w3school.com.cn/tags/index.asp

3.  JSP

  JSP九大内置对象

      JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception

    1、request对象

    request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

    2、response对象

    response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。

    3、session对象

    session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

    4、application对象

     application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

    5、out 对象

    out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

    6、pageContext 对象

    pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

    7、config 对象

    config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

    8、page 对象

    page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

    9、exception 对象

    exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

  JSP内置对象解析

    https://www.cnblogs.com/GKinght/p/3811172.html

  JSP四个作用域

    page:用户请求的当前页面;

    Request:用户请求访问的当前组件,以及和当前web组件共享同一用户请求的web组件。如:被请求的jsp页面和该页面用<include>指令包含的页面以及<forward>标记包含的其它jsp页面;

    Session:同一个http会话中的web组件共享它;
    Application:整个web应用的所用web组件共享它。

  request对象

    Request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。

    request对象的五个集合

    request对象有五个集合,下面予以介绍:

      QueryString:用以获取客户端附在url地址后的查询字符串中的信息。

      例如:stra=Request.QueryString [“strUserld”]。

      Form:用以获取客户端在FORM表单中所输入的信息。(表单的method属性值需要为POST)

      例如:stra=Request.Form[“strUserld”]。

      Cookies:用以获取客户端的Cookie信息。

      例如:stra=Request.Cookies[“strUserld”]。

      ServerVariables:用以获取客户端发出的HTTP请求信息中的头信息及服务器端环境变量信息。

      例如:stra=Request.ServerVariables[“REMOTE_ADDR”],返回客户端IP地址。

      ClientCertificate:用以获取客户端的身份验证信息。

      例如:stra=Request.ClientCertificate[“VALIDFORM”],对于要求安全验证的网站,返回有效起始日期。

    request对象的常用方法

       一、获取客户机环境信息常见方法:

      setAttribute(String name,Object):设置名字为name的request的参数值

      getAttribute(String name):返回由name指定的属性值

      getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

      getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

      getCharacterEncoding():返回请求中的字符编码方式

      getContentLength():返回请求的Body的长度

      getHeader(String name):获得HTTP协议定义的文件头信息

      getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例

      getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例

      getInputStream():返回请求的输入流,用于获得请求中的数据

      getMethod():获得客户端向服务器端传送数据的方法

      getParameter(String name):获得客户端传送给服务器端的有name指定的参数值

      getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

      getParameterValues(String name):获得有name指定的参数的所有值

      getProtocol():获取客户端向服务器端传送数据所依据的协议名称

      getQueryString():获得查询字符串

      getRequestURI():获取发出请求字符串的客户端地址

      getRemoteAddr():获取客户端的IP地址

      getRemoteHost():获取客户端的名字

      getSession([Boolean create]):返回和请求相关Session

      getServerName():获取服务器的名字

      getServletPath():获取客户端所请求的脚本文件的路径

      getServerPort():获取服务器的端口号

        二、获得客户机请求头:

      1.getHeader(String name)方法

      2.getHeaders(String name)方法

      3.getHeaderNames()方法

       三、获得客户机请求参数(客户端提交的数据):

      1.getParameter(name)方法

      2.getParameterValues(String name)方法

      3.getParameterNames方法

      4.getParameterMap方法,做框架时大量使用

1.1.1 request对象的使用

HttpUtil.getRequestURL(request)

http://localhost:8080/sky2098/request/requestform.jsp

request.getMethod()

GET

request.getRequestURL(request)

/sky2098/request/requestform.jsp

request.getProtocol()

HTTP/1.1

request.getServletPath()

/request/requestform.jsp

request.getPathInfo()

null

request.getPathTranslated()

null

request.getQueryString()

username=sky2098&password=88888888&Submit=%CC%E1%BD%BB

request.getContentType()

null

request.getContentLength()

-1

request.getServerName()

localhost

request.getServerPort()

8080

request.getRemoteAddr()

127.0.0.1

request.getRemoteHost()

127.0.0.1

request.getAuthType()

null

1.1.2 request.getHeaderNames()

accept

*/*

referer

http://localhost:8080/sky2098/request/index.htm

accept-language

zh-cn

ua-cpu

x86

accept-encoding

gzip, deflate

user-agent

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)

host

localhost:8080

connection

Keep-Alive

cookie

JSESSIONID=81EBF4B4973D85FBCC5C0EE2774D5413

1.1.3 getParameterNames()

password

88888888

Submit

?á??

username

sky2098

 

  JSP生命周期

    http://www.runoob.com/jsp/jsp-life-cycle.html

   JSP 文档

    http://www.runoob.com/jsp/jsp-tutorial.html

4.  JSTL和EL

  JSTL

    JSTL库安装

    /WEB-INF/lib/导入standard.jarjstl.jar 文件和配置web.xml。详见http://www.runoob.com/jsp/jsp-jstl.html

    5类JSTL标签

      1.核心标签   

    核心标签是最常用的 JSTL标签。引用核心标签库的语法如下: 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
标签描述
<c:out> 用于在JSP中显示数据,就像<%= ... >
<c:set> 用于保存数据
<c:remove> 用于删除数据
<c:catch> 用来处理产生错误的异常状况,并且将错误信息储存起来
<c:if> 与我们在一般程序中用的if一样
<c:choose> 本身只当做<c:when>和<c:otherwise>的父标签
<c:when> <c:choose>的子标签,用来判断条件是否成立
<c:otherwise> <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
<c:import> 检索一个绝对或相对 URL,然后将其内容暴露给页面
<c:forEach> 基础迭代标签,接受多种集合类型
<c:forTokens> 根据指定的分隔符来分隔内容并迭代输出
<c:param> 用来给包含或重定向的页面传递参数
<c:redirect> 重定向至一个新的URL.
<c:url> 使用可选的查询参数来创造一个URL
      2.格式化标签

    JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:

<%@ taglib prefix="fmt"  uri="http://java.sun.com/jsp/jstl/fmt" %>
标签描述
<fmt:formatNumber> 使用指定的格式或精度格式化数字
<fmt:parseNumber> 解析一个代表着数字,货币或百分比的字符串
<fmt:formatDate> 使用指定的风格或模式格式化日期和时间
<fmt:parseDate> 解析一个代表着日期或时间的字符串
<fmt:bundle> 绑定资源
<fmt:setLocale> 指定地区
<fmt:setBundle> 绑定资源
<fmt:timeZone> 指定时区
<fmt:setTimeZone> 指定时区
<fmt:message> 显示资源配置文件信息
<fmt:requestEncoding> 设置request的字符编码
      3.SQL 标签

    JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。引用SQL标签库的语法如下:

<%@ taglib prefix="sql"  uri="http://java.sun.com/jsp/jstl/sql" %>
标签描述
<sql:setDataSource> 指定数据源
<sql:query> 运行SQL查询语句
<sql:update> 运行SQL更新语句
<sql:param> 将SQL语句中的参数设为指定值
<sql:dateParam> 将SQL语句中的日期参数设为指定的java.util.Date 对象值
<sql:transaction> 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行
    4.XML 标签

    JSTL XML标签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下:

<%@ taglib prefix="x"  uri="http://java.sun.com/jsp/jstl/xml" %>

在使用xml标签前,你必须将XML 和 XPath 的相关包拷贝至你的<Tomcat 安装目录>\lib下:

标签描述
<x:out> 与<%= ... >,类似,不过只用于XPath表达式
<x:parse> 解析 XML 数据
<x:set> 设置XPath表达式
<x:if> 判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体
<x:forEach> 迭代XML文档中的节点
<x:choose> <x:when>和<x:otherwise>的父标签
<x:when> <x:choose>的子标签,用来进行条件判断
<x:otherwise> <x:choose>的子标签,当<x:when>判断为false时被执行
<x:transform> 将XSL转换应用在XML文档中
<x:param> 与<x:transform>共同使用,用于设置XSL样式表
      5.JSTL 函数

    JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:

<%@ taglib prefix="fn"   uri="http://java.sun.com/jsp/jstl/functions" %>
函数描述
fn:contains() 测试输入的字符串是否包含指定的子串
fn:containsIgnoreCase() 测试输入的字符串是否包含指定的子串,大小写不敏感
fn:endsWith() 测试输入的字符串是否以指定的后缀结尾
fn:escapeXml() 跳过可以作为XML标记的字符
fn:indexOf() 返回指定字符串在输入字符串中出现的位置
fn:join() 将数组中的元素合成一个字符串然后输出
fn:length() 返回字符串长度
fn:replace() 将输入字符串中指定的位置替换为指定的字符串然后返回
fn:split() 将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
fn:startsWith() 测试输入字符串是否以指定的前缀开始
fn:substring() 返回字符串的子集
fn:substringAfter() 返回字符串在指定子串之后的子集
fn:substringBefore() 返回字符串在指定子串之前的子集
fn:toLowerCase() 将字符串中的字符转为小写
fn:toUpperCase() 将字符串中的字符转为大写
fn:trim() 移除首尾的空白符

    EL

    EL表达式查找顺序(都是针对Attrbute()):

  如果使用类似于 ${username} 的时候没有在哪一个范围查找username 那么它会以:

    1. Page
    2. Request
    3. Session
    4. Application

  为顺序来进行查找,加入中途找到了 username 那么就会返回值。如果一路没找到,返回 null。

    EL表达式的隐性对象:

cookie  按名称存储请求附带的cookie的MAP
pageContext  用来访问JSP的隐性对象
pageScope page对象的MAP
requestScope  request对象的MAP
requestScope  request对象的MAP
sessionScope  session对象的MAP
applicationScope  application对象的MAP
param  包含请求参数字符串的MAP
paramValues  包含请求参数字符串数组的MAP
header  包含请求头字符串的MAP
headerValues  包含请求头字符串数组的MAP
属性范围在EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope

    举例说明

  1、< %=request. getParameter(“username”)% > 等价于 ${ param. username }

  2、<%=request.getAttribute(“userlist”) %> 等价于$ { requestScope.userlist }

  3、查找顺序,例:

    ${requestScope.userlist} 1
    ${sessionScope.userlist} 2
    ${applicationScope.userlist} 3
    ${pageScope.userlist} 4
    ${userlist} 含义:执行顺序为4 1 2 3。
    “.”后面的只是一个字符串,并不是真正的内置对象,不能调用对象。

其他参考链接:

  JSP九大内置对象:https://www.cnblogs.com/leirenyuan/p/6016063.htmlhttps://www.cnblogs.com/GKinght/p/3811172.html

  JSP四个作用域:http://www.cnblogs.com/qianbaidu/p/6006459.htmlhttp://www.cnblogs.com/ellisonDon/archive/2012/10/29/2744872.html

  EL:https://baike.baidu.com/item/EL%E8%A1%A8%E8%BE%BE%E5%BC%8F/1190845?fr=aladdinhttps://www.cnblogs.com/adversary/p/5976972.html

  request对象常用方法:http://m.elecfans.com/article/580649.htmlhttps://www.cnblogs.com/timeleader/p/8858179.html

原文地址:https://www.cnblogs.com/day1day1up/p/10729950.html