1 什么是JSP
HTML + java代码 + jsp动态标签 == JSP(Java Server Pages)
在静态页面上添加动态信息就可以了,如果是Servlet还需要一行一行的输出。
通常在前台开发人员给出静态页面后,后台开发人员只需在静态页面中添加动态信息即可,而不用再使用Servlet一行一行的去输出了。
2 JSP"真身":Servlet当客户请求的jsp页面时,服务器会查看jsp对应的Servlet是否存在,(就是在Tomcat解压包下面的\work\Catalina\localhost\工程名\org\apache\jsps是否生成对应的xxx_jsp.java和xxx_jsp.class这两个文件。)如果存在,那么直接调用Servlet的service()方法来处理请求。如果不存在,那么服务器会先把JSP编译成.java,再把.java编译成.class,然后调用service()方法。当这个JSP页面,第二处理请求时,就直接调用直身的service()方法了。
在work\Catalina\localhost\工程名\org\apache\jsp下生成xxx_jsp.java和xxx_jsp.class这两个文件
从上面的代码中,我们可以看出,xxx_jsp.java是继承于HttpJspBase,而HttpJapBase又继承于HttpServlet。
启动服务器,没访问jsp之前work\工程名里面没有内容。
JSP是Servlet,JSP与我们编写的Servlet有什么不同呢?
通常我们编写的Servlet就不需要输出HTML代码了,而是转发到JSP页面。
即Servlet不再负责显示页面,而由JSP来完成!而Servlet专注与控制层内容!
在“真身”中,所有的静态内容会被输出。例如<html>就是静态内容,它对应“真身”中的out.write(“<html>”)。
3 jsp中的java代码块
JSP中的java代码块就是最常见的动态信息。它分为三种:
①<%...%>:代码片段。代码片段会原封不动的出现在真身中(xxx_jsp.java中)。正常的Java代码都可以在代码片段中出现;
②<%=...%>:表达式。表达式会在“真身”中输出,例如:<%=a%>,对应真身中的out.print(a)。
只能出现常量、变量,以及有返回值的方法调用,而且不能出现分别!即在out.println()的合法参数都可以!
<%=a%>对应out.println(a);
<%=”a”%>对应out.println(“a”);
<%=fun()%>对应out.println(fun());
<%=a;%>对应out.println(a;);,所以出错;
<%=System.out.println(“hello”)%>对应out.println(System.out.println(“hello”)),所以出错。
③<%!...%>:声明。声明对应“真身”中的属性和方法!例如<%! int serverInstanceVariable = 1; %>
静态的数据成员也可以如此定义。
另外一种理解(百度百科)
-
一种是声明标签,在JAVA SERVLET的类体中放入一个变量的定义。静态的数据成员也可以如此定义。
-
<%! int serverInstanceVariable = 1; %>
-
-
一种是脚本标签,在JAVA SERVLET的类的_jspService()方法中放入所包含的语句。
-
<% int localStackBasedVariable = 1; out.println(localStackBasedVariable); %>
-
-
一种是表达式标签,在JAVA SERVLET的类中放入待赋值的表达式,表达式注意不能以分号结尾。
-
<%= "expanded inline data " + 1 %>(表达式会在JAVA SERVLET中输出)
-
4 JSP的两种注解
其中JSP只有一种注释:<%-- … --%>,注释中的内容会被JSP编译系统忽略!
HTML的注释:<!-- … -->,因为最终向客户端响应的内容还是HTML,所以在HTML注释中的内容还是看不到的。
但是可以通过在浏览器中右键à查看源代码,查看<!-- … -->中的内容。
1 <!-- <%=String.format("%tF %<tT", new Date())%> -->(xxx.jsp) (xxx_jsp.java) (源码) 2 <%-- <%=String.format("%tF %<tT", new Date())%> --%> <%-- … --%>,注释中的内容会被JSP编译系统忽略,不编译 |