• JSP个人总结


    应用JSP技术开发动态网站

    JSP基本语法

    默认JSP:

    <%@ page language="java" contentType="text/html; charset=GBK" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Insert title here</title>
    </head>
    <body>
    
    </body>
    </html>

    JSP页面由如下两部分组成:

    ->静态部分:标准的HTML标签、静态的页面内容,这些内容与静态HTML页面相同。

    ->动态部分:受Java程序控制的内容,这些内容由Java程序来动态生成。

    经典JSP:

    <%@ page language="java" contentType="text/html; charset=GBK"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Insert title here</title>
    </head>
    <body>
        <h1>欢迎使用JSP</h1>
        现在时间是:<%
            out.println(new java.util.Date());
        %>
    </body>
    </html>

    注释

    注释是每一个合格程序所必备的,它相当于产品说明书。只有有了它,你的程序才能让其他程序员读懂,同样也可以唤醒自己以前的记忆。
    JSP的注释分为两类,一类为可以在客户端显示的注释,即HTML注释;一类是不能在客户端显示的注释,即JSP注释。两种注释都能起到解释代码的作用,不同是能不能在客户端显示。
    (1)HTML注释使用<!--作为开始,以-->作为结束,中间包含的代码即为注释部分。
    (2)JSP注释使用<%--作为开始,以--%>作为结束,中间包含的代码即为注释部分。

    JSP脚本元素

    JSP脚本元素的作用就是将Java代码插入到与JSP页面对应的Servlet中。JSP脚本元素分为三种形式,分别为JSP声明、JSP表达式、JSP Scriptlets。
    (1)JSP声明,用来将方法或变量定义插入到Servlet类的主定义体中,相当于Java类中的成员变量或者方法。其语法格式为:<%! 声明语句 %>,可以使用private,public等访问控制符修饰,也可使用static修饰。
    (2)JSP表达式,用来将数据或数据操作后的结果转换为字符串,插入到当前Servlet的输入流中,其语法格式为:<%=表达式 %>。
    (3)JSP脚本,用来将Java代码插入到Servlet的_jspService方法中,其语法格式为:<% Java代码 %>。在JSP Scriptlets中可以包含多个语句,如:方法、变量、表达式等,不能用private,public等访问控制符修饰,也不可使用static修饰。

    连接数据库:

    drop database javaee;
    create database javaee;
    use javaee;
    
    create table news_inf
    (
     news_id int primary key auto_increment,
     news_title varchar(255)
    );
    
    insert into news_inf
    values
    (null , 'Java核心技术卷一'),
    (null , 'Java核心技术卷二');
    <%@ page language="java" import="java.sql.*"
        contentType="text/html; charset=GBK"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Insert title here</title>
    </head>
    <body>
        <h1>欢迎使用JSP</h1>
        <%
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/javaee",
                    "root", "123456");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select * from news_inf");
        %>
        <table bgcolor="#9999dd" border="1" width="300">
            <%
                while (rs.next()) {
            %>
            <tr>
                <td><%=rs.getString(1)%></td>
                <td><%=rs.getString(2)%></td>
            </tr>
            <%
                }
            %>
        </table>
    </body>
    </html>

    JSP指令元素

    JSP指令元素指令主要用来提供整个JSP网页相关的信息,并且用来设定JSP页面的相关属性。包括page指令、include指令以及taglib指令三种。
    (1)page指令主要用来设定JSP页面的全局属性,该配置将作用于整个JSP页面,甚至包括静态包含的文件。其语法格式如下。
    <%@ page 属性1="属性值1" 属性2="属性值2"……%>

    page指令的语法格式:

    <%@ page
    [ language="java" ]
    [ extends="package.class" ]
    [ import="{package.class | package.*}, ..." ]
    [ session="true | false" ]
    [ buffer="none | 8kb | sizekb" ]
    [ autoFlush="true | false" ]
    [ isThreadSafe="true | false" ]
    [ info="text" ]
    [ errorPage="relativeURL" ]
    [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=UTF-8" ]
    [ pageEncoding="UTF-8"]
    [ isErrorPage="true | false" ]
    %>

    page指令各属性的意义:

    ->language:定义要使用的脚本语言,该属性的默认值是java,而且目前目前只能是java,所以通常可以无需设置
    ->extends:指定JSP页面编译所产生的的Java类所继承的父类,或所实现的接口。
    ->import:"package.class,package.*"和一般的java import意义一样,用","来隔开,默认导入的包有:java.lang.*、javax.servlet.*、javax.servlet.JSP.*、javax.servlet.http.*。
    ->session:"true|false" 默认为true,指定这个页面是否参与Http的session中,指定这个JSP中是否可以使用session
    ->buffer:"none|8kb|sizekb" 默认为8kb,指定到客户端输出流的缓冲模式,指定输出缓冲区的大小,如果是none则不缓冲,如果指定数值,那么输出就用不小于这个值的缓冲区进行缓冲,单位为kb。
    ->autoFlush:"true|false" 默认为true,true当缓冲区满时,到客户端的输出被刷新,即强制输出缓冲区的内容,false,当缓冲区满时,出现运行异常,表示缓冲溢出
    ->isThreadSafe:"true|false" 默认为true,用来设置JSP文件是否能支持多线程的使用。如为true,那么一个JSP能够同时处理多个用户的请求,反之,一个JSP只能一次处理一个请求。
    ->info:"text" 设置该JSP程序的信息,也可以看做其说明,可以使用getServletInfo()获得
    ->errorPage:"errordeal.jsp" 默认忽略,定义此页面出现异常时调用的页面,即指定错误处理页面
    ->isErrorPage:"true|false" 默认为false,表明当前的页面是否为其它页面的errorPage目标,如果设置为true,则可以使用exception对象。反之,如果设置为false,则不可以使用exception对象
    ->isELIgnored:"true|false" ,指定EL表达式语言是否被忽略,如为true则忽略,反之可以使用EL。
    ->contentType:"text/html;charset=UTF-8",定义response中的内容类型和JSP页面的文件格式和编码字符集,即MIME类型和页面字符集类型,默认的MIME类型是text/html;默认的字符集类型为ISO-8859-1。
    翻译后变成response.setContentType("text/html;charset=UTF-8")。
    ->pageEncoding:"UTF-8",实现功能跟contentType="text/html;charset="UTF-8"一致,但是两者若同时设置,JSP页面的编码格式以pageEncoding为准,response中的内容类型和编码格式以contentType为准。

    (2)include指令用于在JSP文件中插入一个包含文本或者代码的文件。使用include指令包含文件,被包含的文件的执行结果将插入到include指令的位置。只有当被保包含的文件执行完成,该JSP文件才会恢复执行,使用include指令,可以将一个外部文件嵌入到当前的JSP文件中,同时解析这个页面中的JSP语句(如果有的话)。这是个静态的include语句,它会将目标页面的其他编译指令和页面都包含进来,加入到本页面,融合成一个页面,此时可以说明被包含页面不一定需要是一个完整的页面。但动态include则不会将目标页面的其他编译指令包含进来。include既可以包含静态的文本,也可以包含动态的JSP页面。
    <%@ include file="staticIncluded.jsp"%>
    (3)taglib指令用来声明此JSP文件使用了自定义的标签,同时引用所指定的标签库以及设置标签库的前缀。其语法格式如下。
    <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix"%>

    JSP动作指令(7个)

    页面包含操作include

    <jsp:include>动作指令用来动态的包含静态和动态的文件。如果被包含的文件为静态的文件,那么只是单纯的加到JSP页面中,不会进行任何处理;如果被包含的文件为动态的文件,那么会先进行处理,然后将处理的结果加到JSP页面中。<jsp:include>动作指令的语法格式如下。
    <jsp:include page="{包含文件URL地址<%=expression%>}" flush="false|true">

    <jsp:param name="parameterName" value="parameterValue"/></jsp:include>
    <jsp:include>动作指令包含两个属性,page和flush。
    其中page属性用来指定被包含文件的URL地址。flush属性用来指定缓冲区满时,是否进行清空或者用于指定输出缓存是否转移到被导入文件中。如果设置为true,那么缓冲区满时将进行清空或者说是包含在被导入文件中;如果设置为false,那么缓冲区满时不会进行清空或者说是包含在原文件中。flush属性的默认值为false。

    静态导入和动态导入的三点区别:

    1、静态导入是将导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容。

    2、静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令会失去作用,只是插入被导入页面你的body内容。

    3、动态包含还可以增加额外的参数。

    请求转发操作forward

    <jsp:forward>动作指令用来转移用户的请求,使得用户请求的页面从一个页面跳转到另一个页面,既可以转发到静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet。这种跳转为服务器端跳转,所以用户的地址栏不会发生任何的变化,但页面内容却完全变为被forward目标页的内容,且执行forward指令转发请求时,客户端的请求参数不会丢失。<jsp:forward>动作指令的语法格式如下:
    <jsp:forward page="{跳转文件URL地址<%=expression%>}">{<jsp:param...}</jsp:forward>
    <jsp:include>动作指令只包含一个属性即page,page属性用来指定跳转文件的相对地址。

    include和forward:forward拿目标页面替代原有页面,而include则拿目标页面插入原有页面。

    参数传递操作param

    <jsp:param>动作指令用来传递参数,必须与其它支持参数的标签一起使用。一般与<jsp:include>、<jsp:forward>作用联合使用。其语法格式如下。
    <jsp:param name="参数名" value="参数值"/>
    <jsp:param>动作指令包含两个属性,一个是name,用来设定传递参数的名称;一个是value,用来设定传递参数的值。

    jsp:plugin

    用来下载JavaBean或Applet到客户端执行。

    jsp:useBean

    创建一个JavaBean的实例,即在JSP页面中初始化一个JavaBean实例

    实例:

    <jsp:useBean id="name" class="classname" scope="page|request|session|application"/>

    scope属性用来指定JavaBean实例的作用范围,该范围有4个值:

    page:该JavaBean实例仅在该页面中有效。

    request:该JavaBean实例仅在本次请求中有效。

    session:该JavaBean实例仅在本次session内有效。

    application:该JavaBean实例在本应用内一直有效。

    jsp:setProperty

    设置JavaBean实例的属性值

    <jsp:setProperty name="BeanName" proterty="propertyName" value="value"/>

    jsp:getProperty

    输出JavaBean实例的属性值。

    <jsp:getProperty name="BeanName" proterty="propertyName"/>

    JSP主要内置对象(9个)

    request请求对象

    javax.servlet.http.HttpServletRequest的实例,request对象用来封装客户端的一次请求信息,客户端的请求参数都被封装在该对象里,通过它才能了解到客户的需求,如客户端请求参数、请求的来源、表头、cookies等等,然后做出响应。request对象是是HttpServletRequest接口的实例。
    request请求对象可以用来设置和取得request范围变量,所谓request范围,也就是说属性在一次请求范围内有效。如果页面从一个页面跳转到到另一个页面,那么该属性也就失效。这里所指的跳转是指客户端跳转,比如客户单击超链接跳转到其他页面,或者通过浏览器地址栏浏览其他网页。
    如果使用服务器端跳转<jsp:forward>,该属性仍然有效。通过使用request的setAttribute()方法来设置属性,并通过request的getAttribute()方法来取得属性。
    getParameter() 获得参数对应的值,常用的方法有:getParameter(String paramName)、getParameterValues(String paramName)、setAttribute(String attrName,Object attrValue)、getAttribute(String attrName)和setCharacterEncofing(String env)等。

    response响应对象

    javax.servlet.http.HttpServletResponse的实例,代表服务器对客户端的请求。通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。response对象包含了响应客户请求的有关信息,它是HttpServletResponse类的实例。response对象可以用来添加cookies、添加标头、设置页面重定向(常用语重定向)等等。

    session会话对象

    javax.servlet.http.HttpSession的实例,带对象代表依次会话。当客户端浏览器与站点建立连接时,会话开始;当客户端关闭浏览器时,会话结束。session对象用来表示用户的会话状况,一般用于保存用户的各种信息,知道生命周期超时或者被认为释放掉为止。

    application应用服务对象

    javax.servlet.ServletContext的实例,该实例代表JSP所属的Web应用本身,可用于JSP页面,或者在Servlet之间交换信息。application对象用来取得和设置Servlet的相关信息。application对象的生命周期是服务器启动产生直到服务器关闭为止。

    pageContext页面上下文对象

    javax.servlet.jsp.PageContext的实例,pageContext对象代表JSP页面上下文,使用该对象可以访问页面中的共享数据。可以用来设置page范围的属性,同样也可以用来设置其他范围属性,不过需要指定范围参数。所谓page范围,也就是说设置的属性只在当前页面有效。通过使用pageContext的setAttrib ute方法来设置属性,并通过pageContext的getAttribute方法来取得属性。pageContext对象包含的方法以及方法说明如下所示。

    config:

    javax.servlet.ServletConfig的实例。该实例代表该JSP的配置信息。常用的方法有getInitParameter(String paramName)和getInitParameternames()等方法。事实上,JSP页面通常无需配置,也就不存在配置信息。因此,该对象更多地在Servlet中有效。

    exception:

    java.lang.Throwable的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令 page的isErrorPage属性为true时,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。

    out:

    javax.servlet.jsp.JspWriter的实例,该实例代表JSP页面的输出流,用于输出内容,形成HTML页面。

    page:

    代表该页面本身,通常没有太大用处。也就是Servlet中的this,其类型就是生成的Servlet类,能用page的地方就可用this。

    JSTL标签库

    EL表达式

    EL全名为Expression Language,它原来是JSTL1.0为了方便存取数据所定义的语言。到了JSP2.0以后,EL正式纳入成为标准规划之一。只要是支持Servlet2.4/JSP2.0的容器(服务器的另一种说法),都可以在JSP网页中直接使用EL。下面将重点EL中的运算符、与存储有关的内置对象和与输入有关的内置对象。
    (1)EL运算符
    例如:${1 + 1}、${1 == 1}、${true && true}
    (2)与存储有关的内置对象
    包含四个,分别是applicationScope、sessionScope、requestScope以及pageScope。
    (3)与输入有关的内置对象
    包含两个,分别是param和paramValues。

    核心标签库

    在JSP页面中要使用到核心标签库,必须使用<%@ taglib%>指令,指定核心标签库的前缀以及uri,代码如下。
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    其中prefix为“c”,表示标签的前缀为“c”,这时就必须使用<c:XXX>这种格式。uri用来指定核心标签库规范文件地址。

    格式化标签库

    在JSP页面中要使用到格式化标签,必须使用<%@ taglib%>指令,指定格式化标签,代码如下。
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    其中prefix为“fmt”,表示标签的前缀为“fmt”,这时就必须使用<fmt:XXX>这种格式。uri用来指定格式化标签库规范文件地址。

    函数库

    在JSTL1.1中新增了函数标签库,与其他标签库不同的是函数标签库主要是通过EL的Function实现的。函数标签库中的标签大部分都是用来处理字符串(fn:length可以用来取得集合对象大小)。
    如果要在JSP中要使用JSTL函数标签库,必须使用<%@ taglib %>指定标签的uri和前缀perfix。代码如下。
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
    其中prefix为“fn”,表示标签的前缀为“fn”。uri用来指定格式化标签库规范文件地址。函数标签库的标签使用和前面介绍的几个标签库不同,其格式为${fn:标签(参数1,参数2)}
    JSTL函数标签库中包含了一系列对字符串处理的函数,具体标签列表如下所示。

  • 相关阅读:
    C. 1D Sokoban 二分,思维
    E. Almost Fault-Tolerant Database 暴力枚举 + 分类讨论 + 思维 Codeforces Round #704 (Div. 2)
    Tkinter(六):Checkbutton 复选按钮
    LeetCode260. 只出现一次的数字 III
    LeetCode297. 二叉树的序列化与反序列化
    LeetCode300. 最长上升子序列
    LeetCode299. 猜数字游戏
    LeetCode295. 数据流的中位数
    你真的知道嵌入式系统的优先级吗?
    学习4412开发板gdb和gdbserver的调试
  • 原文地址:https://www.cnblogs.com/tufujie/p/5037315.html
Copyright © 2020-2023  润新知