JSP使用

Jsp网页的组成

模板数据

静态部分,web容器不作处理,如HTML标签。

元素

  • 脚本元素
  • 指令元素
  • 动作元素

Jsp 脚本元素类型






脚本元素脚本语法
声明 <%! 声明%>
脚本 <% 脚本%>
脚本表达式 <%= 脚本表达式%>

说明:各个脚本类型的普通格式都有其对应的XML兼容格式,其区别在于:对普通格式页面的访问,会以HTML文件的形式显示,而访问对应的XML兼容格式时,会以XML文件的形式显示。

<%!声明%>

声明语句用于声明方法和变量,对应的XML兼容格式为

 <jsp:declaration></jsp:declaration> 
                `&lt;html&gt;
                    &lt;head&gt;&lt;title&gt;HelloWorld&lt;/title&gt;&lt;/head&gt;
                    &lt;body&gt;
                        &lt;%! public long fact(long x){//声明
                                if(x == 0) return 1;
                                else return x * fact(x - 1);
                            }       
                        %&gt;
                        &lt;table border="1"&gt;
                            &lt;tr&gt;&lt;th&gt;x&lt;/th&gt;&lt;th&gt;x!&lt;/th&gt;&lt;/tr&gt;
                            &lt;% for(long i = 0; i &lt; 20; i++){  %&gt;&lt;!--脚本--&gt;
                            &lt;tr&gt;
                                &lt;td&gt;&lt;%=i %&gt;&lt;/td&gt;
                                &lt;td&gt;&lt;%=fact(i) %&gt;&lt;/td&gt;
                            &lt;/tr&gt;
                            &lt;%} %&gt;
                        &lt;/table&gt;
                    &lt;/body&gt;
                &lt;/html&gt;`
`</pre>

// 在声明中定义的变量是翻译成相应Java程序的成员变量, 在脚本中定义的变量是相应Java程序的局部变量。

* * *

* * *

<html>
 <head></head>
 <body>

## <%脚本%>

</body>
 </html>
  1. 普通格式
    `    在<%%>标签里面写入Java代码,访问时以HTML文件的形式呈现。
        '<html>
         <head><title>HelloWorld</title></head>
        <body>
             <%
             String str = "HelloWorld";
             out.println(str);
            %>
        </body>
        </html>'
        说明:脚本翻译成对应java程序的代码放在该java程序的_jspService()方法中,因此,在脚本中声明的变量是局部变量。    `
  2. XML兼容格式

    ` 在<jsp:scriptlet></jsp:scriptlet>标签间写入Java代码,访问时以XML文件的形式呈现。
             示例:
             '<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns="http://www.w3.org/1999/xhtml" version="2.0">                <html>                    <head><title>Simple jspx page </title> </head>                    <body>                    <jsp:scriptlet>                        String str = "hello" ;                        out.println(str) ;                    </jsp:scriptlet>                    </body>                </html>                </jsp:root>'
    `

    ## <%=脚本表达式%>

    `  脚本表达式用来显示动态生成的结果,对应的XML兼容格式为<jsp:expression></jsp:expression>。不能使用分号作为脚本表达式的结束符,脚本表达式可以是常量,也可以是动态计算出来的值。
    
            示例:
            '<html>
            <head><title>HelloWorld</title></head>
            <body>
                <%
                    String str = "Hello World";
                %>
                <%=str %> 
            </body>
        </html>'
        说明:脚本表达式翻译成对应java程序的代码放在该java程序的_jspService()方法中的print()方法中。
    `




    ## JSP页面的注释


    <%–注释内容–%>//jsp注释,注释内容不会翻译为java代码,浏览器和源码中无法看到。

    //HTML注释,会翻译为对应的java代码,在浏览器中注释的内容不会显示,查看源代码看得到注释的内容。
    <%//%>、<%/**/%>//java注释,会翻译为java代码,但是不作为响应的内容,浏览器和源码中无法看到。

    例子

    '&lt;html&gt;
            &lt;head&gt;&lt;title&gt;HelloWorld&lt;/title&gt;&lt;/head&gt;
            &lt;body&gt;
                &lt;% String str = "aaa"; %&gt;
                &lt;%--&lt;%=str %&gt; --%&gt; //jsp注释
                &lt;!--&lt;%=str %&gt; --&gt;
        //HTML注释,无法在浏览器中看到,但可在网页源文件中看到&lt;!--aaa--&gt; 
                &lt;% //String str2 = "bbb"; %&gt; //java注释
            &lt;/body&gt;
        &lt;/html&gt;'






    # JSP指令元素




    JSP指令元素&lt;%@指令类型 属性名=”属性值”%&gt;用于提供整个JSP页面的相关信息,用来设定JSP页面的相关属性。


    ## Page指令

    page指令的功能是设定整个JSP页面的属性和相关功能,用于翻译阶段与web容器的通讯。


    语法:<%@page属性名=”属性值”%>
    对应的xml兼容格式语法为:<jsp:directive.page属性名=”属性值”/>

    ### Page指令的属性






























































    属性名描述默认值
    language脚本语言名称“java”
    info网页信息
    contentTypeMIME类型及字符编码“text/html;charset=ISO-8859-1”
    import类和包none
    buffer缓冲区大小8192k
    autoFlush自动刷新true
    session能否获取session对象true
    isThreadSafe是否线程安全true
    errorPage指定错误页面none
    isErrorPage允许为错误页面false
    extends指定父类


    例子

    '&lt;%@page contentType="text/html; charset=utf-8" info="aa" %&gt;
        &lt;!--翻译成的java代码为response.setContentType(“text/html;charset=utf-8”)--&gt;
        &lt;%@page import="java.util.Date"%&gt;
        &lt;!--翻译成的java代码为import java.util.Date--&gt;
        &lt;%@page import="java.text.SimpleDateFormat"%&gt;
        &lt;html&gt;
            &lt;head&gt;&lt;title&gt;pageTest&lt;/title&gt;&lt;/head&gt;
            &lt;body&gt;
                &lt;% 
                    Date date = new Date(); 
                    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
                 %&gt;
                &lt;h1&gt;当前系统时间:&lt;%=sd.format(date) %&gt;&lt;/h1&gt;   
            &lt;br&gt;&lt;/body&gt;
        &lt;/html&gt;'


    ### include指令(静态包含):

    include指令用于在JSP编译阶段插入一个包含文本或代码的文件,将文件中的文本静态地包含进当前JSP文件中,如:<%@include file=”hello.jsp”%>。静态包含的文本最好不要有HTML标签和body标签,因为被包含的文件的全部内容将被插入到JSP文件中include指令所在的地方,这些标签会同JSP文件中已有的同样的标签发生冲突,静态包含的文件名不能是变量名且不能传递参数。

    ### taglib指令

    taglib指令能让用户在页面中使用自定义的标签。
    语法:<%@taglib uri=”uri” prefix=”tagPrefix”%>
    对应的xml兼容格式语法为:<jsp:directive.taglib uri=”uri” prefix=”tagPrefix”/>

    ## JSP动作元素

    JSP动作利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组件、重定向用户到另外的页面、为java插件生成HTML代码、实现页面与组件的通信。

    ### &lt;jsp:include/&gt;动作(动态包含):

    语法: &lt;jsp:include page="localUrl" flush="true"/&gt;,flush为true表示缓冲区满时,自动刷新页面。

    ### &lt;jsp:forward/&gt;动作(页面转发):

    语法:&lt;jsp:forward page=”url”/&gt;,相当于RequestDispatcher的forward方法, 将请求转发出去。

    ## 动态包含和静态包含的区别

    ☆ 根本区别在于包含的时机,静态包含是在编译期间包含,而动态包含是在运行期间包含。
    ☆ 静态包含的是代码,动态包含的只是响应的内容。
    ☆ 静态包含适用于包含静态页面,动态包含适用于包含动态页面。
    ☆ 静态包含不能传递参数,动态包含可以传递参数。


    ① 、编写includeTest1.jsp如下: &lt;body&gt; &lt;% int i=100; String str="includeTest1.jsp"; %&gt; &lt;%=str %&gt;中i值是:&lt;%=i %&gt;&lt;br&gt; &lt;jsp:include page="includeTest2.jsp"&gt;&lt;/jsp:include&gt; &lt;/body&gt; 再编写includeTest2.jsp如下: &lt;body&gt; &lt;% int i=600; String str="includeTest2.jsp"; %&gt; &lt;%=str %&gt;中i值是:&lt;%=i %&gt; &lt;/body&gt; 启动tomcat,在浏览器中输入http://localhost:8080/myapp/includeTest1.jsp查看结果如下: includeTest1.jsp中i值是:100 includeTest2.jsp中i值是:600 ② 、将includeTest1.jsp改为如下: &lt;body&gt; &lt;% int i=100; String str="includeTest1.jsp"; %&gt; &lt;%=str %&gt;中i值是:&lt;%=i %&gt;&lt;br&gt; &lt;%@ include file="includeTest2.jsp"%&gt; &lt;/body&gt; 将includeTest2.jsp改为如下: &lt;body&gt; &lt;%=str%&gt;中i值是:&lt;%=i %&gt; &lt;/body&gt; 在浏览器中输入:http://localhost:8080/myapp/includeTest1.jsp查看结果如下: includeTest1.jsp中i值是:100 includeTest1.jsp中i值是:100 ③ 、从上例可知,动态包含时,包含和被包含的文件互不影响,只是将被包含文件编译执行后的结果放入了包含的文件中;静态包含相当于将被包含的文件中的文本直接放入了包含的文件中,然后编译执行。



    ## JSP隐式对象

    隐式对象就是不用实例化,可以直接在JSP页面中使用的对象,如下表所示:










































    对象 描述
    request 代表与请求相关的HttpServletRequest对象
    response 代表与响应相关的HttpServletResponse对象
    PageContext 代表封装请求某个JSP页面时请求环境的PageContext对象
    session 代表特定用户请求会话的HttpSession对象
    application 代表web应用程序的ServletContext对象
    out 代表与响应输出流相关的jspWriter对象
    config 代表JSP页面的Servlet相关的ServletConfig对象
    page 等于java中的this变量
    exception JSP页面抛出的Throwable对象,这个对象只能在JSP错误页面中使用


    ### out对象

    out对象是一个输出缓冲流,用来给客户端返回信息,它是javax.servlet.jsp.JspWriter的一个实例。
    out对象常用方法:
    ☆println():向客户端输出各种类型的数据
    ☆newLine():输出一个换行符
    ☆close():关闭输出流
    ☆flush():输出缓冲区里的数据
    ☆clearBuffer():清除缓冲区里的数据,同时把数据输出到客户端
    ☆clear():清除缓冲区里的数据,但不把数据输出到客户端
    ☆getBufferSize():返回缓冲区的大小

    ### pageContext对象:

    pageContext对象可以获取其他隐式对象、可以实现页面的转发和包含、可以用它对四个作用域空间进行数据的存取,它是javax.servlet.jsp.PageContext的实例。
    ① pageContext对象获取其他隐式对象:
    ☆getRequest :获得request隐式对象
    ☆getResponse:获得response隐式对象
    ☆getServletConfig:获得config隐式对象
    ☆getServletContext:获得application隐式对象
    ☆getPage:获得page隐式对象
    ☆getSession:获得session隐式对象
    ②pageContext对象对四个作用域空间进行数据的存取:
    pageContext对象提供了四个常量,用来表示四个作用域:
    ☆PAGE_SCOPE:pageContext作用域,只在当前页面有效
    ☆REQUEST_SCOPE: request作用域,在forward转发的页面有效
    ☆SESSION_SCOPE:session作用域,IE浏览器未关闭就一直有效
    ☆APPLICATION_SCOPE:application作用域,未重启Tomcat就一直有效。
    ③pageContext对象实现页面的转发和包含:
    pageContext.forward(String relativeURL);//实现页面的转发
    pageContext.include(String relativeURL);//实现页面的包含

    例子



    `例1,获取web.xml配置文件中jsp的初始化参数:
    先在tomcat安装目录下的webapps目录中新建/myapp/WEB-INF/路径,并在WEB-INF目录中编写web.xml如下:
    <?xml version=”1.0” encoding=”UTF-8”?>
    <web-app version=”2.5”
    xmlns=”http://java.sun.com/xml/ns/javaee"
    xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
    <servlet-name>param</servlet-name>
    <jsp-file>/get.jsp</jsp-file><!–指定jsp文件,路径相对于当前web项目文件夹–>
    <init-param><!–JSP的初始化参数–>
    <param-name>name</param-name>
    <param-value>zhangsan</param-value>
    </init-param>
    </servlet>
    <servlet-mapping>
    <servlet-name>param</servlet-name>
    <url-pattern>/get.jsp</url-pattern>

    </servlet-mapping>
    </web-app>
    然后在myapp目录中编写get.jsp如下:
    <%@ page language=”java” import=”java.util.*” pageEncoding=”gbk”%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+”://“+request.getServerName()+”:”+request.getServerPort()+path+”/“;
    %>
    <html>
    <head>

    &lt;base href="&lt;%=basePath%&gt;"&gt;
    &lt;!--base标签设置当前页面的根路径,即当前页面的其他路径可以相对base标签设置的路径而设置--&gt;
    &lt;title&gt;My JSP 'forward.jsp' starting page&lt;/title&gt;
    

    <%!
    public void jspInit() {//访问该jsp时执行该方法

    System.out.println("初始化");
    

    }
    public void jspDestroy() {//该jsp对应的Java程序(servlet)销毁时执行

    System.out.println("销毁");
    

    }
    %>
    </head>
    <body>
    <%

    String param = config.getInitParameter("name");
    

    //获取web.xml中jsp的初始化参数

    out.println("param-value  in web.xml is :"+param);
    

    %><br/>

    basePath is  &lt;%=basePath%&gt;
    

    </body>
    </html>
    最后启动tomcat,在浏览器中输入:http://localhost:8080/myapp/get.jsp访问。
    `


    `例2,在request作用域中传递绑定的对象:
    先在tomcat安装目录下的webapps目录中新建myapp目录,然后在myapp目录中编写sendEmp.jsp如下:
    <html>
    <body>
    <%
    request.setAttribute(“emp”,”scott”);
    %>

    &lt;jsp:forward page="getEmp.jsp"&gt;&lt;/jsp:forward&gt;&lt;!--请求转发--&gt;
    

    </body>
    </html>
    继续在myapp目录中编写getEmp.jsp如下:
    <%
    String emp = (String)pageContext.getAttribute(“emp”,PageContext.REQUEST_SCOPE);
    String emp2 = (String)request.getAttribute(“emp”);//这句和上句意思一样
    out.println(emp+” “+emp2);
    %>
    启动tomcat,在浏览器中输入:http://localhost:8080/myapp/sendEmp.jsp访问。

##另外
QQ截图20160415131256

QQ截图20160415131316

QQ截图20160415131546

QQ截图20160415131616

QQ截图20160415131622

QQ截图20160415131628

QQ截图20160415131641

QQ截图20160415131648

QQ截图20160415131655