当前位置:编程学习 > JS >>

详解JSP

 JSP是J2EE标准之一,和ASP.NET中的aspx作用和开发类似,这篇博客我们通过一个简单的实例,看一下JSP的部署、执行原理及生命周期等。

新建
    我们新建一个项目,按照Tomcat要求的基本文档结构,名为MyFirstJSP,在这个项目下新建一个JSP,名为HelloWorld.jsp,目的只是输出一行HelloWorld:


[html] 
<html> 
    <head> 
        <title>login</title> 
    </head> 
    <body> 
            <% out.println("HelloWorld"); %> 
    </body> 
<html> 

 <html>
  <head>
   <title>login</title>
  </head>
  <body>
    <% out.println("HelloWorld"); %>
  </body>
 <html>
部署

    JSP的部署,不像Servlet一样繁琐(可以参见博客博客《Tomcat下Servlet登录实例》),不需要修改配置文件,也不需要指定jsp的动作指向,按照上面的步骤新建完毕项目以后,打开Tomcat,输入            

配置文件
    打开Tomcat根目录下conf下的web.xml,可以发现以下配置:

[html]
<!-- The mapping for the JSP servlet --> 
 <servlet-mapping> 
     <servlet-name>jsp</servlet-name> 
     <url-pattern>*.jsp</url-pattern> 
 </servlet-mapping> 
 
 <servlet-mapping> 
     <servlet-name>jsp</servlet-name> 
     <url-pattern>*.jspx</url-pattern> 
 </servlet-mapping> 

    <!-- The mapping for the JSP servlet -->
     <servlet-mapping>
         <servlet-name>jsp</servlet-name>
         <url-pattern>*.jsp</url-pattern>
     </servlet-mapping>
 
     <servlet-mapping>
         <servlet-name>jsp</servlet-name>
         <url-pattern>*.jspx</url-pattern>
     </servlet-mapping>
    现在我们把配置文件中的*.jspx修改为*.test,把我们的HelloWorld.jsp修改为HelloWorld.test,然后访问http://localhost:8080/MyFirstJSP/HelloWorld.test,执行结果为:

           

    和上面相同,其实这个配置的意思是:把什么样的文件当做jsp来解析,此处也可以修改为其它格式。

    可见,如果配置合理,拓展名对jsp执行无影响,那么jsp的执行原理是什么?我们继续看这个配置文件,可以发现如下配置:


[html]
<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>
         <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>
    可见,此配置的作用是找到处理jsp的类,经过比对代码,其实就是把jsp当做Servlet处理,当然只凭这个说服力不大,我们继续往下看。

     进入D:\Program Files (x86)\apache-tomcat-6.0.33\work\Catalina\localhost\MyFirstJSP\org\apache\jsp下,发现如下的文档结构:

   

 \
 

    在此处会自动生成与之对应的java文件和类文件,因为刚才我们尝试了test的文件,所以此处也生成了对应的test的java和类文件。我们打开HelloWorld_jsp.java,找到主要的函数_jspService:

[java]
<SPAN style="FONT-FAMILY: SimSun">public void _jspService(HttpServletRequest request, HttpServletResponse response) 
        throws java.io.IOException, ServletException { 
    PageContext pageContext = null; 
    HttpSession session = null; 
    ServletContext application = null; 
    ServletConfig config = null; 
    JspWriter out = null; 
    Object page = this; 
    JspWriter _jspx_out = null; 
    PageContext _jspx_page_context = null; 
    try { 
      response.setContentType("text/html"); 
      pageContext = _jspxFactory.getPageContext(this, request, response, 
                null, true, 8192, true); 
      _jspx_page_context = pageContext; 
      application = pageContext.getServletContext(); 
      config = pageContext.getServletConfig(); 
      session = pageContext.getSession(); 
      out = pageContext.getOut(); 
      _jspx_out = out; 
 
      out.write("<html>\r\n"); 
      out.write("\t<head>\r\n"); 
      out.write("\t\t<title>login</title>\r\n"); 
      out.write("\t</h

补充:Web开发 , Jsp ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,