JSP初涉(一)

0、JSP出现的原因

      早期的技术,后台向浏览器响应页面,全篇都是out或response的形式输出标签,写标签太麻烦,由JSP来简化书写完成

1、什么是JSP?

      JSP全名为Java Server Pages,中文名叫java服务器页面,其本质上是一个简化的Servlet设计,是一种动态网页技术标准。JSP技术特点是在传统的网页HTML文件(*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp),换句话JSP的模板是HTML。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。它实现了html语法中的java扩展(以 <%  %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能解析。

      摘要:既可以定义html标签,又可以定义Java代码的页面

     JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。JSP是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

相关链接:点击打开链接

2、JSP的运行原理---细节(所有的都包含)

举例:01.hello.jsp的运行

(1)客户端试图通过URL映射第一次来访问01.hello.jsp页面,服务器端接受请求后会转交给JSP引擎(容器)

(2)JSP引擎首先试图把该JSP文件翻译成一个Java源文件(Servlet),如果在翻译过程中出现语法错误,转换中断,服务器可客户端显示出错信息

(3)如果翻译成功,JSP引擎会把该Java源文件编译成相应的class文件(字节码文件)

(4)该字节码文件会被JVM运行,JSP引擎会自动的创建该Servlet的实例(通过反射的形式获取字节码文件对象,加载到内存中)

说明:由于服务器能处理多个请求,对于客户端的每个请求,JSP引擎都会创建一个新的线程来处理该请求;这种多线程的方式降低对资源的需求,提高系统的并发量及响应时间

(5)JSP引擎会控制JSP代码的执行声明周期,首先容器会调用jsp_Init()进行初始化,然后调用_jsp_Service()处理请求或接受数据,待该请求处理完毕会调用_jsp_Destory()将该实例标记为垃圾,系统会不定期的会通过gc将其回收

注意:由于第一访问该JSP需要翻译和编译,所以稍微有些延迟

第二次访问:JSP文件修改和JSP文件不修改

不修改:会直接访问系统内存中所编译的class文件(定时监测和刷新)

该class文件保存的位置:tomcat安装目录中的work目录--Catalina--localhost→存储的是Jsp的临时文件(两个)

标志--该class文件生成的时间未变

实验:删除内存中的java文件,再访问

特点执行效率高

修改:需要重新翻译和编译

3、为什么说JSP实质是Servlet?

      通过翻译的Java文件可以看出该类继承了org.apache.jasper.runtime.HttpJspBase,通过tomcat的源码寻找可以发现其又继承了HttpServlet,所以说jsp文件生成的对应的java类其实本质上是继承自HttpServlet的孙子类,所以本质上是一个Servlet,那么在JSP的脚本中可以按照编写Servlet的方式编写(略有区别),所以可以在里面写成response.getWrite().write("内容")的形式。

说明:Apach Tomcat v6.0的所有jar包中,有个jasper.jar.runtime.HttpJspBase.class文件

延伸:HttpJspBase接口中有_jspInit、_jspDestroy、_jspService等抽象方法,编译生成的该java文件只不过是实现了这几个抽象方法;那么HttpJspBase中的抽象方法与HttpServlet中的5个抽象方法有什么联系

联系:首先服务器只认得HttpServlet的5个抽象方法,怎么识别HttpJspBase中的抽象方法呢?通过HttpJspBase的源码可以其重写了父类HttpServlet的service()方法,但是流了个心眼,就是在复写该service()方法中调用了自己对应的抽象方法如_jspService,我们只有要实现该抽象方法即可

总结:上有政策,下有对策---挂羊头卖狗肉

4、服务器是如何执行JSP中html代码和Java代码的?

通过翻译的java源码可以看出,JSP中的html代码通过out.write()的方式原封不动的输出给浏览器(浏览器解析)Java代码则是直接被执行,通过临时文件可以看出:Java代码在jspService()方法中被直接执行(以结果呈现)

5、最佳实践(JSP和Servlet的分工)

Servlet:处理业务逻辑(获取表单数据,请求转发和页面跳转)

JSP:在模板的基础上利用一些对象显示数据

6、Jsp文件放置的位置

在WebContent目录中,也要通过项目名来访问

注意:IDEA和Eclipse的位置略有不同

7、JSP存在的三种注释

(1)html的注释--<!--  -->               特点:会被解析

(2)JSP特有的注释--<%--    --%>    特点:不会被解析(推荐使用,不占内存)

(3)JSP脚本中的注释--<%   Java代码的三种注释方式  %> 特点:在JSP表达式中写Java代码

8、JSP模板的更改以及JSP快速提示的配置

模板设置(Eclipse)

1)Windows--Perferences--JSP Files--Editor--Templates--选中JSP with markup--Edit进行编辑

2)字体的配置--选中JSP Files---Encoding---ISO...(UTF-8)

9、JSP早期技术的脚本(逐渐被其它替代)

(1)<%=%>               定义service方法中的out对象的输入内容--生成在out.write()中--Java的结果输出

(2)<% Java代码%>   看源文件知生成位置在_Jsp_service()方法中--局部内容

(3)<%! %>                定义成员内容

注意:三者生成Java代码的位置不同,导致作用域不同!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值