欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP是什么

程序员文章站 2022-04-27 11:41:13
一.JSP简介:JSP(全称JavaServer Pages),JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。简单来说:JSP是一个模版引擎,它简化了开发,封装了servlet响应html标签的繁琐代码。JSP技术以Java语言作为脚本语...

一.JSP简介:

  • JSP(全称JavaServer Pages),JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。
  • 简单来说:JSP是一个模版引擎,它简化了开发,封装了servlet响应html标签的繁琐代码。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
    JSP就是一种特殊的servlet.

二.tomcat响应jsp给客户端的原理

tomcat服务器与客户端是两个不同的程序,端口号也不一样,服务器响应请求之后发送数据到客户端只能通过response对象去处理。response对象是servlet中方法的参数。

服务器自动做了一些事情:

  1. 为每个jsp生成一个servlet(对应的java文件,并把java文件编译为字节码文件)
  2. 在生成的servlet中会有一个response对象,默默的用response.getWriter().write(“html标签”)方法生成html标签。
    证明上述说法:
    如下图的jsp文件:
    JSP是什么
    JSP是什么
    服务器会在tomcat目录下的work/Catalina/localhost/ROOT/org/apache/jsp/中生成.java文件(本人使用mac):
    JSP是什么
    查看index_jsp.java文件部分代码:

      out.write("deployer-howto.html\">Deployer</a></li>\n");
      out.write("                        </ul>\n");
      out.write("                    </div>\n");
      out.write("                </div>\n");
      out.write("                <div class=\"col20\">\n");
      out.write("                    <div class=\"container\">\n");
      out.write("                        <h4>Get Involved</h4>\n");
      out.write("                        <ul>\n");
      out.write("                            <li><a href=\"");
      out.write((String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${tomcatUrl}", String.class, (PageContext)_jspx_page_context, null));
      out.write("getinvolved.html\">Overview</a></li>\n");
      out.write("                            <li><a href=\"");
      out.write((String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${tomcatUrl}", String.class, (PageContext)_jspx_page_context, null));
      out.write("source.html\">Source Repositories</a></li>\n");
      out.write("                            <li><a href=\"");
      out.write((String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${tomcatUrl}", String.class, (PageContext)_jspx_page_context, null));
      out.write("lists.html\">Mailing Lists</a></li>\n");
      out.write("                            <li><a href=\"https://wiki.apache.org/tomcat/FrontPage\">Wiki</a></li>\n");
      out.write("                        </ul>\n");
      out.write("                    </div>\n");
      out.write("                </div>\n");
      out.write("                <div class=\"col20\">\n");
      out.write("                    <div class=\"container\">\n");
      out.write("                        <h4>Miscellaneous</h4>\n");
      out.write("                        <ul>\n");
      out.write("                            <li><a href=\"");
      out.write((String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${tomcatUrl}", String.class, (PageContext)_jspx_page_context, null));
      out.write("contact.html\">Contact</a></li>\n");
      out.write("                            <li><a href=\"");
      out.write((String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${tomcatUrl}", String.class, (PageContext)_jspx_page_context, null));
     

可以看到部分代码段中有很多地方使用write方法向客户端传输html标签。
证毕

三.JSP三大指令

  1. page 用于声明jsp : jsp=html+page指令
  • contentType=“text/html;charset=UTF-8” 指定jsp文件的mime类型和字符集
  • import=“java.util.*” 为jsp的脚本中的Java代码去导包
  • errorPage=“500.jsp” 如果当前页面发生异常,就跳转到500.jsp中
  • isErrorPage=“true” 承认自己是不是错误处理页面,如果为true就可以使用exception内置对象
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %>
  1. taglib 用于导入外部资源标签库,jstl
  • 静态包含 – 两个jsp之间使用静态包含,会被tomcat服务器编译成一个servlet,可以实现脚本互通
<%@ include file = "a.jsp" %>
  1. include 静态包含,一个jsp页面可以包含另一个jsp页面
  • 引入外部标签库,通常用于引入jstl标签

四.九个内置对象

1.域对象(4个)

  • pageContext
  • request
  • session
  • application
//最小的域对象,仅限于当前页面
pageContext.setAttribute("name","李白");
//request域对象,使用范围限于转发之间的页面
request.setAttribute("name","韩信");
//session域对象,范围是一次会话,浏览器或服务器不关闭称为一次会话,该工程下的任何jsp页面都可以取到
session.setAttribute("name","孙尚香");
//application域对象,范围最大,只要服务器不关,那么存的值一直有效
application.setAttribute("name","马可波罗");

2.其它对象

  • response
  • out
  • page
  • exception
  • config

五.JSP发展史和mvc

JavaWeb发展史

  1. 只有servlet,如果响应动态资源,必须使用response.writer()去输出大量的标签
  2. jsp出生和繁荣,完全依赖jsp,省略了servlet,优点:便于开发,缺点:耦合度高,代码非常不清晰
  3. mvc模式,jsp和servlet共存,jsp中只有少量的java代码,主要还是用于页面展示,核心功能放在servlet中

MVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

  • m:model 模型层,泛指service层,dao层和javaBean实体类
  • v:view 视图层,使用jsp展示数据
  • c:controller 控制层,使用servlet处理请求和响应

本文地址:https://blog.csdn.net/MrYushiwen/article/details/107582536