静态导入静态pe和动态pe的区别导入的区别

(一)使用静态include指令
&%@ page language="java" contentType="text/ charset=gb2312"%&&!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&&html&&head&&meta http-equiv="Content-Type" content="text/ charset=ISO-8859-1"&&title&Insert title here&/title&&/head&&body&&%@include file="scriptlet.jsp" %&&/body&&/html&
(二)使用动态Include指令
&%@ page language="java" contentType="text/ charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%&&!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&&html&&head&&meta http-equiv="Content-Type" content="text/ charset=ISO-8859-1"&&title&Insert title here&/title&&/head&&body&&jsp:include page="scriptlet.jsp" /&&/body&&/html&
scriptlet.jsp页面代码如下:
&%@ page language="java" contentType="text/ charset=gb2312"%&&!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&&html&&head&&meta http-equiv="Content-Type" content="text/ charset=ISO-8859-1"&&title&Insert title here&/title&&/head&&body&&%out.write("来自scriptlet.jsp");%&&/body&&/html&
(三)静态导入和动态导入的区别:
(1)静态导入(include指令)通过file属性指定被包含的文件,并且file属性不支持任何表达式;动态导入(include动作)通过page属性指定被包含的文件,且page属性支持JSP表达式;
(2)使用静态导入(include指令)时,被包含的文件内容会原封不动的插入到包含页中,然后JSP编译器再将合成后的文件最终编译成一个Java文件;使用动态导入(include动作)包含文件时,当该标识被执行时,程序会将请求转发(不是请求重定向)到被包含的页面,并将执行结果输出到浏览器中,然后返回包含页继续执行后面的代码。因为服务器执行的是多个文件,所以JSP编译器会分别对这些文件进行编译;
(3)使用include指令包含文件时,由于被包含的文件最终会生成一个文件,所以在被包含、包含文件中不能有重名的变量或方法;而include动作包含文件时,由于每个文件是单独编译的,所以在被包含文件和包含文件中重名的变量和方法是不相冲突的。
(4)静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet,因此被导入页面甚至不需要是一个完整的页面;而动态导入则在Servlet中使用include方法来引入被导入页面的内容;
(5)静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。
阅读(...) 评论()7771人阅读
----- ③、Java知识点及应用(34)
----- ④、Web学习之旅(59)
----- ----- JSP/XML知识点(10)
一、JSP技术简介
JSP是Java Server Page的缩写,它是Servlet的扩展,它的作用是简化网站的创建和维护。
JSP是HTML代码与Java代码的混合体。
JSP文件通常以JSP或JSPX的扩展名。
JSP拥有自己的语法。
JSP形式上像HTML,但本质上是Servlet。
JSP的出现,使得将Web开发中的HTML与业务逻辑代码有效分离成为可能。通常JSP只负责生成动态的HTML文档,而业务逻辑由其他Java组件如JavaBean来实现。JSP可以通过Scriptlet来访问这些组件。
Tomcat首次访问JSP的过程图示:
首先来看下,我们用Tomcat发布这个一个web : index.jsp的代码是:
&%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&
&演示JSP技术&
String name = "jack";
HttpSession s = request.getSession();
ServletConfig cfig = getServletConfig();
ServletContext aa = getServletContext();
response.setCharacterEncoding("utf-8");
response.setContentType("text/charset=utf-8");
session.setAttribute("a","aabbcc");
request.setAttribute("req", "request");
&这里用文字隔一下&
out.println("name="+name);//注解1:上面jsp中定义了name变量,所以这里能访问,至于为什么能访问,去看下底层代码就知道了
out.println(session.getAttribute("a"));
sum=&%=sum(100) %&/&
age=&%=age %&
//下面是加了"!"号的内容
int age = 25;
int sum(int n){
for(int i=0;i&=n;i++){
运行的结果是这样的:
为什么会这样的呢。我们来看Tomcat帮我们生成的java源代码(无论jsp怎么写,别人访问我们的网站的时候,tomcat会临时去读我们的jsp,然后再生成对应的.java文件):
我的tomcat安装在D盘下,myJspDemo是我的项目名,
D:\apache-tomcat-7.0.30\work\Catalina\localhost\myJspDemo\org\apache\jsp
这个目录下面会生成:index_jsp.java文件,我们打开它,
我只贴出与我刚写的jsp有关的代码图片了,不然太长了。
看完第一张图片,有没有感觉到什么~
再看第二张~~是不是一下子就懂了,原来jsp&%
%&中的字符就只是原样写进java代码中啊~
%&中的字符是写进servlet()方法中的!!!!
%&中的字符是写进类的,和方法一个级别,变量就是成员变量!—-用这个有一个好玩的东西哦,自己再写一个servlet进去,覆盖tomcat的
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)类!也就是运行后,自己写的jsp完全不会再运行,只会运行自己的servlet中的内容了(方法名字取和tomcat一样_jspService,里面的变量用HttpServletRequest 的父类,就可以实现覆盖啦)。有趣吧,嘿嘿,不过只是画蛇添足啦,没必要这样,我只是想说明一个,就是用了&%!
%&,这个中的变量,方法 的作用域就是整个类了!(写内部类都行)
底层是把该名翻译成:out.print(age );
静态导入:
在index.jsp的&%! %&之后插入:
&--从这里开始导入包含页--静态导入,合成一个类,可以共享:局部变量、request和response对象等等&
&%@include file="jsps/a.jsp" %&
/jsps/a.jsp:
这个写出来,myEclipse会报错的,但是没关系,这是myEclipse的智能识别问题,它无法识别那个变量名。
&%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&
&h1&a.jsp...开始&/h1&
out.println("name="+name)
out.println("age="+age)
out.println("sum="+sum(100))
out.println(session.getAttribute("a"))
&h1&a.jsp...结束&/h1&
演示结果:
看下tomcat帮我们把这个a.jsp的代码生成到哪了:
很明显,和index.jsp的生成在一个类中了,而且是servlet方法中!
所以,通过这个,我们就很容易理解为什么能够访问到name,age变量和sum()方法了吧。
解释一下:
静态导入其实就是把另外导入的jsp中的代码(相当于除了jsp的头,其他的全部原样拷过来)(采用jsp的方式翻译后的)直接插入到当前 _jspServlet()中的对应的位置!
jsp的方式翻译:html代码(包括html、body等标记、DOCTYPE约束)是采用 out.write()封装。jsp中写的java代码,就原样拷入!
动态导入:
index.jsp中在静态导入演示之后添加:
&h2&以下演示动态导入(包含)---生成两个独立的jsp类,只能够共享:request对象(输出结果是合并成一个页面显示的)&/h2&
&jsp:include page="jsps/b.jsp"&&/jsp:include&
out.println("&br/&")
out.println("index中的request="+request)
out.println("&br/&")
out.println(request.getAttribute("req"))
&h2&这是index.jsp的结尾&/h2&
&%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&
&这是被动态导入的页面&
&这是被jsp:include(动态导入)的页面&
out.println("b.jsp中的session.getAttribute(a)="+session.getAttribute("a"));
out.println("&br/&");
out.println("b.jsp中的request="+request);
out.println("&br/&");
out.println(request.getAttribute("req"));
演示结果:
index_jsp.java:
可以很明显的看到,b.jsp中内容并没有生成在这里。
而是重新生成了一个类:
自然,b.jsp中的代码是在这个类中生成了,至于为什么不能访问那些局部变量和成员变量,懂Java的人很容易理解了吧!
所以,静态导入和动态导入,
区别是:静态导入不另外生成java类,而是在当前导入的类中生成java代码,而动态导入,会另外再生成java类,这也是为什么访问静态导入的网站运行会比动态导入的网站运行快的原因。
静态导入时导入所有,编译指令会起作用。
而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。
实际应用:
使用包含引入页面统一的元素,如网头和网脚。
使用&%@ include file = url %&或&jsp:include page=url/&都可以。
使用包含引用用户是否已经登录的验证。
必须使用&%@ include file=url%&静态包含。
因为在同一个servlet中执行了redirect后面的代码将不会再执行。
而动态包含无论目标页面如何操作,都会再返回到源页再执行后面的代码。
JSP的注释语句:
&%- - 在这儿输入注释 - - %&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1980690次
积分:26056
积分:26056
排名:第257名
原创:659篇
转载:26篇
评论:551条
其他邮箱:
文章:20篇
阅读:187877
阅读:69256
文章:64篇
阅读:435303
文章:52篇
阅读:218419
文章:24篇
阅读:137785
文章:322篇
阅读:595289
(1)(10)(6)(2)(10)(3)(2)(10)(6)(12)(13)(20)(10)(17)(50)(38)(30)(93)(95)(49)(26)(36)(21)(33)(43)(25)(24)jsp中include指令静态导入和动态导入的区别详解_百度知道
jsp中include指令静态导入和动态导入的区别详解
我有更好的答案
include page=&{relativeURL|&&gt.jsp&%@@@@@@@#####动态导入是不会导入include页面的编译指令的,而是仅仅将被导入页面的body内容插入本页面,只能设置为false。&:%@include file=&relativeURLSpec&quot@@@@@@@@@#####静态导入指的是,将一个外部文件嵌入到当前JSP文件中;%&,同时解析这个页面的JSP语句,它会把目标页面的其他编译指令也包含进来。include的静态导入指令使用语法; flush=&true&/jsp!--使用include编译指定导入页面--&%@include file=&flush属性用语指定输出缓存是否转移到被导入文件中。如果指定为true,则包含在被导入文件中!--使用include编译指定导入页面--&&jsp:include page=&error。动态导入的语法格式,对于JSP1.1旧版本,如果指定为false,则包含在原文件中;%=expression%&}&quot:&lt
采纳率:55%
来自团队:
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。豆丁微信公众号
君,已阅读到文档的结尾了呢~~
[训练]静态导入和动态导入的区别
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
[训练]静态导入和动态导入的区别
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 静态和动态的区别 的文章

 

随机推荐