首页 > 代码库 > JSP基础

JSP基础

JSP的出现

 

  上篇文章中提到了用Servlet开发,渲染客户端页面是需要一句一句输出的,这样,编写和修改HTML都会非常不方便。也就是说Servlet写“业务层”很合适,但是写“表现层”很繁琐。

  于是写“表现层”很方便的JSP就诞生了。这里需要指明,JSP并没有增加任何本质上不能用Servlet实现的功能。但是,在JSP中编写静态HTML更加方便,不必再用println语句来输出每一行HTML代码。更重要的是,它将业务层与表现层分离开来,使得编码更方便和易维护。

 

JSP与Servlet

 

  书写方便只是SUN为我们编码所提供的一种服务。有了JSP也不能忘了Servlet,因为后者正是JSP的本质。JSP可以说是对Servlet更高层次的一种包装。请求JSP时,经过转化,褪去包装后,就可以看到它的真是面目还是Servlet,渲染页面还是一行一行的输出HTML代码。

 

JSP的使用

 

  现在一般我们写的JSP就是将JavaServlet)代码嵌入到了HTML页中,也就是将“业务层”与“表现层”混到了一起,与ASP的代码页非常相像,如下面一个ASP代码页:

<html><head><%Response.Write "<TITLE>"&my_name&"</TITLE>"%></head><%if my_domains<>"" thenif Request.ServerVariables("SERVER_NAME")<>my_url Then response.redirect "url.asp"End ifIf rikeenet("a")<>"" And IsNumeric(rikeenet("a")) Then Response.redirect "shop/1/myshop.asp?shopid="&rikeenet("a")&""Response.EndEnd If%><body class="<%= PageStyle %>">	<!--#include file="FHeadAll.asp"-->	<div class="HackBox"></div>	<div id="Content" class="L250">	<a name="main"></a>	<%	ShowIndexNewProduct(9)	shopuser()%>	</div></body></html>

  我们可以看到,服务器代码与HTML代码合在一起,非常混乱。JSP也很类似。也就是说由Java代码与HTML代码合在一起的JSP是很混乱的。

  ASP.NET的出现弥补了ASP的这个缺点,它将显示(aspx)与业务(aspx.cs)完全分离。当然根据SUN自己的推荐,JSP中应该仅仅存放与“显示层”有关的东西,也就是说,只放输出HTML网页的部分。而所有的数据计算,数据分析,数据库连接处理等,统统是属于“业务层”,应该放在Java BEANS中。通过JSP调用Java BEANS,实现两层的整合。

  由上可知JSP的本质就是Servlet,执行时先由JSP引擎将它转化为Servlet,然后再编译为.class文件。而且JSP类似Servlet也是一次编译多次执行的。在第一次请求时才需要将它进行转化和编译。

 

HelloWorld----实例:

 

JSP页----HelloWorld.jsp

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

 

JSP引擎转化后的页----HelloWorld_jsp.java

 

package org.apache.jsp;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;public final class HelloWorld_jsp extends org.apache.jasper.runtime.HttpJspBase    implements org.apache.jasper.runtime.JspSourceDependent {  private static java.util.List _jspx_dependants;  public Object getDependants() {    return _jspx_dependants;  }  public void _jspService(HttpServletRequest request, HttpServletResponse response)        throws java.io.IOException, ServletException {    JspFactory _jspxFactory = null;    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 {      _jspxFactory = JspFactory.getDefaultFactory();      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> HelloWorld </title>\r\n");      out.write("\t</head>\r\n");      out.write("\t<body>\r\n");      out.write("\t\t");			out.println("HelloWorld");		      out.write("\r\n");      out.write("\t</body>\r\n");      out.write("</html>");    } catch (Throwable t) {      if (!(t instanceof SkipPageException)){        out = _jspx_out;        if (out != null && out.getBufferSize() != 0)          out.clearBuffer();        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);      }    } finally {      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);    }  }}

 

执行步骤:

 

 

 

总结

 

  感觉JSP是为了方便编码与维护而对Servlet的一种高层次的包装,它由HTML代码和嵌入其中的Java代码所组成,它的请求响应(服务器解析)过程与ASP/.NET大同小异,可参考如下文章:

http://blog.csdn.net/wang379275614/article/details/9771659