JSP中包含文件的两种方式
- 格式:pdf
- 大小:117.01 KB
- 文档页数:6
Java web应用编程基础实验报告实验2:JSP基本语法实验姓名:___ ____班级:______学号:____ _成绩:_____一、实验目的:●熟悉HTML语法,理解和掌握JSP基本语法。
●初步掌握JavaScript的使用●初步掌握利用指令、脚本元素和动作元素,进行简单的JSP和HTML混合编程的方法和技术。
二、实验要求:●理解Web Server,正确使用Apache的Tomcat建立JSP Server。
●编写程序完成以下实验内容,通过手工和MyEclipse两种方式分别完成JSP文件的布署。
●上交实验报告电子文档(文档包含源程序,以班级、学号、姓名依次出现组成的字符串标识文档,以班级为单位上交).三、实验内容:1、采用声明实现访问计数器count.jsp,并在页面中显示:“当前访问本网站的用户数为:**人/次。
"程序:〈%@ page language=”java" import="java.util.*" pageEncoding="GB2312”%〉〈html〉<head〉<title〉网页访问计数〈/title></head>〈body><%if (application。
getAttribute(”count")== null) {application。
setAttribute("count”, new Integer(0));}Integer count=(Integer)application.getAttribute("count");application。
setAttribute("count”, new Integer(count.intValue()+ 1));count=(Integer)application.getAttribute("count");%>〈center>你是第<%=count。
JSP中的静态包含和动态包含的区别<%-- 静态包含 --%><%@ include file="..." %><%-- 动态包含 --%><jsp:include page="..."><jsp:param name="..." value="..." /></jsp:include>区别: 1.最终编译成的java⽂件的数量不同 静态包含转换成java⽂件时,将包含⽂件的内容“复制”到主题⽂件中,然后作为⼀个整体编译,最终编译为⼀个class⽂件,⽽动态包含是各个jsp⽂件分别转换,分别编译,最终编译成多个class⽂件 2.执⾏时间不同 静态包含是编译时包含 -JSP---->java⽂件阶段。
如果包含的页⾯不存在则会产⽣编译错误,⽽且两个页⾯的"contentType"属性应保持⼀致,不能有相同的变量名 因为两个页⾯会合⼆为⼀,只产⽣⼀个class⽂件,因此被包含页⾯发⽣的变化再包含它的页⾯更新前不会得到更新,需要重新编译更新。
⽽动态包含是运⾏时包含 -执⾏class⽂件阶段,可以向被包含的页⾯传递参数,包含页⾯和被包含页⾯是独⽴的,会编译出多个class⽂件, 如果被包含的页⾯不存在,不会产⽣编译错误,也不影响页⾯其他部分的执⾏ 3.⽆论是动态包含还是静态包含,其request对象都是相同的。
静态包含最终编译成⼀个java⽂件,有⼀个request对象。
⽽动态包含最终编译成多个java⽂件,其实这些jsp组合的过程,是⼀个请求转发的过程,⾃然也使⽤同⼀个request对象了。
单选题1、下面哪一个不是JSP本身已加载的基本类(B)A、.*B、.*C、.*D、、以下对象中的( D )不是JSP的内置对象。
A、requestB、sessionC、applicationD、bean3、下面的说法错误的是:(D)A、Jsp可以处理动态内容和静态内容B、在Jsp最终会编译成字节码后执行C、在jsp中可以使用脚本控制Html的标签生成D、Jsp中不能使用 D )A、JSP标签,如指令标签B、普通的HTML标记符C、Java表达式D、C语言程序12、如果Tomcat安装后,想要修改它的端口号,可以通过修改<tomcat安装目录>/conf下的(B)文件来实现。
A、 B、C、 D、13、()方法的作用是:( B )A、获取客户提交的信息B、获取客户的IPC、获取客户机的名称D、获取服务器的IP14、当( C )时,JSP引擎产生一个session对象。
A、web应用服务器启动时B、当web应用服务器启动后,第一个客户来访时C、当每个客户首次访问服务器上的一个JSP页面时D、当每个客户首次访问服务器上的一个JSP或HTML页面时15、当( A )时,JSP引擎产生一个application对象。
A、web应用服务器启动后B、当web应用服务器启动后,第一个客户来访时C、当每个客户首次访问服务器上的一个JSP页面时D、当每个客户首次访问服务器上的一个JSP或HTML页面时16、不属于JSP的out对象的方法的是( A )。
A、getAttribute ()B、print()C、println()D、close()17、当( C )时,JSP引擎将消灭某一个session对象。
A、有新客户访问时B、web应用服务器启动后,第一个客户来访时C、该session对应的客户关闭浏览器D、该session对应的客户刷新jsp页面时18、下面对HTML描述准确的一项是(C)。
A、用html书写的文件是二进制文件B、一个html文件无论被什么Web浏览器解释,其显示结果都是一样的C、html标记是不区分大小的D、html文件中有标记书写不合法时, Web浏览器会给出错误警告19、Connection对象用来连接:(B)A、数据库B、数据源C、.classsD、.java20、给定JSP程序源码如下:<html><% int count =1; %>________</html>以下哪一条语句可以在下划线处插入,并且运行后输出结果是(D)A、<%=++count %> B、<%++count;%>C、<%count++;%>D、<%=count++%>21、JSP程序段的基本语法是( C )。
一、Include指令<jsp:include>标签表示包含一个静态的或者动态的文件。
语法:<jsp:include page="path" flush="true" />or<jsp:include page="path" flush="true"><jsp:param name="paramName" value="paramValue" /></jsp:include>注:1、page="path" 为相对路径,或者代表相对路径的表达式。
2、flush="true" 必须使用flush为true,它默认值是false。
3、<jsp:param>子句能让你传递一个或多个参数给动态文件,也可在一个页面中使用多个<jsp:param> 来传递多个参数给动态文件。
二、Forward指令<jsp:forward>标签表示重定向一个静态html/jsp的文件,或者是一个程序段。
语法:<jsp:forward page="path"} />or<jsp:forward page="path"} ><jsp:param name="paramName" value="paramValue" />……</jsp:forward>注:1、page="path" 为一个表达式,或者一个字符串。
2、<jsp:param> name 指定参数名,value指定参数值。
参数被发送到一个动态文件,参数可以是一个或多个值,而这个文件却必须是动态文件。
1.最直接最简单的,方式是把文件地址直接放到html页面的一个链接中。
这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限)。
这个就不写示例了。
2.在服务器端把文件转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。
(示例如下)
3.既然是JSP的话,还有一种方式就是用Applet来实现文件的下载。
不过客户首先得信任你的这个Applet小程序,由这个程序来接受由servlet发送来的数据流,并写入到本地。
servlet端示例
JApplet端示例
4.顺便把JApplet上传文件的代码也贴上来. JApplet端示例
servlet端代码示例
总结:在文件的传输中是流的形式存在的,在硬盘上是文件的形式存在的。
我们要做的只是通过HttpServletRequest和HttpServletResponse,或者是response和request来发送流和读取流。
以及把文件转换成流或把流转换成文件的操作。
include js用法静态include: <%@ inlcude file =”header.jsp” %>此时引入的是静态的jsp文件,它将引入的jsp中的源代码原封不动地附加到当前文件中,所以在jsp程序中使用这个指令的时候file里面的值(即要导入的文件)不能带多余的标签或是与当前jsp文件重复的东西。
例如里面不要包含<html><body>这样的标签,因为是把源代码原封不动的附加过来,所以会与当前的jsp中的这样的标签重复导致出错。
动态include: <jsp:include page=”header.jsp”flush=”true” ></jsp:include>此时引入执行页面或生成的应答文本.jsp:include标签导入一个重用文件的时候,这个文件是经过编译的,通俗点说就是附加这个要导入文件经过编译后的效果,所以可以含有与当前jsp程序中重复的内容,因为在附加过来之前就会被解析掉。
其中flush 表示在读入包含内容之前是否清空任何现有的缓冲区。
2.include页面携带入参<jsp:include page=”header.jsp” flush=”true”><jsp: paramname=”userID”value=”2”/><jsp:include><jsp:param name = "" value="">是将值传给被包含页面(即header.jsp),可通过<%=request.getParameter("userID")%>获取3.两种用法的区别翻译阶段:jsp页面不能原封不动地被传送给浏览器,全部的jsp元素都必须首先由服务器进行处理。
这是通过将jsp 页面转达化成servlet,然后执行这个servlet来结束的。
java面试笔试题:JSP中动态INCLUDE与静态INCLUDE的区别动态INCLUDE用jsp:include动作实现<jsp:include page="" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数.静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="" %>下面非常详细地解析了有关JSP动态INCLUDE和静态INCLUDE的使用方法及其区别:我们都知道在jsp中include有两种形式,分别是<%@ include file=" "%><jsp:include page=" " flush="true"/>前者是指令元素、后者是行为元素.具体它们将在何处用如何用及它们有什么区别这应该是很多人看到它都会想到的问题.下面一起来看看吧.通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include.具体在哪些时候用<%@ include file=" "%>,哪些时候用<jsp:include page=" " flush="true"/>.这种形式.首先要明白的是它们之间的区别.只有了解了它们用法的不同才理解该在何时去用以及如何选择.<%@ include file=" "%>,jsp的include指令元素读入指定页面的内容.并把这些内容和原来的页面融合到一起. (这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的.这里对翻译阶段进行一下说明:我们知道,jsp页面不能原封不动地被传送给浏览器,所有的jsp元素都必须首先由服务器进行处理.这是通过将jsp页面转达化成servlet,然后执行这个servlet来完成的.服务器需要一个jsp容器来处理jsp页面.jsp容器通常以servlet的形式来实现,这个servlet经过配置,可以处理对jsp页面的所有请求.Jsp容器负责将jsp页面转化成servlet(称为jsp页面实现类JSP Page implementation class),并编译这个servle t.这两步就构成了翻译阶段.由此我们就会知道:jsp页面是把include指令元素所指定的页面的实际内容(也就是代码段)加入到引入它的jsp 页面中,合成一个文件后被jsp容器将它转化成servlet.可以看到这时会产生一个临时class文件和一个java文件.下面举个例子.服务器用tomcat,引入页面的jsp文件叫.被引入的页面叫.这个jsp文件里存放的是一个有关时间的jsp代码,当前的上下文根设为test<head><body><table><tr><td>有关jsp中include的两种用法.敬请关注.</td></tr></table></body></html>在文件中,我们只输出了一行文本" 有关jsp中include的两种用法.敬请关注.",现在让我们先用<%@ include file="" %>这种形式引入这个文件.你想会出现什么问题了吗此时出现了错误提示:HTTP Status 500/(0,0) Page directive: can't have multiple occurrences of contentType以下还有一堆错误,但我们只要看这里就知道问题的所在了.状态码为http 500服务器内部错误.再看下面的提示.在页面中不能指定多个contentType.原因就在这里了.是因为在翻译阶段,文件的代码被原封不动地加入到了页面从而合成一个文件.合成后的文件中就会相同的:<%@ page language="java" contentType="text/html;charset=gb2312"%>这句代码.解决的办法是把文件中的这句删掉.刷新后再请求页面请求在页面显示如下2003年12月10日13:12:40有关jsp中include的两种用法.敬请关注.这时我们还不能发现什么.还是去查看tomcat下的临时文件吧.到那里去看看文件的内容是否已被加入到了文件中.<注.此处的tomcat装在E盘根目录下>目录E:\tomcat\work\Standalone\localhost\test.在这个目录下会看到和两个文件.这里的java文件就是jsp容器将jsp转化成了servlet而得到的这个文件.相对应的这个文件就是编译这个servlet文件产生的类文件了.打开所产生的servlet文件.此时我们会发现,在文件被转化成servlet文件时,在输出的<haed>之间加入了一些不是页面里面的代码,新加入的内容就是里面的代码: 新加入了哪些内容或是否真的加入了新的内容请自己测试去看一下就会一目了然了.在这里不再详述.以上就是我们用<%@ include file=""%>这种形式得到的结果.下面我们换用<jsp:include page="" flush="true"/>也就是将<%@ include file=""%>换成<jsp:include page="" flush="true"/>,然后请求.2003 ê 1210 13:30:13有关jsp中include的两种用法.敬请关注.此时会在页面上看见.我们所引入输出的日期中中文出现了乱码.什么原因是因为include行为元素是在请求处理阶段执行的(此处要对请求处理阶段进行说明一下.Jsp容器除了上面提到的负责将jsp页面转化成servlet外,还负责调用jsp页面实现类以处理每个请求并产生应答.这个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文件).所以在我们作include行为元素引入页面时,实际只是引用了这个文件被转化并被编译后产生的servlet类文件.既如此, 就是作为一个单独的文件在执行后才被文件运行时调用.由于文件中没有指定字符编码.所以出现了乱码.解决办法是在文件中重新把刚才去掉的<%@ page language="java" contentType="text/html;charset=gb2312"%>这行语句加入后刷新重新运行.此时页面显示正确,并跟用include指令正常运行时一样.再查看tomcat下的临时文件会发现.此时多出了一个文件和一个文件.这两个文件得来的方式跟和文件得来的方式一样.再查看一下此时文件的代码会发现.此时只新增加了一句代码:(request, response, "", out, true);它并没有把文件的代码加入到.只是在运行时引入了页面执行后所产生的应答.这意味着我们可以指定任何能够产生应答的Web资源,(例如一个servlet或一个jsp页面),只要这些资源所产生的类型和jsp页面产生的内容类型相同.JSP容器将通过一个内部的函数调用来执行指定的资源.因此,这些被引入的资源可以帮助处理原来的请求,所以这些资源可以访问请求作用域内的所有对象.以及所有原来的请求参数.由于在主页面被请求时,这些页面还没有被引入到主页面中,所以你可以对page属性使用一个请求时属性值,以便根据运行时的情况来决定要引入哪一个页面.还可以添加一些将被引入的页面读取的请求参数.<jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" ><jsp:param name="fitstParamer" value="firstValue"><jsp:param name="lastParamer" value="lastValue"></jsp:include>如果修改了被引入的jsp页面,那么可以立刻使用该页面的最新版本,这是因为对待被引入的页面的方式与对待由浏览器直接调用的jsp页面的方式完全相同.即容器检测页面的变化,并自动进入翻译阶段,以得到页面的最新版本.(注意,include行为元素同jsp其它元素一样,没有行为体时要以"/"结束.就像下面这样.<jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" />)以下是对include 两种用法的区别主要有两个方面的不同;一:执行时间上:<%@ include file="relativeURI"%> 是在翻译阶段执行<jsp:include page="relativeURI" flush="true" /> 在请求处理阶段执行.二:引入内容的不同:<%@ include file="relativeURI"%>引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.<jsp:include page="relativeURI" flush="true" />引入执行页面或servlet所生成的应答文本.另外在两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径.将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.更多有关URL是如何解释的请参考相关资料或书籍.。
1.动态网页和静态网页的根本区别在于服务器端返回的HTML文件是事先存储好的还是由动态网页程序生成的(对)2.互联网起源于美国国防部高级研究计划管理局建立的ARPA网。
(对)3.在网页中图形文件与网页文件是分别存储的。
(对)4.绝度路径是文件名的完整路径;相对路径是指相对当前网页文件名的路径。
(对)5.超级链接<a>标记的target属性取值为链接的目标窗名,可以是parent、blank、self、top。
(错)6.当样式定义重复出现的时候,最先定义的样式起作用(错)。
7.在HTML页面文件中加入JSP脚本元素、JSP标记等就构成了一个JSP页面。
(对)8.JSP页面中的变量和方法声明(Declaration)、表达式(Expression)和Java程序片(Scriptlet)统称为JSP标记。
(对)9.在“<%!”和“%>”标记之间声明的Java的变量在整个页面内有效,不同的客户之间不共享。
(错)10.页面成员方法不可以在页面的Java程序片中调用。
(错)11.程序片变量不同于在“<%!”和“%>”之间声明的页面成员变量,不能在不同客户访问页面的线程之间共享。
(对)12.在Java程序片中可以使用Java语言的注释方法,其注释的内容会发送到客户端。
(错)13.jsp:include动作标记与include指令标记包含文件的处理时间和方式不同。
(对)15.<jsp:forward ... >标记的page属性值是相对的URL地址,只能静态的URL。
(错)14.public long session.setMaxInactiveInterval() 设置最长发呆时间,单位毫秒。
(错)15.session对象可以用来保存用户会话期间需要保存的数据信息。
(对)17.url重写可以把session对象的id作为url参数传带过去,可以使用request对象的encodeURL(“”)。
引用外部.css或.js文件的路径问题个人日记2010-03-25 12:10:26 阅读135 评论1 字号:大中小订阅引用外部.css或.js文件的路径问题文章分类:Web前端jsp或html页面引用外部.css或.js文件时,注意路劲问题,如果设置不当,会引用不到这些外部的文件假设使用下面的目录结构:-webapp|-MyProject 目录|--WebContent 目录|---scripts 目录---dtree.js 文件|---styles 目录---main.css 文件|---pages 目录---test.jsp 文件现在例如要在test.jsp中引用scripts目录下的dtree.js和styles目录下的main.css有如下几种方法:1.使用相对于jsp页面的相对路径Html代码[url=/blog/577469#][/ url]1<link type="text/css"rel="stylesheet"href="../styles/main.css"/>2<script type="text/javascript"src="../scripts/dtree.js"></script><link type="text/css" rel="stylesheet"href="../styles/main.css" /><scripttype="text/javascript"src="../scripts/dtree.js"></script>这样在页面使用http://localhost:8080/MyProject/test.jsp 访问test.jsp时就可以引用到dtree.js和main.css。