• JSP概述


     

    一、JSP起源

    在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。如果使用Servlet程序来输出只有局部内容需要改变的网页,其中所有静态内容也需要程序员用Java代码产生,整个Servlet程序代码就非常臃肿,编写和维护都非常困难。为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP技术作为解决方案。

     

    二、为什么要用JSP

    JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用,普通静态HTML页面的方式编写。
    Java Server Page:Java服务器端网页,在HTML页面中编写Java代码的页面,扩展名必须是.jsp。

     

    三、JSP相关认识

    JSP页面是由HTML语句和前台在其中的Java代码组成的一个普通的文本文件,JSP页面的文件扩展名必须为.jsp。
    在JSP页面中编写的Java代码需要嵌套在<%和%>中,嵌套在<%和%>之间的Java代码被称之为脚本片段,没有嵌套在<%和%>之间的内容被称为JSP模板元素。
    JSP中的Java代码可以使用out.println()语句将其他Java程序代码产生的结果字符串输出给客户端,也可以使用System.out.println()语句将他们打印到控制台。
    JSP文件就行普通的HTML文件一样,他们可以放置在WEB应用程序中的除了WEB-INF及其子目录外的其他任何目录中,JSP页面的访问路径与普通HTML页面的访问路径形式完全一样。
    在JSP页面中也可以使用一种称之为JSP表达式的元素,只需要输出的变量或者表达式直接封装在<%=和%>之中,就可以向客户端输出这个变量或表达式的运算结果。
    在JSP表达式中嵌套的变量或者表达式后面不能有分号,如果没有页面会报错。

     

    四、案例分析

    ♦搭建一个动态的Web工程
    JSP学习篇之概述的照片 - 1
    ♦我们针对上面相关认识里面的一些描述,模拟JSP页面的相关操作,例如:
    ①JSP页面中编写的Java代码需要嵌套在<%和%>之间

    <body>
    	<%
    		Date date = new Date();
    		System.out.println(date);
    	%>
    </body>

    ②JSP中的Java代码可以使用out.println()语句输出

    <body>
    	<%
    		Date date = new Date();
    		out.println(date);
    	%>
    </body>

    启动服务,访问http://localhost:8080/JSP/index.jsp,发现时间打印到了界面上
    JSP学习篇之概述的照片 - 3
    ③JSP表达式中嵌套的变量或者表达式后面不能有分号
    JSP学习篇之概述的照片 - 5
    加了分号,报错。
    ④JSP编译后其实是Servlet,这个怎么理解呢?
    我们找到发布这个JSP工程的Tomcat目录,找到apache-tomcat-7.0.42workCatalinalocalhostJSPorgapachejsp目录,发现该目录下生成了两个文件
    JSP学习篇之概述的照片 - 7
    打开index_jsp.java文件,找到我们在JSP<% %>中写的代码

          out.write("
    ");
          out.write("<body>
    ");
          out.write("	");
    
    		Date date = new Date();
    		//System.out.println(date);
    		out.println(date);
    	
          out.write("
    ");
          out.write("</body>
    ");
          out.write("</html>
    ");
        } catch (java.lang.Throwable t) {

    您会发现,这个index_jsp.java源文件,其实是由我们的index.jsp这个文件生成的。

    public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
        implements org.apache.jasper.runtime.JspSourceDependent {
    
    private static final javax.servlet.jsp.JspFactory _jspxFactory =
              javax.servlet.jsp.JspFactory.getDefaultFactory();

    生成的Java源文件继承了HttpJspBase,然后实现了JspSourceDependent接口,而HttpJspBase继承自 HttpServlet,本质就是一个Servlet,那么可以说明index_jsp.java其实也是一个Servlet,由jsp文件翻译而来。
    ⑤放置在WEB应用程序中的除了WEB-INF及其子目录外的其他任何目录中
    JSP学习篇之概述的照片 - 9
    我们在WEB-INF目录下面新建一个test.jsp文件,并且新建一个test目录在其目录下面也放置test.jsp文件,启动服务。
    发现http://localhost:8080/JSP/WEB-INF/test/test.jsp和http://localhost:8080/JSP/WEB-INF/test.jsp都无法访问

     

    五、总结

    原理:每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序,编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序
     
    赢在格局,不失风雅。
  • 相关阅读:
    websocket协议解决消息发送问题 Could not decode a text frame as UTF-8.
    成功解决internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module 'minimatch'
    FastDFS客户端与自定义文件存储系统
    fastdfs 中client.conf 文件
    centos 中 redis 的安装
    redis安装成功后get: command not found
    Shell基础知识(二)
    Shell基础知识(一)
    binary search模板总结
    配置远程jupyter notebook
  • 原文地址:https://www.cnblogs.com/Joey-zy1024/p/9266424.html
Copyright © 2020-2023  润新知