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页面的相关操作,例如:
①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表达式中嵌套的变量或者表达式后面不能有分号
加了分号,报错。
④JSP编译后其实是Servlet,这个怎么理解呢?
我们找到发布这个JSP工程的Tomcat目录,找到apache-tomcat-7.0.42\work\Catalina\localhost\JSP\org\apache\jsp目录,发现该目录下生成了两个文件
打开index_jsp.java文件,找到我们在JSP<% %>中写的代码
out.write("\r\n");
out.write("<body>\r\n");
out.write("\t");
Date date = new Date();
//System.out.println(date);
out.println(date);
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>\r\n");
} 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及其子目录外的其他任何目录中
我们在WEB-INF目录下面新建一个test.jsp文件,并且新建一个test目录在其目录下面也放置test.jsp文件,启动服务。
发现http://localhost:8080/JSP/WEB-INF/test/test.jsp和http://localhost:8080/JSP/WEB-INF/test.jsp都无法访问