JSP和Servlet

          jspservlet的扩展,在没有jsp之前,就已经出现了servlet。servlet是利用输出流动态生成html页面,包括每个html标签和每个在html页面中出现的内容

          jsp通过在标准的html页面中插入java代码,其静态的部分无需java程序控制,只有那些需要从数据库读取并根据程序动态生成信息时,才使用java脚本控制.

          简单说,jspservlet的一种特殊形式,每个jsp页面就是一个servlet实例,因为jsp页面由系统编译成servlet,servlet再负责响应用户请求。jsp也可以说成servlet的一种简化,因为使用jsp时,其实还是使用servlet,因为web应用中的每个jsp页面都会由servlet容器生成对应的servlet。具体流程如下图所示:


       以Tomcat为例,对于Tomcat而言,jsp页面生成的servlet放在work路径对应的web应用下。

例如之前做过的商城SSH,因为我用的是myeclipse自带的Tomcat,对应的路径如下图:

 

       当启动Tomcat之后,可以在Tomcat\work\Catalina\localhost\***\org\apache\jsp目录下找到如下文件:**_jsp.java**_jsp.class。这两个文件都是Tomcat生成的,Tomcat根据JSP页面生成对应ServletJava文件及class文件。如下图:


   查看**_.java文件,可以看出上文提到的输出流生成页面

bottom.jsp的代码:

<%@ page language="java" pageEncoding="UTF-8"%>
<html>
	<head>
		<meta http-equiv="Content-Language" content="zh-cn">
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<style type="text/css">
		<!-- body { background-color: #FFFFFF; margin: 0px;}
		body,td,th { font-size: 12px; color: #000000; }
		--> 
		</style>
	</HEAD>
	<body MS_POSITIONING="GridLayout">
		<table width="100%" border="0" cellspacing="0" cellpadding="10" height="64">
			<tr>
				<td align="center" width="100%" style= valign="top" background="${pageContext.request.contextPath}/images/bt_02.jpg">商城管理平台       <br>
				<font class="font12">
				<a class="a03" target="_blank" href="mailto:sarft@chinasarft.gov.cn">
				<font color="#000000"><br>
��</font></a></font></td>
			</tr>
		</table>
	</body>
</HTML>
bottom_jsp.java的代码:

package org.apache.jsp.admin;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class bottom_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

  private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();

  private static java.util.List _jspx_dependants;

  private javax.el.ExpressionFactory _el_expressionfactory;
  private org.apache.AnnotationProcessor _jsp_annotationprocessor;

  public Object getDependants() {
    return _jspx_dependants;
  }

  public void _jspInit() {
    _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
    _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
  }

  public void _jspDestroy() {
  }

  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;charset=UTF-8");
      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("\r\n");
      out.write("<html>\r\n");
      out.write("\t<head>\r\n");
      out.write("\t\t<meta http-equiv=\"Content-Language\" content=\"zh-cn\">\r\n");
      out.write("\t\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
      out.write("\t\t<style type=\"text/css\">\r\n");
      out.write("\t\t<!-- body { background-color: #FFFFFF; margin: 0px;}\r\n");
      out.write("\t\tbody,td,th { font-size: 12px; color: #000000; }\r\n");
      out.write("\t\t--> \r\n");
      out.write("\t\t</style>\r\n");
      out.write("\t</HEAD>\r\n");
      out.write("\t<body MS_POSITIONING=\"GridLayout\">\r\n");
      out.write("\t\t<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"10\" height=\"64\">\r\n");
      out.write("\t\t\t<tr>\r\n");
      out.write("\t\t\t\t<td align=\"center\" width=\"100%\" style= valign=\"top\" background=\"");
      out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${pageContext.request.contextPath}", java.lang.String.class, (PageContext)_jspx_page_context, null, false));
      out.write("/images/bt_02.jpg\">商城管理平台       <br>\r\n");
      out.write("\t\t\t\t<font class=\"font12\">\r\n");
      out.write("\t\t\t\t<a class=\"a03\" target=\"_blank\" href=\"mailto:sarft@chinasarft.gov.cn\">\r\n");
      out.write("\t\t\t\t<font color=\"#000000\"><br>\r\n");
      out.write("��</font></a></font></td>\r\n");
      out.write("\t\t\t</tr>\r\n");
      out.write("\t\t</table>\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)
          try { out.clearBuffer(); } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}

        根据上面的JSP页面工作原理图,可以得到如下结论: JSP文件必须在JSP服务器内运行。JSP文件必须生成Servlet才能执行。每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成ServletJSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。**.jsp页面中的每个字符都由index.java文件的输出流生成.

【jspservlet的比较】

       1.两者构成方式不同,其实主要是在比较代码风格,因为servlet完全是java程序代码构成,jsphtml代码和jsp标签构成。

       2.单看代码也可以看出,jsp更像是在html页面中插入java代码,而servlet更像是在java逻辑代码中拼接页面,所以jsp侧重页面的显示,servlet侧重控制逻辑。

       3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.

       4.jsp本质上就是servletjspServlet的一种简化。jsp经编译后就是一种类Servlet

       5.Servlet主要用于转向,将请求转向到相应的jsp页面。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值