黑马程序员技术交流社区

标题: [石家庄校区]JSP的使用 [打印本页]

作者: 水煮牛蛙    时间: 2018-5-27 16:08
标题: [石家庄校区]JSP的使用
本帖最后由 小石姐姐 于 2018-5-30 15:25 编辑

JSP的使用



1.什么是JSP        :
        Java Server Pages(Java服务器端页面).JSP = Java代码 + HTML的元素 + JSP内置东西
2.SUN公司为什么推出JSP动态网页开发技术:
        * SUN公司推出的Servlet技术进行动态网页开发.发现Servlet自身有不足没有办法与ASP,PHP技术竞争.想在动态网页中输出表单.在Servlet中获得PrintWriter out = response.getWriter();
        * out.println(“<form action=’’ method=’’>”);
        * out.println(“</form>”);
        * SUN又推出了动态的网页开发技术就是JSP.
3.JSP的执行过程:
        * JSP会被翻译成Servlet,编译成class进行执行的.
4.JSP的嵌入Java代码:JSP的脚本元素
        * <%!    %>                  :翻译成类中的成员部分. 定义变量,定义方法,定义类.
                                           Servlet是线程不安全的,尽量少在类中定义成员属性!!
        * <% java代码  %> :翻译成类的service方法内部的内容. 定义变量,定义类,直接写代码块.
        * <%=    %>                  :翻译成service方法内部的out.print();获取变量的值
5.将eclipse中的jsp文件模板中的编码改为utf-8
        window->JSP Files ->Encoding:改为utf-8
6.【JSP的注释】
        * HTML的注释          :<!-- 注释 -->
        * Java代码的注释  :// 单行注释 /*多行注释*/ /** 文档注释 */  (java注释
        * JSP的注释                  :<%-- JSP的注释 --%>  只存在与jsp代码中,翻译成servlet后注释就没有了
***
结论 : 什么样的代码用什么样的代码
7.【JSP的指令】
7.1指令的语法: (3个指令)
        <%@ 指令名称 属性名称=”属性值” 属性名称=”属性值” ...%>
        * JSP中有三个指令:page指令, include指令, taglib指令.


7.1.1.JSP中page指令:<%@ page %> -- 设置JSP页面的属性.(下面为page的属性)


* page指令在jsp 文件的顶行处,自动生成就行
        下面这些属性都是用于在 page标签中设置JSP属性用的:        
                全局错误页面的的使用: error-page  重点掌握
                * language                :JSP脚本中使用的语言.现在只能写java.
                * contentType        :设置浏览器打开这个JSP的时候采用的默认的字符集的编码.
                * pageEncoding        :设置文件保存到本地硬盘,以及生成Servlet后,Servlet保存到硬盘上的编码.
                * import                :在JSP中引入类对象.但是import可以出现多次.(其它属性只能出现一次)
                        <%@page import="java.util.ArrayList"%>
                        <%@page import="java.util.List"%>
                * extends                :设置JSP翻译成Servlet后继承的类,默认值:org.apache.jasper.runtime.HttpJspBase,这个值要想修改,这个类必须是HttpServlet的子类(这个值一般不改)
                * autoFlush                :设置JSP的缓存自动刷出.true:自动刷出.
                * buffer                :设置JSP的缓冲区的大小,默认8kb.
                * session                :设置在JSP中是否可以直接使用session对象.默认值是true.(不需要request.getSession);
                * isELIgnored        :设置在JSP中是否忽略EL表达式.默认值是false不忽略.
                        例:        ${ name }   false时可以在页面显示name的值,true 会显示name这个字符串;
                //下边这两个属性:是配合使用的在主页面中 设置errorPage="/如果出错要去跳转的页面的路径" (该路径为服务器端路径,不需要写工程名)
                //当页面出错时就会跳转到设置的页面,在错误页面中设置 isErrorPage="true" 就会在该错误页面显示时,将错误信息显示出来,为false时
                //不显示,只显示页面中的普通内容(详见JSP演示)
                * errorPage                :设置错误友好页面的提示.
                * isErrorPage        :通过这个设置显示JSP的错误信息.
               
8.设置全局错误友好界面(重点)
               
                在企业中一般使用下边的这种设置,不适用errorPage/isErrorPage
         * 设置全局的错误友好页面:创建与错误信息对应html页面,
          当浏览器发生错误时就会将页面跳转到预先设定好的页面,
          这样就不会在错误页面直接显示错误信息增加网页的友好性
    * 在web.xml中设置:
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>


7.2JSP中的include指令:指示JSP包含其他的页面.    include :静态包含
* 静态包含格式:
        <%@ include file="logo.jsp" %>
        <%@ include file="menu.jsp" %>
        <h1>BODY部分</h1>
        <%@ include file="footer.jsp" %>
* 动态包含格式:
        <jsp:include page=”被包含页面路径”></jsp:include>        :用于页面的包含.(动态包含)


        * 被包含的页面不需要写结构体,只写page指令 和 要引用的代码


7.3JSP中的taglib指令:指示JSP引入标签库.


        <%@ taglib uri="标签的URI的路径" prefix="标签的别名" %>
例:


8.【JSP的内置对象(*****)】: 面试题
* 写在jsp的java代码中
* JSP的内置对象:在JSP中可以直接使用的对象.


(* JSP中有9大内置对象:
[        * request                                HttpServletRequest                                getParameter(),setAttribute(String name,Object value);
        * response                                HttpServletResponse                                setHeader(String name,String value);getOutputStream();getWriter();
        * session                                HttpSession                                                setAttribute();getAttribute();
        * application                        ServletContext                                        setAttribute();getAttribute();
        * page                                        Object                                                        toString();wait();
        * pageContext                        PageContext                                                setAttribute();getAttribute();
                        pageContext 为Jsp的域对象 ;写一些jsp的插件时会使用
        * config                                ServletConfig                                        getServletName();getServletContext();
        * out                                        JspWriter                                                write(),print();
        * exception                                Throwable                                                getMessage(),getCause();                         设置isErrorPage=”true”
]


* page内置对象                :真实对象是Object,就是JSP翻译成Servlet后的类的引用.
* out内置对象                :
8.1.out和response.getWriter是不是同一个对象?区别是什么?
        结果:
                * 不是 , out真实对象JspWriter ,response获得Writer是PrintWriter.
                * JspWriter缓冲区的内容最终也是由response响应输出到页面,
                  因此JspWriter和response同时输出内容到页面时,
                  response的内容会显示在JspWriter的内容前边;
                  
8.2.pageContext内置对象:
* pageContext 为Jsp的域对象 :写一些jsp的插件时会使用
#功能:
(* 获得其他的8个内置对象        :编写通用性代码或者框架的时候.
(* 向JSP的四个域中存取数据        :
   ((*JSP的四个域范围:
    * PageScope                                :当前页面中有效.                pageContext                PageContext
    * RequestScope                        :一次请求范围.                    request                        HttpServletRequest
    * SessionScope                        :一次会话范围.                    session                        HttpSession
    * ApplicationScope                :应用范围                                application                ServletContext
(*pagegContext:只能在当前页面使用,其它页面无法获取


        * 这三个域 :一般在jsp中取出数据,很少在jsp中又存储又取出
                *Request
                *session
                *application
                * 三个域获取值的方法获取值:  getAttribute(String)
               
9.【JSP的动作标签】列出6个.(其实有很多,在jsp页面写一个jsp: 就会提示出很多动作标签)
9.1.标签的作用:简化代码.(简化 <% %>  百分号尖括号)


        1. <jsp:forward />                        :用于页面的转发.
        例:/*
                <jsp:forward page="/demo1-jsp/demo3-object/demo3.jsp"></jsp:forward>
        */
        
        2.<jsp:include page=””></jsp:include>        :用于动态包含
        3.<jsp:param />                        :用于带有路径的标签下,传递参数.(一般用来传参)
        4.<jsp:useBean />                        :用于在JSP中使用JavaBean.
        5.<jsp:setProperty />                :用于在JSP中向JavaBean设置属性的.
        6.<jsp:getProperty />                :用于在JSP中获得JavaBean的属性.               


10.*****静态包含和动态包含的区别?(<%@ include%>和<jsp:include>)----面试
         教学答案:
                * 静态包含:相当于源代码的拷贝,只会翻译成一个Java类,有一个执行结果
                * 动态包含:各自分别去翻译,各自执行,最终包含的是执行的结果
        网络答案:
                1、<%@include file="xxx.jsp"%>为jsp中的编译指令,其文件的包含是发生在jsp向servlet转换的时期,
                   而<jsp:include page="xxx.jsp">是jsp中的动作指令,其文件的包含是发生在编译时期,
                   也就是将java文件编译为class文件的时期

                2、使用静态包含只会产生一个class文件,而使用动态包含会产生多个class文件

                3、使用静态包含,包含页面和被包含页面的request对象为同一对象,
                   因为静态包含只是将被包含的页面的内容复制到包含的页面中去;
                   而动态包含包含页面和被包含页面不是同一个页面,被包含的页面的request对象可
                   以取到的参数范围要相对大些,不仅可以取到传递到包含页面的参数,
                   同样也能取得在包含页面向下传递的参数
        
11.<jsp:useBean id="user" class="com.demo1.domain.User" scope="page"></jsp:useBean>
 scope属性的各个设置值的意义和作用:
  (1)page表示将JavaBean实例对象存储在PageContext对象中,作用范围是当前JSP页面有效。
  (2)request表示将JavaBean实例对象存储在ServletRequest对象中,存储在request对象中的JavaBean对象可以被属于同一个请求的所有Servlet和JSP页面访问。
  (3)session表示将JavaBean实例对象存储在HttpSession对象中,存储在HttpSession对象中的JavaBean对象可以被属于同一个会话的所有Servlet和JSP页面访问,此设置要求当前JSP页面支持Session,即没有将page指令的session属性设置为false。也就是对一个特定用户有效,一个http会话。
  (4)application表示将JavaBean实例对象存储在ServletContext对象中,存储在ServletContext对象中的JavaBean对象可以被同一个Web应用程序中的所有Servlet和JSP页面访问。也就是所有用户都可以使用。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2