Java学习总结14——复习之Jsp详解
2014-06-21 20:17
281 查看
出处:http://blog.csdn.net/dannor2010/article/details/8443368
JSP是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态技术标准。在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标签,就构成了JSP网页java程序片段可以操纵数据库、重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支Java,也可以访问JSP网页。
JSP全名为java server page,其根本是一个简化的Servlet设计,他实现了Html语法中的java扩张(以 <%, %>形式)。
第一步、用户发送请求,服务器接收到这个请求
第二步、服务器通过请求中的逻辑地址查找服务端的物理地址,检查对应的JSP文件是否存在,如果存在则执行下一步操作,如果不存在,就返回一个 404错误
第三部、当服务器发现JSP文件存在后,会查看该文件是否被修改或者是新创建的,如果是就执行第四步操作,如果不是,则执行第六步操作,执行对 应的java字节码
第四步、得到对应的JSP文件,调用JSP Parser(一种jSp分析程序),编译成Servlet程序
第五步、调用jdk,将程序编译对应的Servlet字节码
第六步、执行已有的对应的字节码。如果字节码是未载入的,则先载入后在执行。
如果去掉中间层次的实现过程,JSP其实就是一个方便写HTML的Servle文件罢了,其实现也是依赖于Servlet。当然其jsp转化为Servlet的过称是服务器(tomcat)实现的,我们不必去纠结于他的实现方式。
例子:
[html] view
plaincopy
<!-- 注释-->
这种注释发送到客户端,但不直接显示,在源代码中可以查看到。
由JSP parse产生的的java代码为:
[java] view
plaincopy
out.write("<!--注释-->");
2、html有表达式的注释
[java] view
plaincopy
<!-- <%= new String("这是在注释中使用java代码")%> -->
这类注释会编译表达式里面的java代码。这种注释发送到客户端,但不直接显示,在源代码中可以查看到。
由jsp parse产生的java代码为:
[java] view
plaincopy
<span style="font-size:14px;">out.write("<!--");
out.print(new java.util.String("这是在注释中使用java代码"));
out.write("-->");</span>
所以说后面不能加分号
3、jsp注释
[java] view
plaincopy
<%--这是JSP注释--%>
<%--new String("这是在jsp注释中使用java代码");--%>
这类注释不会以html形式发送到客户端
无论把 “<%@ page %>”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。
[java] view
plaincopy
<%@page import="java.io.File"%>
<%@page language="java" import="java.util.*",import="java.io.File" pageEncoding="UTF-8"%>
一般情况下我们使用jsp的话都是使用java的,所以language一般不会改动,当我们使用java包的时候需要import包,当然myeclipse在你使用相应包时会给你自动导入。
其中下列包已经被导入了,不需要我们显示的导入:
自定义出现异常后的jsp
[javascript] view
plaincopy
<%@ page errorPage="error.jsp" %>
plaincopy
<% int a=3; %>
<%= a %>
plaincopy
<%! int a = 10; %>
<%
switch(a){
case 10:
System.out.print("代码块输出成功");
break;
default:
System.out.print("-----");
}
%>
plaincopy
<%! int a=3; %>
<%= a %>
虽然说与表达式中的脚本段<% int a=3; %>从表象上看是一样的,但是实际上却有天壤之别,查看下列代码:
[java] view
plaincopy
<%! int a=3; %>
<% int b=3; %>
<%= a-- %>
<%= b-- %>
多次输出,你会发现b的值是一直不变的,但a一直在减少,要理解这个,我们必须去看生成的Servlet。当我们刷新一次浏览器的时候,会调用一次_jspService(request,resp)方法(对于tomcat来说),jsp定义int所产生的a是一个成员变量(加载在内存中了),而脚本语言定义的b是存放在_jspService方法中的,当刷新一次浏览器,b就会重新被int。最终还是由Servlet来体现的。
对于这两种选择,一般我们会使用脚本段,不使用声明。因为我们的网站有很多人访问,如果A访问了,修改了,B访问了,也修改了,这样使我们的声明的变量不可控制(Servlet是单实例的,成员变量只有一个)。
代码1(使用include,调用的jsp文件):
[javascript] view
plaincopy
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%= new Date().toString() %>
代码2(使用include 调用代码一的jsp文件)
[javascript] view
plaincopy
<body>
根目录文件
<%@ include file="task.jsp" %>
<br>
</body>
forward.jsp
[html] view
plaincopy
<body>
This is my forward page. <br>
<jsp:forward page="forwardTo.jsp">
<span style="white-space:pre"> </span><jsp:param value="Neal" name="userName"/>
</jsp:forward>
后面的代码就不会再执行了
</body>
forwardTo,jsp
[html] view
plaincopy
<body>
This is my forwardTo page.
<br>
<%
String userName = request.getParameter("userName");
String outStr = "come in ";
outStr += userName;
out.println(outStr);
%>
</body>
提示:传值方式在include也是一样的
在tomcat产生的forward.java中,你会发现下图的一些代码,因为return,所以forwar后面的就不会执行了
JSP是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态技术标准。在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标签,就构成了JSP网页java程序片段可以操纵数据库、重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支Java,也可以访问JSP网页。
JSP全名为java server page,其根本是一个简化的Servlet设计,他实现了Html语法中的java扩张(以 <%, %>形式)。
执行过程
第一步、用户发送请求,服务器接收到这个请求
第二步、服务器通过请求中的逻辑地址查找服务端的物理地址,检查对应的JSP文件是否存在,如果存在则执行下一步操作,如果不存在,就返回一个 404错误
第三部、当服务器发现JSP文件存在后,会查看该文件是否被修改或者是新创建的,如果是就执行第四步操作,如果不是,则执行第六步操作,执行对 应的java字节码
第四步、得到对应的JSP文件,调用JSP Parser(一种jSp分析程序),编译成Servlet程序
第五步、调用jdk,将程序编译对应的Servlet字节码
第六步、执行已有的对应的字节码。如果字节码是未载入的,则先载入后在执行。
如果去掉中间层次的实现过程,JSP其实就是一个方便写HTML的Servle文件罢了,其实现也是依赖于Servlet。当然其jsp转化为Servlet的过称是服务器(tomcat)实现的,我们不必去纠结于他的实现方式。
JSp语法概述
JSP的代码包含了JSP元素和Template date两类,前者是指将JSP引擎直接处理的部分,这一部分必须符合JAVA语法。否者会导致编译错误(因为就是转化为Servlet后,根据JDK执行java),后者指的是JSP引擎不处理的内容(这些数据会直接返回给客户端)例子:
JSP语法
注释
1、html的一般注释代码:[html] view
plaincopy
<!-- 注释-->
这种注释发送到客户端,但不直接显示,在源代码中可以查看到。
由JSP parse产生的的java代码为:
[java] view
plaincopy
out.write("<!--注释-->");
2、html有表达式的注释
[java] view
plaincopy
<!-- <%= new String("这是在注释中使用java代码")%> -->
这类注释会编译表达式里面的java代码。这种注释发送到客户端,但不直接显示,在源代码中可以查看到。
由jsp parse产生的java代码为:
[java] view
plaincopy
<span style="font-size:14px;">out.write("<!--");
out.print(new java.util.String("这是在注释中使用java代码"));
out.write("-->");</span>
所以说后面不能加分号
3、jsp注释
[java] view
plaincopy
<%--这是JSP注释--%>
<%--new String("这是在jsp注释中使用java代码");--%>
这类注释不会以html形式发送到客户端
编译器指令
编译器指令包括 “包含指令”, “页指令” 和 “taglib指令” 它们包含在 “<%@ %>”卷标里。 两个主要的指令是page与include。page指令
“<%@ page %>”指令作用于整个JSP页面,同样包括静 态的包含文件。但是 “<%@ page %>”指令不能作用于动态的包含文件,可以在一个页面中用上多个 “<%@ page %>”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似 (参照Java Language,import语句引入的是Java 语言中的类),所以此属性就能用多次。无论把 “<%@ page %>”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。
[java] view
plaincopy
<%@page import="java.io.File"%>
<%@page language="java" import="java.util.*",import="java.io.File" pageEncoding="UTF-8"%>
一般情况下我们使用jsp的话都是使用java的,所以language一般不会改动,当我们使用java包的时候需要import包,当然myeclipse在你使用相应包时会给你自动导入。
其中下列包已经被导入了,不需要我们显示的导入:
自定义出现异常后的jsp
[javascript] view
plaincopy
<%@ page errorPage="error.jsp" %>
表达式
[java] viewplaincopy
<% int a=3; %>
<%= a %>
脚本段
[javascript] viewplaincopy
<%! int a = 10; %>
<%
switch(a){
case 10:
System.out.print("代码块输出成功");
break;
default:
System.out.print("-----");
}
%>
JSP声明
[java] viewplaincopy
<%! int a=3; %>
<%= a %>
虽然说与表达式中的脚本段<% int a=3; %>从表象上看是一样的,但是实际上却有天壤之别,查看下列代码:
[java] view
plaincopy
<%! int a=3; %>
<% int b=3; %>
<%= a-- %>
<%= b-- %>
多次输出,你会发现b的值是一直不变的,但a一直在减少,要理解这个,我们必须去看生成的Servlet。当我们刷新一次浏览器的时候,会调用一次_jspService(request,resp)方法(对于tomcat来说),jsp定义int所产生的a是一个成员变量(加载在内存中了),而脚本语言定义的b是存放在_jspService方法中的,当刷新一次浏览器,b就会重新被int。最终还是由Servlet来体现的。
对于这两种选择,一般我们会使用脚本段,不使用声明。因为我们的网站有很多人访问,如果A访问了,修改了,B访问了,也修改了,这样使我们的声明的变量不可控制(Servlet是单实例的,成员变量只有一个)。
include指令
当你在实际编写jsp时,你会发现有些页面内容是一样的,jsp为我们准备了include指令,可以去掉很多我们编码的重复性。代码1(使用include,调用的jsp文件):
[javascript] view
plaincopy
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%= new Date().toString() %>
代码2(使用include 调用代码一的jsp文件)
[javascript] view
plaincopy
<body>
根目录文件
<%@ include file="task.jsp" %>
<br>
</body>
forward
页面转向,当jsp执行到forward时,jsp会进行转向。下面是一个带数据传输的forward代码forward.jsp
[html] view
plaincopy
<body>
This is my forward page. <br>
<jsp:forward page="forwardTo.jsp">
<span style="white-space:pre"> </span><jsp:param value="Neal" name="userName"/>
</jsp:forward>
后面的代码就不会再执行了
</body>
forwardTo,jsp
[html] view
plaincopy
<body>
This is my forwardTo page.
<br>
<%
String userName = request.getParameter("userName");
String outStr = "come in ";
outStr += userName;
out.println(outStr);
%>
</body>
提示:传值方式在include也是一样的
在tomcat产生的forward.java中,你会发现下图的一些代码,因为return,所以forwar后面的就不会执行了
jsp内置对象
JSP 有以下九种内置对象,包括: request,请求对象 ,response,响应对象 ,pageContext,页面上下文对象 session,会话对象application,应用程序对象 out,输出对象 ,config,配置对象 ,page,页面对象 exception,异常对象 。相关文章推荐
- Jsp/Servlet及其相关技术详解复习总结
- 总结3——JSP应用开发详解
- jsp/servlet总结复习
- 总结1——JSP应用开发详解
- hibernate-查询总结、sql复习、HQL、criteria详解
- 数据库复习总结(14)-视图
- jsp以及JDBC总结复习
- Java Web学习总结(14)——JSP基础语法
- Java Web学习总结(14)——JSP基础语法
- java web学习总结14:JSP原理
- 总结4——JSP应用开发详解
- Java学习总结14——JDBC操作详解
- JSP九大内置对象详解(总结+项目源码)
- JSP复习总结
- 《TomCat与Java Web开发技术详解》(第二版) 第六章节的学习总结 ---- JSP技术
- 总结2——JSP应用开发详解
- JSP的复习总结
- 大数据WEB阶段(十三)JSP(一)JSP基础、JSP指令详解、四大域九大隐式对象总结
- Java Web学习总结(14)——JSP基础语法
- JSP中文问题总结