由于修改Servlet之后,需要重新生成class文件,并且重启服务器,然后打开或刷新网页,才能看到修改的效果,过程非常繁琐,不便捷.如何做到所见即所得,我一修改,一刷新网页,效果立马出现.所以JSP产生了.
JSP,java serverpages.特点,拥有和Servlet一样的特性和优点,因为JSP实际就是Servlet.而Servlet比更有优势的是,可以在HTML代码中直接内嵌Java代码.他的操作过程就是,由JSP Engine先将JSP程序转换成Servlet代码,然后再就是Servlet的操作了,编译成class类,载入执行.并且,只有当客户端第一次请求JSP时,才需要将其转换、编译.
写个最简单的HelloWorld.jsp,见识一下什么是JSP.文件名为HelloWorld.jsp,内容:
<html> <head> <title>HelloWorld</title> </head> <body> <% out.println("HelloWorld"); %> </body> </html>
启动服务器,输入地址,界面运行效果:
是不是超简单,可是内部是如何运作的?
首先,找到tomcat中的conf文件夹下的web.xml,其中有两段Servlet的配置标签,查找和Servlet是一样的.
<!-- The mappings for the JSP servlet --> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping>
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet>
在第一段的servlet-mapping中,可以知道,只要是*.jsp和*.jspx的都可以找到servlet-name为jsp,而servelt-name为jsp的,找到的类是org.apache.jasper.servlet.JspServlet.这个类在哪呢?
在lib下可以找到jasper.jar包,然后打开可以找到这个class,但是吧,打开乱码.看来不是这里.
这个文件夹下有个xml文件,有一段内容是这样的.
<mbean name="JspMonitor" description="JSP Monitoring" domain="Catalina" group="Monitoring" type="org.apache.jasper.servlet.JspServlet">
不大知道这段代码,但是类型是我要的类,domain,范围或者域名是Catalina.而在work文件夹下是有一个Catalina的文件夹的.
所以在tomcat根目录下,找到work文件夹,这个文件夹的作用是用来放置由JSP生成的各种Servlet文件.在这个路径下一直进去,就可以找到HelloWorld_jsp的.java和.class文件..java文件中就是Servlet代码.
打开.java文件,.class打开是乱码.在_jspService该方法中,找到一段代码,就是将我们的.jsp文件中的代码全部进行了处理,然后输出显示.
只要我立马修改了JSP中的代码,不用重启Tomcat服务器,刷新网页,这里就会自动生成相应的.java代码,并编译,所以效果就出来了.
如修改了HelloWorld的显示代码,为out.println("HelloWorldThis is JSP"),然后刷新网页,
打开的文本编辑器就提示HelloWorld_jsp.java被修改了,内容变成了这样.
.java和.class文件的修改日期变为当前日期和时间,也能表明他们被修改过了.
浏览器的运行效果也跟着改变.
由此可以大概了解一下JSP的运行操作,以及它和Servlet就是一样的东西的事实.用Servlet就可以接收客户端的请求,处理,返回结果,只是不用工具时操作麻烦,而JSP完美的解决了这个问题.看来,任何东西都是越变越方便的,事物都是发展着的.