1>以.JSP为扩展名的文件就是JSP页面; XXX.jsp
2>是动态资源:可以被浏览器请求访问的;
1,JSP的作用:
1.servlet:
优点:动态资源,可以接收客户端请求并处理请求,并可以给客户端发送响应。
缺点:客户端浏览器只识别HTML响应体,所以不适合发送HTML响应体,因为需要
通过大量的reponse.getWriter()方法打印( “<html>的</ HTML>”);来向客户端浏览器响应的HTML。
(数据量大不灵活)
如果能够是Servlet的给浏览器响应的大量的htrml内容自动识别完成。
Servlet的需要HTML的功能。
2,HTML
优点:超文本标记语言,就由HTML标签组成,浏览器可直接识别。
缺点:HTML是静态页面,不能包含动态信息(不能定义变量)。
HTML需要的Servlet的功能
Servlet的HTML和是互相需要的功能但是又缺少的关系
3,JSP:
动态资源,再原有的HTML的基础上添加的java脚本构成(这样Html也可以定义变量了),
这样就可以添加动态信息了。而浏览器只识别HTML,所以服务器会将JSP页面自动转成HTML
再响应给客户端浏览器(所以当浏览器直接向服务器请求一个jsp的页面时),再浏览器的
当前页面中鼠标右键查看源代码其实是一个已经转换了的HTML界面)。
解释:(可以理解为)jsp = java + html
1>有了HTML,就无需再自己使用response.getWriter()方法向浏览器去写入大量的HTML的字符串
文本来实现向浏览器响应正文了,就可以直接正常像编写HTML一样了;
2>有了java脚本就能实现页面的动态化了:接收请求参数,处理请求,定义变量等等;
可以说JSP是基于servlet的HTML和于一身,因为JSP本质就是servlet的,其实服务器将
jsp页面转成html页面,底层就是靠servlet的Writer对象out.write("<html></html>")方法或者
out.print("<html></html>")来实现的。
解析:(jsp的执行流程)
jsp本质是Servlet,一般是在第一次访问某个jsp页面的时候,服务器会给jsp页面生成一个对应的Servlet,
jsp页面的java脚本会原封不动的放入到jsp生成的Servlet中,在jsp页面编写html内容,会自动由
服务器转成out.writer("<html></html>");
还是将jsp页面中的html内容以out对象大量的write()写给浏览器的;(只不过这块工作不再由
我们完成,而是由服务器自动完成,我们只需要正常的在jsp页面编写html内容就行)
JSP网页底层的Servlet执行流程
再去创建jsp对应的Servlet对象;
再去调用jsp对应的Servlet对象的init()方法,最初执行且执行一次;
再去调用jsp对应的Servlet的service()方法处理请求,后期jsp页面被访问多少次,jsp对应的Servlet
的service()方法被执行多少次;
最后再服务器关闭的时候销毁jsp对应的servlet对象之前调用destory()方法,最后执行
且只被执行一次;
index.jsp ---> index_jsp.java 的Servlet
1>jsp包含了html和java代码,那么就可以直接编写html标签,以及定义变量,
就可以有动态信息。
2>jsp是动态资源,浏览器不直接识别,所以需要服务器将jsp转换为html,再
响应给浏览器
3>服务器是如何将jsp转换为html的:
jsp其本质还是Servlet,那就是说当再请求一个jsp时,再就jsp对应的Servlet
中服务器会自动使用大量的reponse.getWriter().write()或.print()将jsp页面中的html
响应给浏览器,但是这一部分的工作是由服务器自动完成的。
2、jsp的组成(更准确地说)
html + java脚本 + jsp动作标签 + jsp指令 + jsp的九大内置对象 + EL表达式 + 第三方的
jstl标签;
2>九个在jsp页面中无需创建即可直接使用的对象(因为jsp对应的Servlet已经创建了):
request、response、out、session
exception、application(ServletContext)、
config、pageContext、page(this)
out用来在reponse中写入内容的对象
3>3种java脚本:
也就是三种写法
第一种:<%......%>局部java脚本相当于方法体
也就是在jsp对应的servlet中的service()方法中该脚本会原封不动的放入其中。
也就是说即一个方法中能放入什么代码,那么该脚本就能放入什么代码
放java代码片段,用于执行多条java语句。方法体中能写什么,
它就能写什么(常用)
第二种:<%=.......%>在jsp对应的servlet中的service()方法中该脚本会转化了为
out.write()方法然后参数能放什么该脚本就能放什么;所以该脚本的作用就是向
客户端浏览器显示其内容。
放java表达式,用于往页面输出一条表达式或变量的结果
response.getWriter().print(....)中能放什么,他就能放什么(常用)
而且该脚本标签中的内容,会转换为response.getWriter().print(.....);
且被放在service()中的.
第三种:<%!.....%>成员java脚本
该脚本内容会原封不动放入jsp对应的servlet类的成员位置,一个类中能定义什么成员
该脚本就能放什么。
声明,用来定义类的成员变量和成员方法。类体中能放什么
它就能放什么(成员变量,成员方法,构造器,构造代码块,静态代码块,内部类等)
该脚本标签中的内容都是给JSP对应的Servlet的的从成员定义的,包括成员变量,成员方法,
构造器,构造代码块,静态代码块,内部类等)
3.JSP和servlet的的分工:
JSP :(视图层)
1>用作请求发起页面,如,显示表单,超链接
录入数据并向服务器发起请求
2>用作请求结束响应页面,如,显示响应数据显示服务器的响应信息
servlet:(控制器)
用于具体处理请求数据的环节。
案例:输入两个整数,计算和。
4.jsp的原理:JSP其实就是一个特殊的小服务程序。
1>当JSP页面第一次被访问时,服务器会把JSP编译成java的文件,这个java的文件其实就是一个小服务程序类
xxx.jsp ------ xxx_jsp.java
2>然后再把java的文件编译成的.class文件
3>然后在创建该小服务程序对象
4>最后调用该servlet的对象的服务()方法
5.>第二次之后请求同一JSP时,直接调用它的服务()方法
5.jsp注释
<! - HTML的注释 - >
<% - 被注释内容 - %>
当服务器把JSP编译成的.java文件时会忽略JSP的注释部分。
而JSP中HTML的注释<! - 被注释内容 - >会在JSP被编译成的的.java文件中以
out.write( “<! - HTML的注释 - >”)方法写入到HTML页面中,并响应到客户端浏览器,只是浏览器对
HTML的注释内容不解析。