第7章 JSP之1:JSP语法
- 格式:pdf
- 大小:2.79 MB
- 文档页数:54
《JSP实用教程(第三版)》课后答案第1章 JSP简介1.安装Tomcat引擎的计算机需要事先安装JDK吗?答:需要。
2.怎样启动和关闭Tomcat服务器?答:bin目录下使用startup.bat启动Tomcat服务器。
bin目录下使用shutdown.bat 关闭Tomcat服务器。
3. Boy.jsp和boy.jsp是否是相同的JSP文件名字?答:不是4. 请在D:\下建立一个名字为water的目录,并将该目录设置成一个Web服务目录,然后编写一个简单JSP页面保存到该目录中,让用户使用虚拟目录fish 来访问该JSP页面。
答:设置方法:①建立D:\ water目录;②修改server.xml文件,在</host>上一行添加:<Context path="/fish" docBase="D:\ water" debug="0" reloadable="true"/>③使用http://localhost:8080/ fish /example1_1.jsp访问example1_1.jsp页面.5. 假设Dalian是一个Web服务目录,其虚拟目录为moon。
A.jsp保存在Dalian 的子目录sea中。
那么在Tomcat服务器(端口号8080)所在计算机的浏览器键入下列哪种方式是访问A.jsp的正确方式?A.http://127.0.0.1:8080/A.jsp B. http://127.0.0.1:8080/Dalian/A.jspC. http://127.0.0.1:8080/moon/A.jspD. http://127.0.0.1:8080/moon/sea/A.jsp 答:D6.如果想修改Tomcat服务器的端口号,应当修改哪个文件?能否将端口号修改为80?答:修改Tomcat服务器的conf目录下的主配置文件server.xml可以更改端口号.若Tomcat服务器上没有其它占有80端口号的程序,可以将其修改为80,否则不能。
JSP课后习题参考答案●JSP引擎调用Java虚拟机解释执行.class文件,并将运行结果返回给服务器。
●服务器将运行结果以HTML形式作为响应返回给客户端的浏览器。
由于一个JSP页面在第一次被访问时要经过翻译、编译和执行这几个步骤,所以客户端得到响应所需要的时间比较长。
当该页面再次被访问时,它对应的.class文件已经生成,不需要再次翻译和编译,JSP引擎可以直接执行.class文件,因此JSP页面的访问速度会大为提高。
2. 简述JSP两种体系结构。
答:JSP规范中分别称作JSP Model 1 和JSP Model 2,它们的本质区别在于处理批量请求的位置不同。
Model1,在Model1体系中,JSP页面独自响应请求并将处理结果返回客户。
这里仍然存在显示与内容的分离,因为所有的数据存取都是由JavaBean来完成的。
尽管Model1体系十分适合简单应用的需要,它却不能满足复杂的大型Web应用程序需要。
不加选择地随意运用Model 1,会导致JSP页内被嵌入大量的脚本片段或Java代码。
尽管这对于Java程序员来说可能不是什么大问题,但如果JSP页面是由网页设计人员开发并维护的这就确实是个问题了。
从根本上讲,将导致角色定义不清和职责分配不明,给项目管理带来不必要的麻烦。
Model2体系结构,是一种把JSP与Servlet联合使用来实现动态内容服务的方法。
它吸取了两种技术各自的优点,用JSP生成表示层的内容,让Servlet完成深层次的处理任务。
Servlet充当控制者的角色,负责管理对请求的处理,创建JSP页面需要使用的Bean和对象,同时根据用户的动作决定把哪个JSP页面传给请求者。
在JSP页面内没有处理逻辑,它仅负责检索原先由Servlet创建的对象或JavaBean,从Servlet中提取动态内容插入静态模板。
分离了显示和内容,明确了角色的定义以及实现了开发者与网页设计者的分开。
项目越复杂,使用Model 2体系结构的优势就越突出。
Jsp详解1.简介2.Jsp的运行原理3.Jsp的语法1.Jsp模板元素2.Jsp中的脚本表达式3.Jsp中的脚本片段4.Jsp的声明5.Jsp注释6.Jsp指令1.首先我们来看一下page指令的用法2.下面在来看一下include指令3.最后来看一下taglib指令7.Jsp中内置的9个隐式对象8.JSP标签库1.jspinclude标签2.jspforward标签3.jspparam或者jspparams标签4.jspuseBean标签jspsetProperty标签jspgetProperty标签9.Jsp中怎么排查错误简介:JSP全称是JavaServer Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
JSP这门技术的最大的特点在于,写jsp就像在写html,但:它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
相比servlet而言,servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。
不管是JSP还是Servlet,虽然都可以用于开发动态web资源。
但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。
其原因为,程序的数据通常要美化后再输出:让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。
让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。
因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。
Jsp的运行原理:目标:Web服务器是如何调用并执行一个jsp页面的?Jsp页面中的html排版标签是如何被发送到客户端的?Jsp页面中的java代码服务器是如何执行的?Web服务器在调用jsp时,会给jsp提供一些什么java对象?思考:JSP为什么可以像servlet一样,也可以叫做动态web资源的开发技术?其实Jsp就是一个Servlet,所以我们要先介绍Servlet的相关技术,当我们第一次访问Jsp 的时候,Jsp引擎都会将这个Jsp翻译成一个Servlet,这个文件存放在Tomcat中的work目录中,这里,我们新建一个MyJsp.jsp页面,然后访问以下,我们看一下翻译后的源码:1.<%@ page language="java"import="java.util.*"pageEncoding="utf-8"%>2.3.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01 Transitional//EN">4.<html>5.<head>6.7.<title>My JSP 'MyJsp.jsp' starting page</title>8.9.</head>10.11.<body>12. This is my JSP page. <br>13.</body>14.</html>1.package org.apache.jsp;2.3.import javax.servlet.*;4.import javax.servlet.http.*;5.import javax.servlet.jsp.*;6.import java.util.*;7.8.public final class MyJsp_jsp extends org.apache.jasper.runtime.HttpJspBase9.implements org.apache.jasper.runtime.JspSourceDependent {10.11.private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();12.13.private static java.util.List _jspx_dependants;14.15.private javax.el.ExpressionFactory _el_expressionfactory;16.private org.apache.AnnotationProcessor _jsp_annotationprocessor;17.18.public Object getDependants() {19.return _jspx_dependants;20. }21.22.public void _jspInit() {23. _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();24. _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class .getName());25. }26.27.public void _jspDestroy() {28. }29.30.public void _jspService(HttpServletRequest request, HttpServletResponse response)31.throws java.io.IOException, ServletException {32.33. PageContext pageContext = null;34. HttpSession session = null;35. ServletContext application = null;36. ServletConfig config = null;37. JspWriter out = null;38. Object page = this;39. JspWriter _jspx_out = null;40. PageContext _jspx_page_context = null;41.42.43.try {44. response.setContentType("text/html;charset=utf-8");45. pageContext = _jspxFactory.getPageContext(this, request, response,46.null, true, 8192, true);47. _jspx_page_context = pageContext;48. application = pageContext.getServletContext();49. config = pageContext.getServletConfig();50. session = pageContext.getSession();51. out = pageContext.getOut();52. _jspx_out = out;53.54. out.write("\r\n");55. out.write("\r\n");56. out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");57. out.write("<html>\r\n");58. out.write(" <head>\r\n");59. out.write(" \r\n");60. out.write(" <title>My JSP 'MyJsp.jsp' starting page</title>\r\n");61. out.write(" \r\n");62. out.write(" </head>\r\n");63. out.write(" \r\n");64. out.write(" <body>\r\n");65. out.write(" This is my JSP page. <br>\r\n");66. out.write(" </body>\r\n");67. out.write("</html>\r\n");68. } catch (Throwable t) {69.if (!(t instanceof SkipPageException)){70. out = _jspx_out;71.if (out != null && out.getBufferSize() != 0)72.try { out.clearBuffer(); } catch (java.io.IOException e) {}73.if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);74. }75. } finally {76. _jspxFactory.releasePageContext(_jspx_page_context);77. }78. }79.}我们看到,这个类继承了org.apache.jasper.runtime.HttpJspBase,要想看到这个类的源码,我1./*2. * Licensed to the Apache Software Foundation (ASF) under one or more3. * contributor license agreements. See the NOTICE file distributed with4. * this work for additional information regarding copyright ownership.5. * The ASF licenses this file to You under the Apache License, Version 2.06. * (the "License"); you may not use this file except in compliance with7. * the License. You may obtain a copy of the License at8. *9. * /licenses/LICENSE-2.010. *11. * Unless required by applicable law or agreed to in writing, software12. * distributed under the License is distributed on an "AS IS" BASIS,13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.14. * See the License for the specific language governing permissions and15. * limitations under the License.16. */17.18.package org.apache.jasper.runtime;19.20.import java.io.IOException;21.22.import javax.servlet.ServletConfig;23.import javax.servlet.ServletException;24.import javax.servlet.http.HttpServlet;25.import javax.servlet.http.HttpServletRequest;26.import javax.servlet.http.HttpServletResponse;27.import javax.servlet.jsp.HttpJspPage;28.import javax.servlet.jsp.JspFactory;29.30.import piler.Localizer;31.32./**33. * This is the super class of all JSP-generated servlets.34. *35. * @author Anil K. Vijendran36. */37.public abstract class HttpJspBase38.extends HttpServlet39.implements HttpJspPage40.41.42.{43.44.protected HttpJspBase() {45. }46.47.public final void init(ServletConfig config)48.throws ServletException49. {50.super.init(config);51. jspInit();52. _jspInit();53. }54.55.public String getServletInfo() {56.return Localizer.getMessage("");57. }58.59.public final void destroy() {60. jspDestroy();61. _jspDestroy();62. }63.64./**65. * Entry point into service.66. */67.public final void service(HttpServletRequest request, HttpServletResponse response)68.throws ServletException, IOException69. {70. _jspService(request, response);71. }72.73.public void jspInit() {74. }75.76.public void _jspInit() {77. }78.79.public void jspDestroy() {80. }81.82.protected void _jspDestroy() {83. }84.85.public abstract void _jspService(HttpServletRequest request,86. HttpServletResponse response)87.throws ServletException, IOException;88.}好吧,看到了,继承了HttpServlet类,所以说其实Jsp就是一个ServletJsp的语法:1.JSP模版元素2.JSP表达式3.JSP脚本片段4.JSP注释5.JSP指令6.JSP标签7.JSP内置对象8.如何查找JSP页面中的错误Jsp模板元素JSP页面中的HTML内容称之为JSP模版元素。
JSP程序设计课后习题答案第⼀章 JSP概述1-1 JSP的全称是什么?JSP有什么优点?JSP与ASP、PHP的相同点是什么?JSP的全称是Java Server Pages。
优点:跨平台、分离静态内容和动态内容、可重复使⽤的组件、沿⽤了Java Servlet的所有功能、具有预编译性。
共同点:可以在页⾯中加⼊脚本代码来⽣成动态内容。
1-2 JSP中可重复使⽤的组件有哪些?JavaBean组件、JSP的标准标签和⾃定义标签。
1-3 什么是JSP的预编译特征?预编译是JSP的另⼀个重要的特性。
JSP页⾯在被服务器执⾏前,都是已经被编译好的,并且通常只进⾏⼀次编译,即在JSP页⾯被第⼀次请求时进⾏编译,在后续的请求中如果JSP页⾯没有被修改过,服务器只需要直接调⽤这些已经被编译好的代码,这⼤⼤提⾼了访问速度。
1-4 开发JSP程序需要具备哪些开发环境?Web浏览器、Web服务器、JDK开发⼯具包以及数据库。
1-5 在成功安装JDK后,需要配置哪些环境变量?JAVA_HOME变量、Path变量、CLASSPATH变量1-6 Tomcat的默认端⼝、⽤户名和密码分别是什么?端⼝为“8080”、⽤户名为“admin”、密码为空。
1-7 本章介绍的⽤来开发JSP程序的开发⼯具是什么?Eclipse1-8 开发JSP程序可采⽤哪⼏种开发模式?分别介绍它们的优缺点。
单纯的JSP页⾯编程:优点:通过应⽤JSP中的脚本标志,可直接在JSP页⾯中实现各种功能。
缺点:⼤部分的Java代码与HTML代码混淆在⼀起,给程序的维护和调试带来很多的困难。
JSP+JavaBean编程优点:jsp与javabean的结合,使web程序更加的直观,使⽤简单,不⽤于后台进⾏交互,直接在前端处理业务逻辑,更快速。
缺点:性能不好,jsp作为web的前端程序包含了太多的业务逻辑,给前端jsp造成了压⼒。
不便于维护。
JSP+Servlet+JavaBean编程优点:能够更好的实现表⽰层,逻辑层和数据访问层的分离。
Web程序设计(一)第7章 JSP之1:JSP语法学习内容 1JSP 页面的基本构成 2 嵌入Java 代码JSP 指令标签3 4 注释JSP 动作标签5JSP构成142 35 JSP动作标签JSP指令标签HTML标记语言嵌入的Java代码注释<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@ page import="java.util.Date"%><%@ page import="java.text.SimpleDateFormat"%> <html> <head><title>My JSP 'index.jsp' starting page</title> </head> <body> <% Date date = new Date(); //获取日期对象 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置日期时间格式 String today = df.format(date); //获取当前系统日期 %> 当前时间:<%=today%> <!-- 输出系统时间 --> <jsp:include page=“bott.jsp ”> </body></html> JSP 指令标签 HTML 标记语言嵌入的Java 代码注释语句JSP 动作标签学习内容 1JSP 页面的基本构成 2 嵌入Java 代码JSP 指令标签3 4 注释JSP 动作标签 52.1 概述2.2 文件包含指令include页面指令page2.3 2.4 引用标签库指令taglib2 JSP 指令标签概念用于定义整个JSP页面的相关信息,不会产生任何内容输出到网页。
<%@ 指令名称属性1=“值1” 属性2=“值2” ……%>语法格式JSP指令page includetaglib2.1 概述2.2 文件包含指令include页面指令page2.3 2.4 引用标签库指令taglib2 JSP 指令标签2.2 页面指令page概念用于定义整个JSP页面的相关属性,是JSP 页面最常用的指令。
<%@ page 属性1=“值1” 属性2=“值2” ……%>语法格式概念用于设置JSP页面使用的语言,目前只支持Java语言,其默认值是Java。
<%@ page language=“java” %>例子概念用于设置JSP页面继承的Java类。
注意事项●所以JSP页面在执行之前都会被服务器解析成Servlet●Servlet是由Java类定义的●JSP和Servlet都可以继承指定的父类●Extends属性不常用,而且有可能影响服务器的性能优化。
概念用于设置JSP页面导入的类包, JSP页面中嵌入的Java代码在调用API时需要导入相应的类包。
<%@ page import=“java.util.*” %>例子2.2 页面指令page——pageEncoding属性概念用于定义JSP页面的编码格式,也即指定文件编码。
例子<%@ page pageEncoding =“GBK” %>注意事项●如果该属性值为ISO-8859-1(JSP页面的默认编码),则页面不支持中文字符。
●通常设置编码格式为GBK,可显示简体和繁体中文。
2.2 页面指令page——contentType属性概念用于设置JSP页面的MIME类型和字符编码,浏览器会根据该属性指定的类型和编码显示网页内容。
<%@ page contentType=“text/html;charset=GBK” %>例子概念用于指定JSP页面是否使用session会话对象,可选值为true和false,默认值为true。
例子<%@ page session =“false” %>注意事项●该属性值为true时,session会话对象可用。
●该属性值为false时,session会话对象不可用概念用于设置JSP的out输出对象使用的缓冲区大小,默认值是8KB,而且单位只能只用KB。
<%@ page buffer=“128kb” %>例子2.2 页面指令page——autoFlush属性概念用于设置JSP页面缓存满时,是否自动刷新缓存,默认值为true。
如果设置为false,在缓存被填满时,会抛出异常。
<%@ page autoFlush=“false” %>例子2.2 页面指令page——info属性概念用于设置JSP页面的相关信息。
<%@ page info=“这是一个登录页面” %>例子2.2 页面指令page——isErrorPage属性概念将当前JSP页面设置成错误处理页面,错误处理页面用于处理另一个JSP页面的错误,也即异常处理。
<%@ page isErrorPage =“true” %>例子2.2 页面指令page——errorPage属性概念用于指定处理当前JSP页面异常的另一个JSP页面。
例子<%@ page errorPage=“error/loginerror.jsp” %>注意事项●被指定的JSP错误处理页面必须设置isErrorPage属性为true。
●如果设置该属性,在web.xml文件中定义的任何错误处理页面将被忽略。
2.2 页面指令page——isELIgnored属性概念用于定义JSP页面是否忽略EL表达式的使用。
例子<%@ page isELIgnored =“false” %>注意事项●当其取值为false时,可以直接使用EL表达式●在Servlet2.3以前版本中其默认值为true。
●在Servlet2.4版本中其默认值为false。
2.1 概述2.2 文件包含指令include页面指令page2.3 2.4 引用标签库指令taglib2 JSP 指令标签2.3 文件包含指令include概念该指令可以在JSP页面中包含另一个文件的内容。
例子<%@include file =“validate.jsp” %>注意事项●该指令支持静态包含●被包含的文件可以是一段Java代码、html代码或另一个JSP页面。
top.jsp <%@ page language="java"import="java.util.*" pageEncoding="gbk"%><img src="images/top.gif">down.jsp <img src = "images/down.gif"/>index.jsp <body><%@ include file="top.jsp"%><table width="777" height="482"border="0"background="images/center.gif"><tr><td height="93"> </td></tr></table><%@ include file="down.jsp"%></body>2.1 概述2.2 文件包含指令include页面指令page2.3 2.4 引用标签库指令taglib2 JSP 指令标签2.4 引用标签库指令taglib概念该指令声明JSP页面中所使用的标签库,同时引用标签库,并指定标签前缀,通过前缀来引用标签库中的标签。
格式<%@taglib prefix =“前缀” uri=“标签库位置”%>例子<%@taglib prefix =“c”uri=“/jsp/jstl/core”%>学习内容 1JSP 页面的基本构成 2 嵌入Java 代码 JSP 指令标签3 4 注释JSP 动作标签 53 嵌入Java代码3.1 代码片段3.2 JSP表达式3.1 代码片段格式<% java代码 %>例子<%Date now=new Date();String dateStr=String.format(“%tY年%tm月%td 日”,now,now,now);%>注意事项●代码片段在页面请求的处理期间被执行●代码片段可以通过JSP内置对象在页面输出内容、访问session会话、编写流程控制语句3 嵌入Java代码3.1 代码片段3.2 JSP表达式3.2 JSP 表达式概念JSP表达式可以直接把Java的表达式结果输出到JSP页面中,表达式的结果被转换为字符串类型。
<%=表达式%>格式圆周率是:<%=Math.PI%>例子学习内容 1JSP 页面的基本构成 2 嵌入Java 代码JSP 指令标签3 4 注释JSP 动作标签 54.1 HTML 注释4.2 Java 代码注释JSP 注释4.3 4.4 动态注释 4注释4.1 HTML 注释格式<!--注释文本-->例子<table> <!--显示数据报表的表格--> ……………</table>注意事项●注释内容不会显示在网页中●在客户端查看源代码时仍然可以看到注释信息4.1 HTML 注释4.2 Java 代码注释JSP 注释4.3 4.4 动态注释 4注释4.2 JSP 注释格式<%--注释文本--%>例子<%--显示用户信息开始--%>用户名:……部门:……权限:…….<%--显示用户信息结束--%>注意事项 JSP注释被服务器编译执行,不会发送到客户端,在客户端源代码中不会被看到。
4.1 HTML 注释4.2 Java 代码注释JSP 注释4.3 4.4 动态注释 4注释4.3 Java 代码注释单行注释<%//单行注释%>多行注释<%/*多行注释*/%>JavaDoc 注释<%/**JavaDoc注释*/ %>4.1 HTML 注释4.2 Java 代码注释JSP 注释4.3 4.4 动态注释 4注释4.4 动态注释概念由于HTML注释对JSP嵌入代码不起作用,所以可以利用他们的组合构成动态的HTML注释文本。