JSP是什么

举报
YuShiwen 发表于 2022/03/31 01:36:58 2022/03/31
【摘要】 一.JSP简介: JSP(全称JavaServer Pages),JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP文件在运行时会被其编译器转换成...

一.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(即生成xxx_jsp.java文件,并把java文件编译为字节码文件xxx_jsp.class).
  2. 在生成的servlet中会有一个response对象,默默的用response.getWriter().write(“html标签”)方法生成html标签。
    证明上述说法:
    如下图的jsp文件:
    在这里插入图片描述
    在这里插入图片描述
    服务器会在tomcat目录下的work/Catalina/localhost/ROOT/org/apache/jsp/中生成.java文件(本人使用mac):
    在这里插入图片描述
    查看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));
     

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

可以看到部分代码段中有很多地方使用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
  1. include 静态包含,一个jsp页面可以包含另一个jsp页面
  • 静态包含 – 两个jsp之间使用静态包含,会被tomcat服务器编译成一个servlet,可以实现脚本互通
<%@ include file = "a.jsp" %>

  
 
  • 1
  1. taglib 用于导入外部资源标签库,jstl
  • 引入外部标签库,通常用于引入jstl标签

四.九个内置对象

1.域对象(4个)

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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处理请求和响应

文章来源: blog.csdn.net,作者:Mr.Yushiwen,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/MrYushiwen/article/details/107582536

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。