㈠ jsp的工作原理
JSP工作原理 JSP
在一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个servlet。而这个引擎本身也是一个servlet,在JSWDK或WEBLOGIC中,它就是JspServlet。 JSP引擎先把该JSP文件转换成一个java源文件,在转换时如果发现jsp文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息;如果转换成功, JSP引擎用javac把该Java源文件编译成相应的class文件。然后创建一个该SERVLET的实例,该SERVLET的jspInit()方法被执行,jspInit()方法在servlet的生命周期中只被执行一次。然后jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可大大降低对系统的资源需求,提高系统的并发量及响应时间.但应该注意多线程的编程限制,由于该servlet始终驻于内存,所以响应是非常快的。如果.jsp文件被修改了,服务器将根据设置决定是否对该文件重新编译,如果需要重新编译,则将编译结果取代内存中的servlet,并继续上述处理过程。虽然JSP效率很高,但在第一次调用时由于需要转换和编译而有一些轻微的延迟。此外,如果在任何时候如果由于系统资源不足的原因,JSP引擎将以某种不确定的方式将servlet从内存中移去。当这种情况发生时jspDestroy()方法首先被调用, 然后servlet实例便被标记加入"垃圾收集"处理。 jspInit()及jspDestory()格式如下:可在jspInit()中进行一些初始化工作,如建立与数据库的连接,或建立网络连接,从配置文件中取一些参数等,在jspDestory()中释放相应的资源。
<%!
public void jspInit()
{
System.out.println("jspinit");
}
%>
<%!
public void jspDestory()
{
System.out.println("jspDestory");
}
%>
㈡ jsp的执行过程是怎样的
JSP的执行过程
JSP的执行过程主要可以分为以下几点:
客户端发出请求。
Web容器将JSP转译成Servlet源代码。
Web容器将产生的源代码进行编译。
Web容器加载编译后的代码并执行。
把执行结果响应至客户端。
过程介绍
客户端发出请求,请求为JSP,web容器就会找出相应的servlet进行处理。
将servlet转成字节码文件。
将字节码文件加载到web容器里。
这时会在web容器里建立实例。
进行初始化。
通过service接受请求。
然后web容器会自动产生两个对象servlet和service最后进行销毁。
JSP的运行原理
WEB容器(Servlet引擎)接收到以。jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。
每个JSP页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。
Tomcat 5.x把为JSP页面创建的Servlet源文件和class类文件放置在“<TOMCAT_HOME>workCatalina<主机名><应用程序名>”目录中,
Tomcat将JSP页面翻译成的Servlet的包名为org.apache.jsp.<JSP页面在WEB应用程序内的目录名>。
JSP规范也没有明确要求JSP中的脚本程序代码必须采用Java语言,JSP中的脚本程序代码可以采用Java语言之外的其他脚本语言来编写,但是,JSP页面最终必须转换成Java Servlet程序。
可以在WEB应用程序正式发布之前,将其中的所有JSP页面预先编译成Servlet程序。
㈢ jsp修改以后为什么不需要重启服务器
servlet和jsp本质都是servlet,运行时都是运行.class文件。但是它们的部署方式不一样。
servlet是先编译后部署,修改完以后,MyEclipse进行编译,然后部署.class文件到servlet容器中。如果web服务器已启动,则之前class已被servlet容器加载,可能修改后的class文件不会被servlet容器执行。
而jsp是web服务器进行编译。加载时当场编译的,而不是预先编译好,tomcat可以设置为监视jsp文件的改动,改动之后则重新编译、执行。所以jsp是改动时,不需要重启服务器。
㈣ 在JSP中实现读取文件并修改文件的功能
你可以学习一下IO的相关知识,这里我写一个简单的列子你参考一下吧
<%
StringfileName="D:"+File.separator+"hello.txt";
Filef=newFile(fileName);
OutputStreamout=newFileOutputStream(f);
Stringstr="你好";
byte[]b=str.getBytes();
out.write(b);
out.close();
%>
㈤ 如何修改类文件和jsp页面后不用重启tomcat就可以自动加载呢
既然你用了IDE,那抄就再简单不过了,不袭要去修改任何tomcat配置文件。
在My(Eclipse)中启动tomcat时,用debug模式。
这时候有两种修改是完全不需要重启tomcat的:
1. 修改jsp文件
2. 修改java类中,方法内部的代码
然而,如果要给java类添加一个新的属性,添加一个新的方法,修改方法的签名(方法名,参数,返回值)等等,是无论如何都不可能直接生效的,这时候你就需要restart或者redeploy。
最后再谈一下reloadable="true"这个参数,当你修改了java文件后,tomcat会自动redeploy,而不是直接生效,很多时候redeploy花费时间和restart差不了多少。
㈥ 当jsp文件改变时,tomcat需要重新启动吗
一般来讲都不需要重启
尤其是JSP,因为JSP是更新之后重新编译的
JAVA Bean一般也不需要回
主要是配置文件(例如答XML)改变的时候,需要重新启动。
不过有些时候JSP改变,界面不会立刻改变,这是由于IE的网页缓存造成的。读取相同资源的时候,会优先读取本地的文件。
如果遇到这种情况,多刷新几次就好了
最好是重新部署,大傻猫有时候会偷懒