JavaWeb学习之什么JSP、JSP是如何工作的、JSP语言(各种指令和九大内置对象)、EL表达式简单使用(5)

1、什么JSP
    * servlet:java编写的处理动态web的技术
        * 特点:Java代码中嵌套html代码
    * jsp
        * 特点:HTMl代码中嵌套java代码
    * %tomcat%/conf/web.xml  --> <servlet-mapping><servlet-name>*.jsp
    * 目的:将页面数据处理与页面显示相分离

2、JSP是如何工作的
    * 继承关系
        * public final class demo_jsp extends org.apache.jasper.runtime.HttpJspBase
        * public abstract class HttpJspBase extends HttpServlet implements HttpJspPage
        * 总结:demo_jsp  --> HttpJspBase  --> HttpServlet
    * tomcat调用servlet引擎处理JSP页面
        * 位置: %tomcat%/conf/web.xml  --> serlvet(*.jsp) -->  org.apache.jasper.servlet.JspServlet
        * 在web context root 读取指定的文件
            */demo.jsp
        * 将读取的文件分析,生成相应的servlet文件,java源文件
            * demo_jsp.java
            * 目录:%tomcat%\work\引擎\主机\项目名\org\apache\jsp
        * 将生成的Java文件,编译成字节码文件
            * demo_jsp.class
    * 通知servlet引擎处理当前生成好的servlet

3、JSP语言
    * JSP指令:配置页面的信息,提供给JSP引擎生产java源文件
        * 格式:<%@ 指令 [attribute="value"]%>
        * 位置:建议放置带页面的头部
        * page指令
            * 格式:<%@ page ...%>
            * 属性配置:
                * pageEncoding:配置当前页面保存信息的编码
                * contentType:配置当前页面生成的servlet文件响应浏览器的编码
                    * response.setContentType("text/html;charset=UTF-8");
                    * 比较:
                        * 仅有pageEncoding
                            * 配置当前页面的编码
                            * 配置生成servlet文件响应浏览器的编码
                        * 仅有contentType
                            * 配置当前页面的编码
                            * 配置生成servlet文件响应浏览器的编码
                        * 两个都有
                            * pageEncoding仅设置当前页面的编码
                            * contentType仅设置servlet文件响应浏览器的编码
                * import:引入当前JSP页面需要使用的Java类或接口的包路径
                    * 可以重复引用
                    * 多个之间可以使用逗号分隔
                    * 导包最后一条可以输入多个分号
                * language:确定当前jsp页面使用的语言
                    * 默认:java
                * info:提供对JSP的描述<%@ page info="This JSP Page Written By ZARA"  %>
                * session:确定当前页面是否可以使用session
                    * 默认:ture
                * extends,确定当前jsp页面在生成servlet文件时,继承的父类
                    * 扩展
                    * 例如:page extends="java.lang.String"

                * isErrorPage:是否是错误页面
                    * 默认值:false
                    * 当设置成true,在当前页面将可以使用一个变量 exception
                * errorPage:确定错误页面
                    * 当页面出现异常时,跳转的页面
                    * / 指 context root
                * isThreadSafe:是否是线程安全
                    * 默认值:true
                    * 如果设置成false,在生成的java源码中添加implements SingleThreadModel不推荐使用了
                * isELIgnored:是否忽略EL表达式
                    * 默认值:false
                    * 如果设置true,将忽略EL表达式

                * buffer:当前servlet文件的缓存区大小,和autoFlush一起使用
                    * 默认值是8kb
                * autoFlush:是否自动刷新,当buffer缓存区被填写满后,会自动的刷新内容到浏览器

        * include指令
            * 静态包含:引入其他页面,将其他页面与当前页面合并成一个页面后,再显示给浏览器
            <%@ include file=“/1.jsp” %>
        * taglib指令
            * 用于在JSP页面中导入标签库,常用标签库JSTL
    * JSP脚本元素
        * 声明标签
            * 格式:<%! Java方法或字段 %>
            * 此标签中的内容,在JSP引擎生产servlet文件时,将直接拷贝。放置在当前类
        * 表达式标签
            * 格式:<%= java表达式 %>
                * 例如:String str = "abc" + "def ";
            * 等于与 out.print( 表达式 );
            * 将表达式的结果输出到浏览器
        * 代码块标签:
            * 格式:<% java代码片段 %>
                * 任何方法里面的内容
            * 将标签内容完全拷贝,放置到service方法体中,和输出html内容的方法在一起
        * 总结:
            * 脚本元素不能嵌套使用
            * 不能在html注释中使用

    * JSP注释
        * 格式:<%-- 注释内容 --%>
        * HTML注释:<!-- 注释内容  -->
        * Java注释:
            * 行注释://注释内容
            * 块注释:/*  注释内容  */
            * 标准JavaDoc注释:/** 注释内容  */
        * JSP注释,仅在源码级别有效

    * JSP的内置对象
        * 个数:9
        * 在JSP页面中隐藏的Java对象
        * 1、Object page : 当前类的引用
            * 作用范围:当前页面
        * 2、HttpServletRequest request
            * 作用范围:一次请求(可能涉及多个JSP或Servlet,转发)
        * 3、HttpSession session
            * 作用范围:一个会话
        * 4、ServletContext application
            * 作用范围:整个web相应
        * 5、ServletConfig config
            * 当前servlet的配置
            * 可以单独配置,把JSP文件当成servlet使用
                * 配置文件的位置:WebRoot/web.xml
                * 内容
                     <!-- 注册jsp -->
                     <servlet>
                        <servlet-name>jspfile</servlet-name>
                        <jsp-file>/obj.jsp</jsp-file>
                        <init-param>
                            <param-name>user</param-name>
                            <param-value>lt</param-value>
                        </init-param>
                     </servlet>

                     <!-- 映射 -->
                     <servlet-mapping>
                        <servlet-name>jspfile</servlet-name>
                        <url-pattern>/jsp</url-pattern>
                     </servlet-mapping>
                * 注意:
                    1、使用tomcat,servlet引擎
                        http://localhost:8080/day08/obj.jsp
                    2、自定义访问路径
                        http://localhost:8080/day08/jsp
        * 6、HttpServletResponse response
            * 响应
            * 注意:使用的Writer,所以getOutputStream会出现异常

        * 7、Throwable exception
            * 错误页面中获得异常信息
        * 8、JspWriter out
            * public class JspWriterImpl extends JspWriter {
            * abstract public class JspWriter extends java.io.Writer {

            * public class PrintWriter extends Writer {

        * 9、PageContext pageContext
            * 当前JSP页面的上下文对象,管理当前JSP页面的
            * 具有其他隐式对象的引用
            * 设置属性的值
                * 在不同的作用域设置属性值
                    pageContext.setAttribute("user","liang_page",PageContext.PAGE_SCOPE);
                    pageContext.setAttribute("user","liang_request",PageContext.REQUEST_SCOPE);
                    pageContext.setAttribute("user","liang_session",PageContext.SESSION_SCOPE);
                    pageContext.setAttribute("user","liang_application",PageContext.APPLICATION_SCOPE);
                * 从不同的作用域获得属性值
                    <%=pageContext.getAttribute("user",PageContext.PAGE_SCOPE) %><br/>
                    <%=pageContext.getAttribute("user",PageContext.REQUEST_SCOPE) %><br/>
                    <%=pageContext.getAttribute("user",PageContext.SESSION_SCOPE) %><br/>
                    <%=pageContext.getAttribute("user",PageContext.APPLICATION_SCOPE) %><br/>
                * 从不同的作用域,依次查询需要的属性值
                    * <%=pageContext.findAttribute("user") %>
                    * page、request、session、application

4、EL表达式,全名为Expression Language
    * 功能:获取数据,EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
    * 格式:${表达式}
    * EL执行
        <%@ page isELIgnored="true" %>忽略表达式将会以字符串的形式输出
            * out.write("${user}\r\n");
        <%@ page isELIgnored="false" %>不忽略,通过proprietaryEvaluate去解析表达式
             out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${user}", java.lang.String.class, (PageContext)_jspx_page_context, null, false));
    * 注意:
        * EL表达式,依次从4个作用域中获取不同的属性值
            * page  -- request -- session -- application
        * EL表达式,如果属性名不存在,返回空字符串

    * EL常用对象
        pageContext    对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。)
        pageScope    代表page域中用于保存属性的Map对象
        requestScope    代表request域中用于保存属性的Map对象
        sessionScope    代表session域中用于保存属性的Map对象
        applicationScope    代表application域中用于保存属性的Map对象
        <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
        <%@ page import="cn.itcast.servlet.Book"%>
        <%@ page import="java.util.Map"%>
        <%@ page import="java.util.HashMap"%>
        <%@ page import="java.util.Set"%>
        <%@page import="java.util.Iterator"%>
        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
        </head>
        <body>

        <%
            pageContext.setAttribute("user","liang_page",PageContext.PAGE_SCOPE);
            pageContext.setAttribute("user","liang_request",PageContext.REQUEST_SCOPE);
            pageContext.setAttribute("user","liang_session",PageContext.SESSION_SCOPE);
            pageContext.setAttribute("user","liang_application",PageContext.APPLICATION_SCOPE);

            //request.setAttribute("user","liang_request");
        %>
        java <br/>使用java的方式获取user
        <%=pageContext.getAttribute("user",PageContext.REQUEST_SCOPE) %><br/>
        <!-- 在JSP页面中不再使用Java脚本 -->
        el -- <br/>
        ${user}  -- pageContext.findAttribute("user"); <br/>
        如果user存储在不同的作用域,则使用以下方式获取
        page: ${pageScope.user}<br/>
        request:${requestScope.user}<br/>
        session:${sessionScope.user}<br/>
        application:${applicationScope.user}<br/>

        <hr/>

        <%

            Book book = new Book("b007","Java Core","78");
            pageContext.setAttribute("bookObj",book);

        %>
        <!-- 获得JavaBean中的,属性的值 -->
        ${pageScope.bookObj.id}<br/>
        ${pageScope.bookObj.title}<br/>
        ${pageScope.bookObj.price}<br/>

        <hr/>

        <%
            Map<String,Book> map = new HashMap<String,Book>();
            map.put("b001",    new Book("b004","Thinking Java","78") );

            //迭代器
            Set<Map.Entry<String,Book>> set = map.entrySet();
            Iterator<Map.Entry<String,Book>> it = set.iterator();
            while(it.hasNext()){
                Map.Entry<String,Book> entry = it.next();
                //entry.getKey()
                //entry.getValue()
                pageContext.setAttribute("entry",entry);
            }

        %>
        ${entry.key} <br/>
        ${entry.value.id}
        <hr/>

        <%=pageContext.getSession().isNew() %><br/>
        ${pageContext.session.new}<br/>
        <hr/>

        <%=((HttpServletRequest)pageContext.getRequest()).getContextPath() %><br/>
        ${pageContext.request.contextPath}

        </body>
        </html>
        
时间: 2024-10-10 01:40:22

JavaWeb学习之什么JSP、JSP是如何工作的、JSP语言(各种指令和九大内置对象)、EL表达式简单使用(5)的相关文章

JSP三大指令,九大内置对象,JSP动作标签,EL表达式与函数库

JSP三大指令 ---------------------------------------------- 一个jsp页面中,可以有0~N个指令的定义! 1. page --> 最复杂:格式:<%@page language="java" info="xxx"...%> * pageEncoding和contentType: > pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.jav

jsp三大指令,九大内置对象,JSP动作标签,EL表达式及函数库

JSP三大指令 一个jsp页面中,可以有0~N个指令的定义! page –> 最复杂:格式:<%@page language="java" info="xxx"-%> pageEncoding和contentType: pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.java时需要使用pageEncoding! contentType:它表示添加一个响应头:Content-Type!等同于r

重温JSP学习笔记--三大指令九大内置对象

最近在温习javaweb的相关基础知识,鉴于我弄丢了记满了整整一本的笔记,决定以后把笔记和一些学习上的心得以及碰到的一些问题统统都放在网上,今天看了一下jsp的相关基础,以下是笔记: JSP三大指令: page    ------>最复杂的一个指令,属性很多,常用的像import,language,pageEncoding等等 include-------->静态包含,一般在一个网站不同网页上把相同的元素单独写在一个jsp中,其他页面直接用该命令导入,能大大减少重复代码提高访问速度 tagli

Java Web学习(11):JSP九大内置对象(一)

在学习九大内置对象之前先来看看Web应用程序的请求响应模式. Web应用程序请求响应模式 Web应用程序的请求响应模式图示: 1)用户发送请求(request) 2)服务器给用户响应(response) 生活案例: JSP九大内置对象一览 JSP内置对象是Web容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明,也就是不使用 new关键字就可以使用的内置对象.JSP内置对象也被称为预定义变量. 九大内置对象为: 九个内置对象的简介见下表: out对象 out对象是javax.

Java Web学习(13):JSP九大内置对象(三)

application对象 什么是application? 服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application 对象都是同一个,直到服务器关闭.但是与session不同的是,所有客户的application对象都是同一个,即所有客户 共享这个内置的application对象. appliaction对象 application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.Se

JSP九大内置对象与Servlet学习笔记[转]

我们常说的JSP有九大内置对象分别为:request.response.session.out.pagecontext.page.exception.application.config. 我们知道,JVM只能识别java类,并不能识别JSP代码,那么这些对象是如何产生的的呢?这就要提到Servlet.Servlet就是用Java编写的服务器端程序.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类. JSP的本质就是Servlet,

黑马程序员【JSP九大内置对象和四个作用域】转载

http://www.cnblogs.com/fanfu1/p/4530980.html JSP九大内置对象和四个作用域 ------- android培训.java培训.期待与您交流! ---------- 在学习JSP的时候,首先就要先了解JSP的内置对象,什么是内置对象呢?内置对象也叫隐含对象,就是不需要预先声明就可以在脚本代码和表达式中随意使用.而这样的内置对象在JSP中一共有九个以及四个作用域,在下面的文章中我们会一一讲解. 现在我们先来说一下四个作用域,以便描述各大对象都分属于什么作

JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式

最近在学习JSP相关基础知识,我们都知道JSP当中存在一组不使用new关键字就可以在脚本和表达式中使用的对象,在Web开发中经常使用.为了能更好的理解这些对象,在此对JSP内置对象作一些归纳. 目录: JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式 JSP内置对象——out(待更新) JSP内置对象——request/response(待更新) JSP内置对象——session(待更新) JSP内置对象——application(待更新) JSP内置对象——其他

JSP系列:(3)JSP进阶-九大内置对象和四个域对象

1.JSP九大内置对象 1.1.什么是内置对象? 在jsp开发中,会频繁使用到一些对象,例如HttpSession, ServletContext, ServletContext,  HttpServletRequet.如果我们每次要使用这些对象都去创建这些对象就显示非常麻烦.所以Sun公司设计Jsp时,在jsp页面加载完毕之后就会自动帮开发者创建好这些对象,而开发者只需要直接使用这些对象调用方法即可,这些创建好的对象就叫内置对象!!!! 1.2.9大内置对象 9大内置对象 序号 内置对象名 类