JavaEE----JSP

JSP

Jsp基础

Jsp的运行过程

浏览器: http://localhost:8080/day12/01.hello.jsp

       第1次访问jsp时:

                   1)tomcat服务器把jsp文件翻译成java源文件(work目录下)_01_hello_jsp.java

                   2)tomcat服务器把java源文件编译成class字节码 _01_hello_jsp.class

                   3)tomcat服务器构造类对象(_01_hello_jsp)

                   4)tomcat服务器调用类对象的方法(_01_hello_jsp中的方法)

      第n次访问jsp时:

                   1)tomcat服务器调用类对象的方法(_01_hello_jsp中的方法) 只走第4步

      注意:

                   1)当jsp文件内容发送变化,那么会重新翻译和编译jsp文件。

                   2)如果java源文件和class字节码删除了,第一次访问jsp时,也会重新翻译和编译。

Jsp与Servlet的关系

public final class _01_hello_jsp extends org.apache.jasper.runtime.HttpJspBase

public abstract class org.apache.jasper.runtime.HttpJspBase extends javax.servlet.http.HttpServlet implements javax.servlet.jsp.HttpJspPage {

结论: Jsp就是一个servlet文件!!!
(servlet的知识点在jsp中全部适用,但jsp的部分知识点未必在servlet都能适用!!!)
Servlet的生命周期:
1)构造方法(第一次访问时)
2)init方法(第一次访问时)
3)service方法(第n次访问时)
4)destroy方法
Jsp的生命周期:
1)翻译成java源文件(第一次访问时)
2)java源文件编译成class字节码(已经是servlet类)(第一次访问时)
 3)构造方法(第一次访问时)
 4)_jspInit()方法(第一次访问时)
 5)_jspService方法(第n次访问时)
 6)_jspDestroy()方法

Jsp语法

Jsp的三大指令

1、taglib指令

        taglib指令主要是用于导入jsp的标签库。

2、include指令

        include指令用于导入其他页面文件。

         语法: <%@include file="导入的页面路径"%>

         注意:            

                 1)包含与被包含的页面先合并内容翻译到一个java源文件中,再编译执行一个java文件。(先合                            并再翻译),叫静态包含(源码包含)

                 2)被包含的页面不要使用全局的html标签。(html/head/title/body)

3、page指令

        page指令主要是用于告诉tomcat服务器如何翻译jsp文件。(jsp->java文件)

<%@ page 

            language="java"   --告诉服务器以什么语言来翻译jsp文件  

            import="java.util.*" --导包。多个包用逗号分隔 java.util.Date,java.text.SimleDateFromat

            pageEncoding="utf-8"  --jsp翻译成java文件时使用的编码

            contentType="text/html; charset=utf-8" --服务器返回给浏览器的数据类型和编码

            jsp中涉及中文编码问题:

                   1)保存jsp文件时的编码(另存为)

                   2)jsp翻译成java文件时的编码(pageEncoding)

                   3)服务器输出到浏览器的数据编码(contentType)

            注意:

                1)contentType属性如果不写,会参考pageEncoding的编码

                2)在ecplise中开发jsp,保存文件时的编码会参考pageEncoding编码

             结论:

                ecplise中开发jsp文件,只需要在page指令中设置pageEncoding的属性即可解决中文乱码问题!!

  错误页面相关的:

             errorPage="error.jsp" --指定错误页面

             isErrorPage="false"   --指定当前页面是否为错误页面。如果是true,那么就可以是exception内置对象,如果false,则不能使用exception内置对象。exception用于得到错误信息。

             全局错误页面配置:

                在web.xml文件中设置

                通常配置两种错误:404   500


  
  	404
  	/common/404.html
  
  
  	500
  	/common/500.jsp
  

             buffer="8kb"   --jsp页面的缓存区大小

             session="true"  --是否打开session功能。是否可以使用session内置对象

             isELIgnored="false"  %>  --是否忽略EL表达式。false,不忽略,可以使用EL;true,不能EL

JSP九大内置对象

什么是Jsp的内置对象?

        在Jsp的开发过程中,开发者会频繁地使用到一些对象,例如Request,Session对象,ServletConfig,ServletContext,如果每次要使用这些对象都要去创建或者调用方法去得到就比较麻烦。Sun公司为了更加方便开发者在jsp文件中直接得到这些对象,直接就帮我们创建或得到好了这些对象,开发者直接使用这些对象即可,这些直接可以使用的对象就叫内置对象!

9个内置对象

                    对象名      对应的类型             备注

                    request     HttpServletRequest      请求对象,封装请求信息

            response     HttpServletResponse     响应对象,封装响应信息
                    config       ServletConfig           servlet配置对象,封装servlet配置信息
                    application       ServletContext          servlet的上下文对象,代表整个web应用环境
                    session      HttpSession             会话对象。用于保存会话数据
                    exception    Throwable              异常对象,用于封装异常信息
                    page        Object                代表当前jsp翻译成java类对象
                    out         JspWriter               jsp页面缓存对象,相当于带缓存功能的PrintWriter

                    pageContext  PageContext            jsp的上下文件对象,代表当前jsp的环境

pageContext对象

1)包含了其他8个内置对象的引用

         Jsp文件翻译的java类

                                  

 publicclass _02_out_jsp{
         public void _jspService(HttpServletRequest rquest, HttpServetResponse response){

             HttpSessionsession;

             ServletConfigconfig;

             ......                                 
    
             //Sun设计了一个PageContext对象,用于存放其他8个内置对象
             PageContext pageContext;
             //调用method1
             method1(pageContext)  }
            public void method1(PageContext pageContext){
                    //要使用8个内置对象
                    pageContext.getSession();
                    pageContext.getRequest();
                    pageContext.getResponse();
                    ......
          }
  }
                    以上情况,在自定义标签中频繁使用到!!!
2)PageContext作为域对象

             作用: 保存数据和获取数据,清除数据

             方法:

                    getAttribute()

                    setAttribute()

                    removeAttribute();             

              保存数据: 默认情况,保存到page域中  pageContext.setAttribute(name,object);

                               可以指定域保存                     pageContext.setAttribute(name,object,int 域范围)                

              域范围:PAGE_SCOPE, REQUET_SCOPE, SESSION_SCOPE , APPLICATION_SCOPE    

               取出数据:

                                默认情况,从page域取出        pageContext.getAttribute(name);

                                  可以指定域取出                     pageContext.getAttribute(name,int 域范围)

              域范围:PAGE_SCOPE, REQUET_SCOPE, SESSION_SCOPE , APPLICATION_SCOPE

                                 从四个域中搜索:

                                          pageContext.findAttribute(name);

                               搜索顺序: page域-> request域 -> sesion域->application域

域对象作用范围

             page域:处于同一个jsp页面中数据共享是有效的!!

             request域:处于同一个请求中数据共享是有效的!!(使用转发)

             session域:处于同一个会话中数据共享是有效的!!(同一个session对象)

             application域:处于同一个web应用中数据共享是有效的!!

EL表达式

EL表达式的作用

                  在jsp显示数据,可以使用jsp表达式向浏览器输出数据。可以使用java脚本来执行业务逻辑。

                  建议:开发者在jsp页面中要尽量减少java代码,甚至不用java代码

                  EL表达式用于替代jsp页面中的jsp表达式

                  Jsp标签用于替代jsp页面中的jsp脚本

                  EL表达式的作用:用于向浏览器输出域对象中的变量和表达式计算的结果

                 (EL表达式必须要求数据放在域对象中的!!!!)

                  语法: ${变量或表达式}




你可能感兴趣的:(JavaEE基础知识)