当先锋百科网

首页 1 2 3 4 5 6 7

JSP:Java Server Pages。JSP是一种网页的编码格式,不同于HTML的是JSP中是由  HTML中的标签指令  和  Java逻辑代码  拼凑而成,  其中的Java代码类似于JavaScript中的逻辑代码,  但相对比来说JSP中的Java代码更方便阅读和书写.

一:JSP的运行原理

当JSP页面被运行时,WEB容器会把请求交给JSP引擎处理,会将JSP翻译成一个_jspServlet,然后按照Servlet的调用方式来进行调用,

浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,所以我们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet,

二:Tomcat

Tomcat在Web中的作用:

Tomcat是Web中的容器,

        当客户在Web服务器中输入请求的时候,   如果请求的动态页面,  那么Web服务器会创建一个Servlet来处理,  Servlet就是Java代码,  只是在服务器端的Java代码,   Servlet通过配置文件来拦截客户所发出的请求,  并进行相应的处理,  最后反馈到客户端.
       在这一系列的请求中,Web服务器是如何创建出Servlet来对请求进行处理?   而Tomcat的作用就是帮助Web服务器来创建Servlet的

Tomcat是应用(java)服务器,它只是一个Servlet容器,是Apache的扩展,处理动态页面的部分

Tomcat各个文件夹的含义

  • bin:二进制执行文件。里面最常用的文件是startup.bat
  • conf:配置目录。里面最核心的文件是server.xml。可以在里面改端口号等。默认端口号是8080,也就是说,此端口号不能被其他应用程序占用。
  • lib:库文件。tomcat运行时需要的jar包所在的目录
  • logs:日志
  • temp:临时产生的文件,即缓存
  • webapps:web的应用程序。web应用放置到此目录下浏览器可以直接访问
  • work:编译以后的class文件。

当我们通过浏览器访问index.jsp时,服务器首先将index.jsp翻译成一个index_jsp.class,在Tomcat服务的work\Catalina\localhost\项目名\org\apache\jsp  目录下可以看到index_jsp.class的源代码文件index_jsp.java

index_jsp这个类是继承 org.apache.jasper.runtime.HttpJspBase这个类的,通过查看Tomcat服务器的源代码,可以知道在apache-tomcat-6.0.20-src\java\org\apache\jasper\runtime目录下存HttpJspBase这个类的源代码文件

HttpJspBase 类是继承 HttpServlet 的,所以 HttpJspBase 类是一个 Servlet ,而 index_jsp 又是继承 HttpJspBase 类的,所以index_jsp类也是一个Servlet,所以当浏览器访问服务器上的index.jsp页面时,其实就是在访问index_jsp这个Servlet,index_jsp这个Servlet使用_jspService这个方法处理请求。

三:Jsp中的HTML代码和Java代码如何发送到客户端

1:jsp中的代码是由 Java代码 和 HTML 代码组成的  但是两种不同的代码是如何实现他们的作用的?

在客户端发出请求时(请求的是动态代码)  但是客户端却只能看到HTML代码,  Java代码是客户端看不到的

原因是:  请求的JSP页面中,所有的代码是通过了Web服务器(在Tomcat下)编译后的Servlet代码,  在jsp中编写的java代码和html代码都会被翻译到_jspService方法中去,在jsp中编写的java代码会原封不动地翻译成java代码,如<%out.print("HelloJsp");%>直接翻译成out.print("Hello Jsp");,而HTML代码则会翻译成使用out.write("<html标签>\r\n");的形式输出到浏览器。在jsp页面中编写的html排版标签都是以out.write("<html标签>\r\n");的形式输出到浏览器,浏览器拿到html代码后才能够解析执行html代码。

当执行_jspService方法处理请求时,就会执行在jsp编写的java代码了,所以Jsp页面中的java代码服务器是通过调用_jspService方法处理请求时执行的。(_jspService中的Java代码是实现动态页面的逻辑基础)