JSP

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 1.学习内容 JSP技术入门和常用指令 JSP的内置对象&标签介绍 EL表达式&EL的内置对象 2.JSP技术入门...
    WendyVIV阅读 2,116评论 1 18
  • 前面讲了servlet入门实践现在开始介绍jsp入门实践,开发环境的搭建请参考我前面的tomcat的文章,jsp入...
    伊豚wall阅读 3,358评论 2 56
  • 1.什么是JSP (1)jsp全称是Java Server Pages,它和Servlet技术一样都是sun公司定...
    yjaal阅读 3,630评论 5 99
  • 一、JSP基础 1.1什么是JSP JSP(Java ServerPage)是Java服务器端动态页面技术。是su...
    晨星资源阅读 1,137评论 0 6
  • 什么是jsp? 很久之前,我们的网页都是静态的,就是我们所看到的页面在编写好之后总是唯一的。后来有人便提出动态页面...
    ezsync小智阅读 1,492评论 0 13