zoukankan      html  css  js  c++  java
  • 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引擎主机项目名orgapachejsp
            * 将生成的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}
    ");
            <%@ 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对象
         param         表示一个保存了所有请求参数的Map对象
         paramValues     表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回一个String[]
         header      
    表示一个保存了所有http请求头字段的Map对象
         headerValues 同上,返回string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]

        cookie            
    表示一个保存了所有cookie的Map对象
        initParam          
    表示一个保存了所有web应用初始化参数的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>
            
  • 相关阅读:
    经典小程序源码及其下载地址
    关闭ios虚拟键盘的几种方法
    从零开始学ios开发(十八):Storyboards(下)
    iOS应用程序生命周期(前后台切换,应用的各种状态)详解
    从零开始学ios开发(十九):Application Settings and User Defaults(上)
    关于IOS中的delegate必须知道的事情
    ios多线程和进程的区别(转载)
    ios各种手势,很有意思
    IOS中GPS定位偏移纠正(适用于Google地图)
    [iOS]深入浅出 iOS 之多线程 NSThread
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/4131148.html
Copyright © 2011-2022 走看看