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;]            很少用

相关文章

  • java基础-day43-JSP

    JSP 1. JSP 1.1 JSP概述 1.2 为什么要用JSP 1.3 JSP语法 1.3.1 JSP语法格式...

  • jsp学习 EL JSTL C标签

    JSP 第一个JSP程序 JSP对比servlet JSP中java脚本元素 JSP原理 JSP的翻译规则 JSP...

  • JSP基础学习笔记(3)--JavaBean

    JSP动作标签:

  • 用session对象实现用户登录

    index.jsp deal.jsp main.jsp exit.jsp

  • JavaWeb之JSP

    八、JSP 目录:什么是JSP、JSP原理、JSP基础语法、JSP指令、9大内置对象、JSP标签 JSTL标签 E...

  • jsp语法

    Jsp语法包含:注释、jsp指令、jsp脚本元素、jsp动作元素。 Jsp注释: Htm...

  • jsp

    jsp介绍 jsp语法 jsp指令 EL表达式 自定义标签 jsp指令 - page jsp指令 - includ...

  • JSP入门

    JSP的基本语法:1.JSP声明语法。2、JSP程序脚本。3、JSP脚本注释。4、JSP内容输出表达式。5、JSP...

  • jsp的内置标签

    jsp:forward 重定向标签

  • Java面试问题

    1、JSP: jsp和servlet的区别 jsp本质就是Servlet,jsp的工作原理是:JSP页面在执行的时...

网友评论

      本文标题:JSP

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