第4章 JSP技术基础知识
JSP(Java Server Page)是SUN公司开发的一种服务器端的脚本语言,自从1999年推出以来,逐步发展为开发Web应用一项重要技术。JSP可以嵌套在HTML中,而且支持多个操作系统平台,一个用JSP开发的Web应用系统,不用做什么改动就可以在不同的操作系统中运行。
在本章接下来的内容中,首先将简单介绍JSP的运行原理和基本语法,然后重点介绍在实际开发过程中技巧和方法。
4.1 JSP简介
JSP本质上就是把Java代码嵌套到HTML中,然后经过JSP容器的编译执行,可以根据这些动态代码的运行结果生成对应的HTML代码,从而可以在客户端的浏览器中正常显示。在这个小节中将介绍JSP的运行原理、JSP的优点和其运行环境的搭建。
4.1.1 运行原理
因为本书讲述的主要内容就是基于JSP的Java Web应用程序开发技术,为了是读者对JSP有一个更加深入的了解,在这里有必要对JSP的运行机制、原理进行深入的介绍。
如果JSP页面是第一次被请求运行,服务器的JSP编译器会生成JSP页面对应的Java代码,并且编译成类文件。当服务器再次收到对这个JSP页面请求的时候,会判断这个JSP页面是否被修改过,如果被修改过就会重新生成Java代码并且重新编译,而且服务器中的垃圾回收方法会把没用的类文件删除。如果没有被修改,服务器就会直接调用以前已经编译过的类文件。
下面就是一个简单的JSP页面,在这个页面中没有任何动态代码,其功能是在页面显示一句话,这个JSP也页面的具体代码如下。
//--------文件名:Simple.jsp--------------------
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
这是一个简单的JSP页面示例
上面这个JSP页面在被请求的时候,Web服务器中的JSP编译器会生成对应的Java文件,上面这个JSP程序对应的Java代码如下所示。
//--------文件名:Simple_jsp.java--------------------
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.util.*;
public final class Simple_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
private static java.util.Vector _jspx_dependants;
public java.util.List getDependants() {
return _jspx_dependants;
}
public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException {
JspFactory _jspxFactory =null;
PageContext pageContext =null;
HttpSession session =null;
ServletContext application =null;
ServletConfig config =null;
JspWriter out =null;
Object page =this;
JspWriter _jspx_out =null;
PageContext _jspx_page_context =null;
try {
_jspxFactory =JspFactory.getDefaultFactory();
response.setContentType("text/html;charset=gb2312");
pageContext =_jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context =pageContext;
application =pageContext.getServletContext();
config =pageContext.getServletConfig();
session =pageContext.getSession();
out =pageContext.getOut();
_jspx_out =out;
out.write("\r\n");
out.write("\r\n");
out.write("
\r\n");out.write("
out.write(" \r\n");
out.write("
\r\n");out.write(" 这是一个简单的JSP页面示例
\r\n");
out.write(" \r\n");
out.write("\r\n");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out !=null && out.getBufferSize() !=0)
out.clearBuffer();
if (_jspx_page_context !=null) _jspx_page_context.handlePageException(t);
}
} finally {
if (_jspxFactory !=null) _jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
上面这段代码就是Simple.jsp所对应的Java代码,假如你的Tomcat安装路径为C:\Tomcat5.0,Web 应用程序发布的名称为chap4,那么可以在C:\Tomcat 5.0\work\Catalina\localhost\chapt4\org\apache\jsp这个目录下找到JSP所对应的Java文件和编译出来的类文件。
上面这段程序再本质上就是一个Servlet,把所有页面的显示的内容都用out对象打印出来,包括每个HTML标签,所以说JSP页面本质上就是Servlet的一个种化身,在JSP程序种离不开Servlet的影子。这段代码的具体语法可以不必深究,这些工作都是有服务器中的JSP编译器来完成,这个过程是自动完成的,无需手工干预。
注意:只用被请求过的页面才能生成对应的Java文件,当JSP页面被修改后,再次对这个页面进行请求才会重新生成对应的Java文件。
4.1.2 选择JSP的原因
在Web应用开发中,可供选择的动态页面语言技术有很多,例如PHP,ASP,JSP等,在这些动态页面语言中,JSP凭借其自身的优点成为开发人员最喜欢的语言之一。下面列出的几条就是开发人员钟爱JSP的重要原因。
JSP就是在HTML中嵌入Java代码,所以在本质上JSP程序就是Java程序,JSP程序继承了Java 的一切优点。JSP程序有严格的Java语法和丰富的Java类库支持。
JSP页面在服务器中都会被JSP编译器编译成对应的Servlet,所以就拥有Java跨平台的优点,所有的JSP程序,无需改动就可以方便地迁移到其他操作系统平台,这是在其他动态脚本语言中所无法想象的。
JSP中可以使用JavaBean进行逻辑封装,这样就可以实现逻辑功能代码的重用,从而大大提高系统的可重用性,同时也提高了程序的开发效率。
JSP程序容易上手,如果有HTML和Java的基本知识,那么学习JSP程序就没有任何难度。
在Java领域,开源的项目越来越多,这些开源项目是全世界Java爱好者的心血的结晶,在我们的JSP程序中可以非常方便地使用这些开源工具。在开源项目的支持上,JSP更是其他动态语言不能相比的。
开发者从对Java的热爱延伸到对JSP的热爱,同时JSP又是J2EE体系中最重要,而且有是最基础的一个组成部分,如果要体验J2EE带来的开发效率和优势,学习JSP是一个非常有效的入门方式。
在接下来的章节将开始进入JSP的精彩世界。
4.1.3 环境搭建
要运行JSP程序,必需为其提供一个JSP容器,也就是需要一个Web服务器。支持JSP的服务器非常多,Tomcat、Resin、Weblogic、WebSphere等对JSP的支持都非常好,但是由于Weblogic和WebSphere 都是功能非常强大的重量级服务器,而且价格昂贵,对计算机的硬件配置要求也比较高,所以在一般情况下,如果只用到JSP的技术,是没有必要选择这两个服务器的。
一般情况下我们可以选择Tomcat或者Resin作为JSP容器,这两个服务器对JSP的支持都非常好,而且都是开源的,可以免费使用,同时它们对计算机的硬件配置要求也是非常低的。这两个服务器任选其一都可以满足所有JSP开发的需要,在这里我们选择Tomcat作为JSP容器。
Tomcat的运行需要JDK的支持,所以在安装Tomcat的时候需要提前安装JDK,其中JDK的安装方法在本书第二章中有详细的介绍。
Tomcat是apache的一个开源项目,可以在其官方网站http://tomcat. https://www.doczj.com/doc/a813877728.html,下载Tomcat的各个版本,在这个网站上提供Tomcat各个版本下载,下载的文件格式有zip、tar.gz、exe三种格式,其中zip 格式只需要解压到某个目录,然后在环境变量中设置路径即可运行,这种方法比较灵活,但是环境变量设置错误Tomcat就不能运行。tar.gz格式是Unix、linux系统上的压缩格式。exe格式是Windows操作系统中的安装程序,这中格式的安装程序提供详细的安装向导,安装过程比较容易,在这里我们选择exe 的安装个格式。
(1)下载jakarta-tomcat-5.0.28.exe安装文件,运行这个文件就会进入如图4.1所示的安装界面。
(2)在图4.1中选择“Next”,进入如图4.2所示的安装协议界面。
图4.1 Tomcat安装初始界面图4.2 Tomcat安装协议选择界面
(3)在图4.2中选择“I Agree”进入如图4.3所示的组件选择界面,如果不接受协议安装程序就会退出。
(4)在如图4.3的界面中,可以选择安装Tomcat的组件,其中安装类型选择Normal即可,这时候下面的几个组件会被自动选中,然后选择“Next”就可以进入如图4.4的安装路径选择界面。
图4.3 Tomcat组件选择界面图4.4 Tomcat安装路径选择界面
(5)在如图4.4中选择Tomcat将要安装到的目标路径,选择“Next”进入如图4.5所示界面。
(6)在如图4.5的界面中,可以选择Tomcat的访问端口,可以采用默认端口是8080,在上面这个界面中还可以设置Tomcat管理员的用户名和密码,利用这个管理员账号可以管理Tomcat的一些运行配置等信息。端口和管理员账号设置完成后选择“Next”进入如图4.6所示的JVM选择界面。
图4.5 Tomcat端口选择和管理员密码设置界面图4.6 JVM选择界面
(7)在图4.6中的JVM路径不用选择,如果JDK已经正确安装配置的话,Tomcat的安装程序可以自从系统变量中读出这个路径,无需手动配置。选择“Install”开始安装,安装完成以后会出现如图4.7所示的安装完成界面。
图4.7 Tomcat完成安装提示界面
(8)在图4.7的界面中选择“Finish”完成安装。
(9)Tomcat的启动方式后好多中,最基本的是在Tomcat安装目录下的bin文件夹中的startup.bat、shutdown.bat,其中startup.bat可以启动Tomcat服务器,shutdown.bat可以关闭Tomcat服务器。运行startup.bat,如果可以看到如图4.8所示的启动信息说明Tomcat启动成功,
图4.8 Tomcat启动信息
(10)当看到如图4.8所示“Server startup in ****** ms”的时候说明Tomcat已经成功启动,打开浏览器,在地址栏中输入http://localhost:8080/,如果出现如图4.9所示的界面说明Tomcat已经成功安装。
(11)Tomcat还有一个图形界面的管理工具,选择“程序”|“所有程序”|“Apache Tomcat 5.0”| “Monitor Tomcat”,就会出现如图4.10所示的图形管理界面。
图4.9 Tomcat默认欢迎界面图4.10 Tomcat图形管理界面
(12)如图4.10的管理界面中,“General”选项卡中,“Start”可以启动Tomcat,“Stop”可以关闭Tomcat,“Pause”可以暂停Tomcat,“Restart”可以重新启动“Tomcat”。
(13)在“logging”选项卡中可以对Tomcat的日志信息进行配置,在“Java”选项卡中可以对JVM 进行配置。
注意:如果在启动Tomcat的过程中出现了“Address already in use: JVM_Bind”这个错误,则错误的解决方法有两种,一种是关闭其他正在运行的Tomcat程序,另一种解决方法就是修改Tomcat的端口,可以在Tomcat安装目录下的conf目录下找到server.xml的文件,在这个文件中搜索“ 4.2 JSP基本语法 本书的重点内容是介绍基于JSP的Web开发技术,对于Java的语法在此不做详细的介绍,这里所涉及JSP语法指的是在JSP中所特有的语法规范,在接下来的章节中将假设读者已经了解Java的基本语法,只介绍JSP的结构、变量声名、表达式、动作、指令等JSP的特有语法。如对Java语法有疑问的读者可以参考相关语法书籍。 4.3 程序结构 JSP就是把Java代码嵌套在HTML中,所以JSP程序的结构可以分为两大部分:一部分是静态的HTML代码;另一部分是动态的Java代码和JSP自身的标签和指令;当JSP页面第一次被请求的时候,服务器的JSP编译器会把JSP页面编译成对应的Java代码,根据动态Java代码执行的结果,生成对应的纯HTML的字符串返回给浏览器,这样就可以把动态程序的结果展示给用户。下面就是一个简单的JSP程序的代码,现在分析其基本结构。 //--------文件名:Add.jsp-------------------- <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <% int first =0; int second =0; if(request.getParameter("first")!=null&&request.getParameter("first").length()>0) { first =Integer.parseInt(request.getParameter("first")); } if(request.getParameter("second")!=null&&request.getParameter("second").length()>0) { second =Integer.parseInt(request.getParameter("second")); } %>
function check()
{
if(this.document.forms[0].first.value.length==0)
alert("请输入第一个整数!");
else if(this.document.forms[0].second.value.length==0)
alert("请输入第二个整数!");
else if (isNaN(this.document.forms[0].first.value))
alert("输入的第一个数字必须是整型数据");
else if (isNaN(this.document.forms[0].second.value))
alert("输入的第二个数字必须是整型数据");
else
this.document.forms[0].submit();
}
JSP复习题 一、选择题 1、JSP页面经过编译之后,将创建一个(B)。 A. applet B. servlet C. application D. exe文件 2、在JSP中,( A )动作用于将请求转发给其他JSP页面。 A.forward B.include https://www.doczj.com/doc/a813877728.html,eBean D.setProperty 3、对于声明<%!声明%>的说法错误的是:C A、一次可声明多个变量和方法 B、一个声明仅在一个页面中有效 C、声明的变量将作为局部变量 D、声明的变量将在JSP页面初始化时初始化 4、当多个用户请求同一个JSP页面时,Tomcat服务器为每个客户启动一个(B) A、进程 B、线程 C、程序 D、服务。 5、阅读下面代码片段: RequestDispatcher dispatcher=request.getRequestDispatcher("a.jsp"); dispatcher.forward(request,response); 关于该段代码的作用,下列叙述哪项是正确的?( B ) A、页面重定向到a.jsp页面 B、将请求转发到a.jsp页面 C、从a.jsp定向到当前页面 D、从a.jsp转发到当前页面 6.(A)注释可以在服务器和客户端都可见。 A.HTML B.JSP C.JavaScript D.page 7、以下对象中的(D )不是JSP的内置对象。 A、request B、session C、application D、bean 8、对数据库表中记录的字段值进行更新,可以使用(B )方法 A、executeQuery() B、executeUpdate() C、next() D、getConnection() 9、下面哪一项对Servlet描述错误?( C ) A. Servlet是一个特殊的Java类,它必须直接或间接实现Servlet接口 B. Servlet接口定义了Servelt的生命周期方法 C. 当多个客户请求一个Servlet时,服务器为每一个客户启动一个进程 D. Servlet客户线程调用service方法响应客户的请求 10、以下哪个对象提供了访问和放置页面中共享数据的方式(D) A、pageContext B、response C、request D、session 2、当服务器上的第一个JSP页面被第一次请求执行时,服务器上的JSP引擎首
题型 一、单项选择题(共10分) 二、填空题(共15分) 三、判断题(共10分) 四、简答题(共30分) 五、设计题(共35分) 考试范围 1-7章 重点4//5/6 复习基础:每章习题,每章实训 知识点 ●Tomcat和Eclipse的使用 ●JSP的基本元素、工作流程 ?JA V A程序片<% %> ?JSP表达式<%= %> ●JSP指令标记<%@ page contentType=”” import=””> ?指令标记中常用属性的含义 ●JSP动作标记 ? id=””> Jsp技术整理 1.web 分为静态页面和动态页面 静态页面-----html页面 动态页面----动态页面是以ASP、PHP、JSP、Perl、或CGI等编程语言制作的,与服务器有交互的页面。 (动态页面技术通常会用到web容器) Web容器 使用运行在服务器上的一个程序,用来解析动态请求,然后调用相应的代码,返回响应。 对于jsp来说,使用最多的是tomcat 2.servlet Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP 服务器上的数据库或应用程序)的中间层。 Servlet创建时会写入web.xml 示例: JSP要点知识整理
JSP编程技术期末理论考试A卷及答案 一、选择题(每小题1分,共40分) 1.当多个用户请求同一个JSP页面时,Tomcat服务器为每个客户启动一个(B)A)进程B)线程C)程序D服务。 2.不是JSP运行必须的是(D) A)操作系统 B)JavaJDK C)支持Jsp的Web服务器 D)数据库 3.下列说法哪一项是正确的(C) A)Apache用于ASP技术所开发网站的服务器 B)IIS用于CGI技术所开发网站的服务器 C)Tomcat用于JSP技术所开发网站的服务器 D)WebLogic用于PHP技术所开发网站的服务器 4.下面描述错误的是(C) A)HTML文件必须由开头,标记结束。 B)文档头信息包含在
与之间。 C)在和之间可以包含JSP各章知识点总结 去年考试题型: 一、选择题(2分×15=30分) 二、填空题(1分×15=15分) 三、读程序写结果(3分×5=15分) JavaBean(2分×10=20分) 四、程序填空 数据库(2分×10=20分) 第一章 JSP简介 1.8080是Tomcat服务器默认占用的端口。 2.如果Tomcat服务器的安装目录是:D\apache—tomcat—5.5.20\,那么Tomcat的web服务目录的根目录是: D\apache—tomcat—5.5.20\webapps\Root 3.用户访问JSP页面,在浏览器键入Tomcat的IP地址、端口号、JSP页面的名字 例如:IP:192.168.1.200 名字:example 1 则用户在浏览器中键入的内容为:http://192.168.1.200:8080/ example 1 4. Tomcat服务器安装目录的webapps目录下的任何一个子目录都可以作为一个web服务目录 5.JSP与Java Servlet的关系 JSP技术屏蔽了Servlet对象的创建过程,使得Web程序设计者只需关心JSP页面本身的结构和设计好的各种标记,比如使用HTML标记设计页面的视图,使用Javabean标记有效地分离页面视图和数据库。 第二章 JSP语法 1.JSP页面:在传统的HTML页面文件中加入Java程序片和JSP标记就构成了一个JSP页面普通的HTML标记符 JSP标记,如指令标记、动作标记 2.JSP页面的组成变量和方法的声明 Java程序片 Java表达式 3.在“<%!”和“%>”标记符号之间声明变量和方法 4.成员变量:在“<%!”和“%>”标记符之间声明变量,这些变量称为JSP页面的成员变量 (只被初始化一次,被所有共享) 局部变量:在“<%!”和“%>”之间插入Java程序片,在程序片中声明的变量称为JSP页面
B1.{JSP-Servlet题目}表示“资源移动”的状态码是。(选择1项) A)200 B)302 C)400 D)500 A2.{JSP-Servlet题目}哪一个对象可以用于获得浏览器发送的请求。(选择1项) A)HttpServletRequest B)HttpServletResponse C)HttpServlet D)Http B3.{JSP-Servlet题目}如果不希望在JSP页面中存取HTTP会话,应该如何设定page指令?(选择1项) A)<%pagesession="disabled"%> B)<%pagesession="false"%> C)<%pagesession="true"%> D)<%pagedisablesession="true"%> CD4.{JSP-Servlet题目}在Servlet的生命周期中,容器只调用一次的方法是。(选择2项) A)service B)getServletConfig C)init D)destroy C5.{JSP-Servlet题目}在使用服务器端的会话管理时,通过什么方法标识会话。(选择1项) A)IP地址 B)Cookie C)Session id D)请求头 A6.{JSP-Servlet题目}下列哪个为JSP的小脚本的标签?(选择1项) A)<%%> B)<@%> C)<%!%> D)<%--%> C7.{JSP-Servlet题目}下面哪一个不是
1、HTML是超文本标识语言,它是一种纯文字的文档。() 2、HTML语句是不区分大小写的。() 3、在Java语言中数据类型进行自动转换的规则是将占内存大的,转换为占内存小的。() 4、在JSP网页中可以没有HTML语句。() 5、Forward动作可以把当前网页重新导向另外的一个服务器。() 6、SQL 语句只能用于JSP网页设计中()。 7、Include动作和Include指令执行的结果是相同的。() 8、能够为JDBC提供数据库支持的厂商有IBM、Oracle、Sybase、Informix等公司。() 9、动态网页技术ASP是由IBM公司开发的。() 10、JSP源程序可以在记事本中进行编辑。() 1、√ 2、√ 3、× 4、√ 5、× 6、× 7、× 8、√ 9、× 10、√ 1.动态网页和静态网页的根本区别在于服务器端返回的HTML文件是事先存储好的还是由动态网页程序生成的。() 2.Web开发技术包括客户端和服务器端的技术。() 3.Tomcat和JDK都不是开源的。() 4、session对象是HttpSession接口类的实例,由客户端负责创建和销毁,所以不同客户的session对象不同。( ) 5、Requestdispatcher的forward方法和include方法的区别是forward可以到另外一个web应用的资源,而include只能到同一web的另外资源。() 6、如果一个Sevlet有多个Filter,则优先级最高的Filter先执行。() 7.在HTML页面文件中加入JSP脚本元素、JSP标记等就构成了一个JSP页面。() 8.JSP引擎执行字节码文件的主要人物之一是直接将HTML内容发给客户端。 () 9.JSP页面中的变量和方法声明(Declaration)、表达式(Expression)和Java 程序片(Scriptlet)统称为JSP标记。() 10.JSP页面中的指令标记、JSP动作标记统称为脚本元素。() 1、√ 2、√ 3、× 4、√ 5、× 6、× 7、√ 8、√ 9、√ 10、× 1.在“<%!”和“%>”标记之间声明的Java的变量在整个页面内有效,不同的客户之间不共享。() 2.在“<%!”和“%>”标记之间声明的Java的方法在整个页面内有效。()3.页面成员方法不可以在页面的Java程序片中调用。() 4.程序片变量的有效范围与其声明位置有关,即从声明位置向后有效,可以在声明位置后的程序片、表达式中使用。() 5.程序片变量不同于在“<%!”和“%>”之间声明的页面成员变量,不能在不同客户访问页面的线程之间共享。()
JSP数据库应用开发: 1、了解数据库的基本概念 2、了解数据库mysql 3、掌握在mysql中创建数据库、数据表 4、熟悉sql的常用查询语句 5、了解jdbc的工作原理 6、掌握使用jdbc连接数据库的方法 7、了解jdbc-odbc桥接 8、掌握纯java驱动方式连接数据库 9、掌握在web项目中创建连接数据库的工具类 具体内容: 1、了解数据库的基本概念: (1)数据库技术产生于20世纪60年代; (2)数据VS信息:1)数据——对客观事物描述和记载的可以鉴别的物理符号,是客观事物的基本表达; 2)信息是数据的集合、含义与解释,是事物变化、特征的反映。 (3)数据库是指在计算机内按照一定形式存放、有组织、统一管理的相关数据和数据库对象的集合。其中数据库对象是指表、视图、存储过程、触发器等。 (4)数据库管理系统:是位于用户和操作系统之间的一层数据管理软件。它能科学的组织和存储数据、高效地获取和维护数据,并能为用户提供访问数据的方法,包括数据库的创建、查询、插入、 修改和删除等。 (5)数据库系统:是指实现有组织、动态的存储大量关联数据、方便用户访问计算机硬件、软件和数据资源的系统,它主要由数据库、数据库管理系统、应用系统、数据库管理员及用户组成。数据 库系统常称为数据库。 (6)数据库分类:一句数据库管理系统的数据模型,可以分为层次数据库、网状数据库、关系数据库、面向对象数据库。最常用的是关系数据库。支持关系数据库的产品有:IBMDB2 Oracle Sybase Microsoft SQL Server等 (7)关系数据库:是以关系模型为基础的; (8)关系模型是利用二维表格表示数据的数据模型。 (9)数据表a 也叫做关系a (10)关系的首行:叫做属性、也叫做字段、也就是关系各列的名字,属性描述了所在列的意义。关系中每个属性都有一个取值范围,也就是这个属性的数据类型的取值范围,称为该属性的域。 (11)关系的模式:关系名和关系的属性的集合,也就是数据表的名字和数据表首行的各个字段的集合,例如数据表user,里面有三个字段id, username,userpassword,那么,关系模式是: user(id,username,userpassword) (12)记录:在关系中,字段的有序集合称为记录,记录的各个分量分别对应着关系的各个属性。也就是每个属性/字段对应的实际的数据,例如关系user中,01,张山,12398u,那么,这条记录 就写为(01,张山,12398u) (13)主键:是能确定一条记录的唯一标识。一条记录中有若干个属性,若其中某一个属性组能唯一标识一条记录,那么该属性组就可以称为一个主键。例如,一条记录包括学号、年龄、姓名,学号 是唯一能确定这个人的,其他都可能重复,所以学号是主键。