JSP

作者: yangliangliang | 来源:发表于2017-05-03 16:22 被阅读78次

    OCP开发原则:扩展是开放的,修改是关闭的。

    1.JSP是什么?

    -javaSErver Pages

    -基于java语言实现的服务器端页面

    -JSP是JavaEE规范之一

    2. JSP文件通常存放在什么位置?

    -JSP可以放倒WEB-INF目录外,目前我们是这样做的

    -在实际开发中,有很多项目是将JSP放倒WEB-INF目录中,保护JSP

    -WEB-INF目录中的数据是相对安全的。

    3.jsp文件后缀是什么?

    -默认是.jsp

    -但是jsp文件的后缀也是可以修改的额,通过修改CATALINA_HOME/conf/web.xml文件(在哪修改呢在凯特琳(Tomcat服务器)啊的home,conf里面的web.xml文件里面修改)

    4. JS和JSP的区别?

    -JS:JavaScript,运行在浏览器中,和服务器没有关系,和java也没有关系

    -JSP:JavaServer Pages,运行在服务器中,JSP底层就是java程序,运行在JVM中

    (在Tomcat中有work目录,它里面存放的是jsp翻译生成的java程序存放的位置)

    5.JSP的执行原理?

    -浏览器上访问的路径虽然是以.jsp结尾,访问的是某个jsp文件,其实底层执行的是jsp对应的java程序

    -Tomcat服务器负责将.jsp文件翻译生成.java源文件,并且将java源文件编译生成.class字节码文件

    -访问jsp,其实底层还是执行了.class文件中的程序

    -Tomcat服务器内置了一个JSP翻译引擎,专门负责翻译JSP文件,编译java源文件

    -index.jsp会被翻译生成index_jsp.java,编译生成index_jsp.class

    -index_jsp这个类继承了HttpJspBase,而HTTPJsBase继承了HttpServlet

    -jsp就是Servlet,只不过职责不同,JSP的强项做页面展示

    6.在JSP文件中编写的所有的HTML、CSS、JavaScript,对JSP来说,只是普通的字符串,被翻译到:out.write(“翻译到这里”);

    例如:在jsp文件中编写html代码

    <html>

    <title>idnex page</index>

    <body>

    index page!

    System.out.println("Hello world");

    </body>

    </html>

    其实都被翻译成这样了

    out.write("<html>\r\n");

    out.write("<title>index page</title>\n\t");

    out.write("System.out.println("helloword")");

    注意:想要在jsp中写java程序,学jsp语法,学jsp语法你写的东西才能翻译到java程序的位置上

    <% System.out.println("sfsf") %> 翻译到servlet方法里面作为java语句

    <% ! System.out.println("sfsf") %> 翻译到servlet类体里面

    如果啥也没写则被翻译到servlet方法里面的out.print("dd")里面

    JSP的生命周期和Servlet生命周期一样。

    Servlet 主要负责数据的接收和业务逻辑的处理。而JSP主要负责前端页面展示。

    JSP是服务器端呢基于java语言实现的页面

    7.jsp文件修改之后,不需要重新部署,也不需要重新启动Tomcat服务器

    8.jsp文件第一次访问的时候为什么非常慢?

    -启动JSP翻译引擎

    -需要一个翻译的过程

    -需要一个编译的过程

    -需要Servlet对象的创建过程

    -init方法调用

    -service方法调用

    为什么第2+次访问JSP的时候非常快?

    -不需要翻译

    -不需要编译

    -不需要创建Servlet对象

    -直接调用Servlet对象的service方法

    jsp也是单实例多线程环境下运行的一个Servlet对象

    9.jsp文件在什么时候会被重新翻译?

    -jsp文件被修改之后会被重新的翻译

    -怎么确定jsp文件修改了呢?Tomcat服务器会记录jsp文件的最后修改时间。

    第二节-----------JSP小脚本------------------

    打开JSP快的方式--MyEclipse JSP Editor---

    可以设置这种默认的方式Preferences -----输入file as (文件关联)file associations---jsp---MyEclipse JSP Editor--default--OK就可以了。

    <%----%>    1.这是JSP的专业注释,使用这种注释方式,不会编译到java源文件中

    2. 在JSP文件中所编写的所有的html、CSS、javascript 都会被自动翻译到Servlet的service方法中的out.write("翻译到这里")

    3.关于JSP的小脚本scriiptlet:

    <%

    java语句;

    java语句;

    %>

    4.小脚本中的java语句被翻译到Servlet的service方法中,所以小脚本中必须编写“java语句”,java语句以分号结尾。

    5. 所谓JSP规范,就是SUN制定号的一些翻译规则,按照翻译规则进行翻译,生成对应的java源程序,不同的web服务器,翻译的结果是完全相同的,因为这些服务器在翻译的时候,都遵守了JSP翻译规范

    6.小脚本的数量随意,可以多个

    7.小脚本中编写java程序出现在service方法中,service方法的代码是有执行顺序的,所以小脚本中的程序也是有顺序的。

    面试题:  

    8 .JSP的声明语法格式:

    <%! 

    实例变量;

    静态变量

    方法;

    静态语句块;

    构造函数;

    注:声明语法中的java程序会被JSP翻译引擎翻译到service方法之外

    声明块中不能直接编写java语句,除非是变量的声明(下面有说明,java语句不能出现在类体中)

    %>

    <%! 

    //java语句不能直接出线在类体中

    //System.out.println("hello World") ;

    %>

    <%%>带!号翻译在serverce方法外,否则翻译在serverce里面。

    9.关于JSP的九大内置对象

    1.什么是内置对象?

    可以直接在JSP文件中拿来使用的引用

    <%因为它翻译到了servlet方法里面,所以servlet里面的request对象,responson对象都可以使用

    如:request.getContentPaht

    %>

    2.九大内置对象都有哪些?

    内置对象名称                     完整类名

    pageContext           javax.servlet.jsp.pageContext              页面范围

    request                   javax.servlet.http.HttpServletRequest。请求范围

    session                  javax.servlet.http.HttpSession。     会话范围

    application            javax.servlet.ServletContext      应用范围

    out                          Javax.servlet.jsp.JspWriter。       响应对象

    response              Javax.servlet..http.HttpServletResponse        标准输出流

    config                  Javax.servlet.ServletConfig               Servlet配置信息对象

    exception            Java.lang.Throwable            异常引用(isErrorPage=“true”)

    page                    Java.lang.object[page = this;]            很少用

    3)以上内置对象只能在service方法中“直接”使用,在其它反复中无法“使用”使用,可以间接使用(传值)

    <% out.print(); %>等同于<%= %>   // 表达式语法具有输出功能,输出到浏览器。

    登陆成功,欢迎<%=username%>回来。 

    第三节------------------page指令---------------------------------

    关于JSP的指令:

    1.指令的作用,是指导JSP的翻译引擎如何翻译JSP代码。

    *page      页面指令

    *include     包含指令

    *taglib     标签库指令

    2.指令的使用语法格式:

    <%@指令名 属性名=属性值 属性名=属性值......%>

    3.关于JSP的page指令,page指令中常用的属性: 

    *contentType    设置JSP的相应内容类型,同时在响应的内容类型后面也可以指定响应的字符编码方式。

    *pageEncoding 设置JSP响应时的字符编码方式

    *import        组织导入。<%@page import="java.util.Date"%> <%@page import="java.util.*"%>也可以

    <%@page import="java.util.*,java.text.SimpleDateFormat"%>

    *session        设置当前JSP页面中是否可以直接使用session内置对象

    关于page指令中的session属性:

    -session=”true“    表示在当前JSP中可以直接使用内置对象session,程序执行的时候获取当前的session会话对象,若获取不到则新建session对象

    -session =“false”

    表示在当前JSP中不能直接使用内置对象session

    *但是有一些业务可能要求在当前JSP页面中获取当前的session对象,没有获取到则不新建session对象,此时需要

    若session这个属性没有指定,默认是true

    *errorPage      错误页面

    *isErrorPage 是否是错误页面

    关于page指令中的isErrorPage属性:

    -isErrorPage = “false”表示内置对象exception无法使用(缺省情况下是false)

    -isErrorPage = “true” 表示内置对象exception可以使用。

    使用内置对象exception打印异常堆栈追踪信息

    exception引用指向了抛出的异常

    exception.printStackTrace();

    *isELIgnored 是否忽略EL表达式[后期讲]

    关于JSP的include指令

    1.a.jsp可以将b.jsp包含进来,当然被包含的资源不一定是jsp,也可能是其它的网络资源

    2.include作用:

    <%@ include file="/index2.jsp"%>

    在网页中有一些主体框架,例如:网页头、网页脚,这些都是固定不变的,

    我们可以将网页头,网页脚等固定不变的单独写到某个JSP文件中,

    在需要页面使用include指令包含进来

    优点:代码量少了。  便于维护[修改一个文件就可以作用于所有的页面]

    3.在一个jsp中可以使用多个include指令

    4.include实现原理:

    4.1 编译期包含

    4.2 a.jsp包含b.jsp,底层公生成一个java源文件,一个class字节码文件,

    翻译期包含/编译期包含/静态联编

    5.静态联编的时候,多个jsp中可以共享一个局部变量。

    因为最终翻译之后service方法只有一个。

    第四节------------------动作forward(转发,转寄)----------------------------

    关于JSP中的动作: 

    语法格式:<jsp:动作名 属性名=属性值 属性名=属性值.....></jsp:动作名>                

    <jsp:forward page=""></jsp:forward>

    关于JSP中的include动作:

    1.a.jsp包含b.jsp,底层会分别生成两个java源文件,两个class字节码文件

    2.编译阶段并没有包含,编译阶段是两个独立的class字节码文件,生成两个Servlet,两个独立的service方法

    3.使用include动作属性运行阶段包含,实际上是在运行阶段a中service方法调用了b的service方法,达到了包含效果

    4. a.jsp包含b.jsp,若两个jsp文件中有重名的变量,只能使用动态包含,其余都可以使用静态包含。

    5.include 动作完成的动态包含,被称为动态联编

    <jsp:include page="/b.jsp"></jsp:include>

    关于JSP中的九大内置对象

    内置对象名称                     完整类名

    pageContext           javax.servlet.jsp.pageContext              页面范围

    request                   javax.servlet.http.HttpServletRequest。请求范围

    session                  javax.servlet.http.HttpSession。     会话范围

    application            javax.servlet.ServletContext      应用范围

    out                          Javax.servlet.jsp.JspWriter。       响应对象

    response              Javax.servlet..http.HttpServletResponse        标准输出流

    config                  Javax.servlet.ServletConfig               Servlet配置信息对象

    exception            Java.lang.Throwable            异常引用(isErrorPage=“true”)

    page                    Java.lang.object[page = this;]            很少用

    相关文章

      网友评论

          本文标题:JSP

          本文链接:https://www.haomeiwen.com/subject/dxektxtx.html