zoukankan      html  css  js  c++  java
  • JSP(一)

    一、JSP概要

      一】JSP的概念

             1>JSP是SUN公司开发的一个基于服务端的一种动态WEB开发技术。
             2>JSP的代码结构/内容 = HTML内容+JSP特有元素内容
             3>在IDE工具中开发JSP,pageEncoding有两层含义:
                 1》指明当前JSP中的字符采用什么方式编码
                 2》指明当前JSP页面保存时采用什么方式编码
             4>如果再次访问同一个data.jsp文件,翻译工作依然进行,
                 但Servlet引擎可以去掉创建Servlet对象的工作,得到优化,
                 因此,这就是第二次比第一次访问迅速的原因。
      二】JSP的强项
             项目中,最佳实践模式:
                 Servlet:适合控制器
                 Jsp:适合显示
                 JavaBean:模型
      三】JSP原理
         1)web容器根据客户端访问的资源类别(Web容器会根据资源的第一行代码确定),
                 如果是JSP资源,就交给JSP引擎处理
                 如果是Servlet资源,就交给Servlet引擎处理
         2)如果是JSP资源,JSP引擎会自动将其翻译成Servlet资源,
         3)传入相关的对象,如果是静态资源,翻译成以out.write()形式输出,
                                              如果是动态资源,翻译成以out.print()形式输出
         4)此时JSP引擎在翻译正确后,输出给Servlet引擎,按照Servlet对象的处理流程进行处理。
    二、JSP语法
        一】JSP模版元素
                    ------就是HTML中的静态内容,即<body>、<table>、<form>...等标签
        二】JSP脚本表达式
                作用:用于将程序数据输出到客户端
                语法:<%= 变量或表达式 %>
                注意:
                    1》结尾无分号
                    2》默认输出到客户端的浏览器
                eg:
                    当前时间:<%= new java.util.Date() %>
        三】JSP脚本片断
                作用:用于在JSP页面中编写多好Java代码
                语法:
                    <%
                        ...
                        java代码;
                        ...
                    %>
                    
                    注意:
                        1》脚本片段中的注释符号与java代码一致(因为里面就是java代码)
                        2》JSP修改后,无需重新部署,直接刷新,Web容器会自动比较新旧两个版本的JSP
                        3》多个JSP脚本片断中定义的变量,都会翻译到_jspService()函数中,作为【局部变量】
                        4》如何再次访问同一个date.jsp文件,翻译工作依然进行,但Servlet引擎工作可以简化,这就是为什么第n次比第1次访问速度快的原因。
        四】JSP注释
            注意:
                1》JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。
                2》JSP注释不能进行嵌套使用。
            与HTML注释的区别:
                1》对于HTML注释来说,JSP引擎会将其翻译成Servlet内容,
                2》对于JSP注释来说,JSP引擎不会进行翻译。
                    因此,为了减少服务器压力,优先使用JSP注释,
                    其实,这也是为什么在客户端能显示HTML注释,而不显示JSP注释的原因。
                
            格式:
                <%-- 需要注释的内容 -->
        五】JSP声明(即翻译后将声明的东西放到Servlet对象中,作为属性或者作为方法)
            1)声明变量
            作用:创建一个实例变量,即翻译成的Servlet对象的全局变量(属性)。
            格式:
                <%!
                    声明变量的代码;
                %>
            code:
                <%!
                    String name="哈哈";
                %>
            2)声明方法
            作用:创建一个方法,即翻译成的Servlet对象的方法成员。
            格式:
                <%!
                    方法代码块
                %>
            code:
            <%!
                public String getName(){
                    return name;
                }
            %>
            
            
    三、JSP指令
            一】含义
                    1)指令是程序员控制JSP引擎做什么的依据
                    2)主要有三种:page, include, taglib
            二】基本语法
                一个指令可以有多个属性值。
                <%@ 指令 属性名="值" 属性名="值"...%>
            
            三】page指令
                        
                    1)属性:
                          

                            language="JSP里面包含的动态语言,默认为java语言, 一般可以不写"   code:    language="java"  
                            *import="当前JSP页面中,需要导入的包.【会翻译成java文件的import语句。】"   code:    import="java.util.*, java.io.*, ..."
                            session="true|false" 设置翻译成java文件时会不会自动创建session对象【创建的是全局对象】。默认值为true
                            buffer="none | 8kb | sizekb" JSP输出时使用的缓存大小,默认8kb
                            autoFlush="true| false" 设置当buffer缓存满时,web容器是否自动刷新到客户端。默认为true。
                                                                                如果为flase需要添加自动刷新的代码
                            isThreadSafe="true | false"    表示web服务器确保是否线程安全  默认为true
                                                                                    true:容器自动帮加锁
                                                                                    false:需要自己写代码加锁
                            info="text(JSP的信息)"        表示JSP的相关描述信息,【可以通过getServletInfo()获取该JSP的信息】
                            *errorPage="relative_url" 当前JSP出错后跳转到目标页面, 【底层使用的是转发】。
                            *isErrorPage="true | false" 默认为false。【当前页面是否是错误的页面错误后转向的处理页面】,
                                                                                    当JSP页面有此属性且为ture时,服务器翻译时候容器会自动创建一个全局变量exception.
                                                                                    因此,只有JSP页面有该属性且为true时,web容器才会自动创建exception对象
                                                                                    才能调用getMessage()方法获取到关于错误的信息
                            *【contexType和pageEncoding已经可以通用了】
                            *contentType="text/html;charset=UTF-8"  
                            *pageEncoding="UTF-8"        
                            *isELIgnored    ="true | false"     在JSP引擎翻译时是否把EL表达式语言忽略掉
                    
                    
                    


                    
                    2)补充:
                        页面错误处理的方式:
                        优先级:
                            第一种方式【局部异常处理】>第二种方式【全局异常处理】
                            
                        1>第一种方式:通过page指令里面的errorPage属性和isErrorPage属性
                                属于【局部异常处理】,只对一个JSP页面起作用。
                                errorPage:出错的页面,指定处理页地址
                                isErrorPage:处理页面,指明处理错误的方式。
                                
                        2>第二种方式:修改web.xml文件
                                属于【全局异常处理】,对项目的所有JSP页面起作用。
                                加上一个<error-page>标签
                                格式:
                                    <error-page>
                                        <exception-type>错误的类型,即异常类</exception-type>
                                        <error-code>错误状态码</error-code>
                                        <location>错误处理页面</location>
                                    </error-page>
                                code:
                                    <error-page>
                                        <exceptin-type>java.lang.NumberFormatException</exception-type>
                                        <error-code>500</error-code>
                                        <location>/error.jsp</location>
                                    </error-page>
                                    <error-page>
                                        <error-code>404</error-code>
                                        <location>/unkown.jsp</location>
                                    </error-page>
                            
                            注意:
                                1》当使用此种方式。当异常即符合状态码和又符合异常类型,
                                        则会调用转发的include方法,将结果并行显示出来。
                                        结果中:先显示error-code的处理结果,再换行显示exception-type的结果。
                                2》开发中,优先考虑error-code。

                    3>第三种方式:在页面中使用try..catch的方式来处理。但是不建议使用此方式。
                    
                    
                3)page指定的应用-----使用page指令解决中文乱码问题
                    注意:JSP页面在提交数据的时候,会自动将中文字符转换成%ad的形式
                    原理:
                    1>pageEncoding的含义:即告诉浏览器用什么方式去解析服务端响应的编码。
                            pageEncoding="utf-8"
                            1》JSP页面的中文采用UTF-8方式编码
                            2》JSP保存时采用UTF-8方式编码
                            3》指示浏览器以UTF-8方式解析内容
                    2>request.setCharacterEncoding("UTF-8");//设置web容器以何种编码去解析客户端的数据。
                                                                                                    //未设置则默认用ISO8859-1去解析客户端的数据
                    
                    
        四】include指令【静态包含】————(相当于把多个jsp文件合并成在一个jsp文件之中)
              作用:在一个页面中包含多个JSP文件,与转发的include()方法类似。
              格式:<%@ include file="relativeURL" %>
              注意:
                  1)include指令包含多个JSP页面,最后JSP引擎只翻译总的JSP页面,即index.jsp页面。
                  2)被包含的JSP页面会原封不动的导入到总的JSP页面中,造成HTML结构非常混乱,有多个HTML等标签。。。
                  3)多个JSP最终会整合并翻译成一个Servlet,即index_jsp.java文件。
        五】taglib指令(略)
        
    四、JSP九大内置对象
        1)request <---> HttpServletRequest
        2)response <--->HttpServletResponse
        3)session <---> HttpSession
            1》访问JSP页面时,默认web服务器创建session
            2》访问servlet时,必须通过request.getSession()才能创建session
            3》在转发和重定向情况下,session不会销毁.原因:服务器和客户端并没有断开连接,重定向其实是再一次的请求。    
        4)application <---> ServletContext
            code:
            <%
                application.setAttribute("name", "jack");
              application.removeAttribute("name");
              String name = (String)application.getAttribute("name");
              response.getWriter().write("用户名:" + name);
          %>
      5)config  <---> ServletConfig
          取得JSP在web.xml文件中的映射信息
      6)exception:该对象只能在含有<%@ page isErrorpage="true" %>的页面中容器才会创建,并可调用getMessage()等方法进行处理。
      7)out:是一个JspWriter对象。即一个带有缓冲功能的printWriter对象.
          即:【out】 <===>【response.getWriter()+缓冲】
          code:
              out.writer("先");
              response.getWriter().writer("后");
           //结果:  后 先
          
          原因:【JspWriter与printWriter的区别】
              JspWriter先将数据缓冲在自己的缓冲池,再输入到web容器的公用缓冲池;
              而printWriter直接将数据缓冲到web容器的公用缓冲池中。
      8)PageContext对象
                      ------表示JSP运行过程中的环境对象
          1》可以通过其方法取得其它的8个隐藏内置对象;
          2》具有转发和包含的功能, 但没有重定向的功能!
          3》其本身也是一个域对象
          重点方法:
              1》获得其它8大内置对象:
                  【对象名】        get【对象名】()
                  
        总结:
            JSP中的四大域对象:【pageContext,request,session,application】
            Servlet三大域对象: 【HttpServletRequest, HttpSession, HttpServletContext】


                             

  • 相关阅读:
    Insus Meta Utility
    The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
    Insus Binary Utility
    asp.net实现文件下载功能
    Column 'Column Name' does not belong to table Table
    程序已被编译为DLL,怎样去修改程序功能
    如何在Web网站实现搜索功能
    如何把数据流转换为二进制字符串
    Asp.net更新文件夹的文件
    如何显示中文月份
  • 原文地址:https://www.cnblogs.com/SkyGood/p/3989838.html
Copyright © 2011-2022 走看看