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程序
 
赢在格局,不失风雅。
原文地址:https://www.cnblogs.com/Joey-zy1024/p/9266424.html