最近在做Java Web方面的整理,遇到些问题,发现自己印象也不是很深刻了,这里作下整理,以后遇到问题再更新。

一.<%@include file="页面名称"%>和<jsp:include page="页面名称"/>的区别

首先推荐观看博客园的这篇文章:http://www.cnblogs.com/Ghost-Draw-Sign/articles/1835974.html

简单说明一下我的理解:

<%@include file%>是jsp指令元素,效果为把目标页面的HTML/JSP代码在编译时全部直接复制粘贴到这个地方。

而<jsp:include page>是编译目标JSP页面。并通过一个方法把编译好的jsp文件以调用的形式生成在Servlet中。

<%@include file%>会毫无保留的把目标页面的内容插入到当前页面中,所以,比如说你在<body></body>中使用了<%@include file="hello.jsp">,则你的hello.jsp内容应该不要再包含<body>标签了,换言之,就不应该是一个完整的页面,而且不能出现重复的声明ContentType格式。大家可以编写两个都带有标准HTML格式的<html><head><body>的jsp文件,并在一个jsp文件中使用<%@include file%>包含另外一个jsp文件,编译后打开并查看源代码,你会发现这些HTML标签出现了两遍。

<jsp:include page>是JSP提供的动作标签,其效果为对目标文件单独进行编译成Servlet,并在源Serlvet中通过JspRuntimeLibrary.include方法在代码中引入。要求两个文件都能被单独编译,并且这个过程是在编译运行阶段执行的。

之前我在用Java写自己博客时也遇到了。一般而言更喜欢用<%@include file%>,把用到的css/js单独放到一个页面中,并且把上方的导航栏和右边的侧栏以及下方的说明栏也用这种形式引入,减少了代码的引入。<jsp:include>很少用,不过总体上效果应该都差不多。

二.<jsp:forword page/>的用法:

通常,我们不应该直接暴露jsp页面,而是客户端先访问一个URL地址,Web应用将该URL转发给处理器处理,处理器执行完返回jsp页面。所以,一般JSP文件应该放在WEB-INF文件夹中,这样客户便无法访问了。

现在举一个奇葩的例子:不使用WEB-INF方法:我想让客户直接访问index.jsp,里面包含了必须经过处理器返回的数据,但是直接访问index.jsp是无效的,你看,你直接访问.jsp文件我也能取到数据库中数据,Diao吧。可以有以下办法:

1.把原来的hello.jsp改名(比如ok.jsp),取名index.jsp

2.index.jsp只需要有这一句<jsp:forword page="initOKJSP.servlet"/>

<!--这个initOKJSP.servlet是用于处理生成jsp的Serlvet,最后把请求转发到ok.jsp-->

3.在浏览器输入~/index.jsp即可看到ok.jsp的页面效果

反正就是这么一个效果,在jsp页面中使用<jsp:forword>标签能直接把当前的请求转发到目标文件(可以是jsp,servlet甚至action),起到了缓冲的作用。不过推荐大家还是把jsp文件放到WEB-INF中,然后可以使用MVC框架对请求进行处理。

三.4种作用域和PageContext

JSP包含四种作用域,分别是page,request,session,application,相信搞Java的一定都很熟。这四种作用范围我分别总结如下:

page:相当与Servlet中的this,表示自身,换句话说,只在当前页面有效。

request:请求范围,使用请求转发时,地址URL不会变而页面会变,request的作用在这两张页面上(一般情况是两个,只要URL不改都是同一个request)

session:只要浏览器不关,一直是同一个session实例。sessionId放在本机,服务端根据id获取session内容

application:只要应用没有挂掉,全局共享

PageContext和Page不同,PageContext包含了所有与应用相关的对象的引用。从PageContext实例可以获取page,request,session甚至application,相反从这四个对象也可以获得PageContext。PageContext是宏观上的对象,对其进行set/getAttribute会依次从page,request,session,application中查找。

四.如何使用Jsp提供的变量保存数据?

以下是我个人简单的总结,希望和大家互相补充交流,有错误也请指出,谢谢~~

pageScope:无啥大用,可以放全局变量。话说与其用Java实现全局变量的功能倒不如使用JavaScript

requestScope:重要属性,包括表单提交,Service返回到页面的数据

sessionScope:购物车,用户在线状态

applicationScope:数据库连接池

cookie:用户账号(加密后密码),购物车(建议用cookie),用户偏好

接下来,看到了再慢慢补充吧......

JSP 容易弄混的几点总结的更多相关文章

  1. Wpf border 容易弄混的两个属性

    代码如下: <Border Margin=" > <Button Content="dafkafjk"></Button> </ ...

  2. js 数组容易弄混的那些方法

    js数组中 我们很多数组的方法都知道其中的含义 但是每一次用的都不是很顺手 下边我给大家写了一个小小的demo 来理解那些 近似”双胞胎“的东西 // splice方法 var a=[1,2,3,4, ...

  3. Kindeditor(JSP)& 上传目录不存在

    一.基本配置 Kindeditor是一款富文本编辑器,作用跟博客园写文章用的这个编辑器一样,都是为了让文本加入各种各样的修饰元素. 使用方法如下,解压缩,把期中的ASP\NET\PHP文件夹都删除,然 ...

  4. JSP技术基础(动态网页基础)

    前言:如果说html为静态网页基础,那么jsp就是动态网页基础,两者的区别就是jsp在html的前面多加了几行而已.当然,jsp里面对java的支持度更高.要明白,js只是嵌入在客户端的小程序小脚本而 ...

  5. springMVC框架访问web-inf下的jsp文件

    博客原文章:http://td.xue163.com/1042/1/10425265.html 用户提出问题:springMVC框架访问web-inf下的jsp文件,具体如下: 使用springMVC ...

  6. 关于springMVC框架访问web-inf下的jsp文件

    问题:springMVC框架访问web-inf下的jsp文件,具体如下: 使用springMVC,一般都会使用springMVC的视图解析器,大概会这样配置 <property name=&qu ...

  7. js基础--javaScript数据类型你都弄明白了吗?绝对干货

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...

  8. Spring6:基于注解的Spring MVC(上篇)

    什么是Spring MVC Spring MVC框架是一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC ...

  9. Struts2的OGNL表达式语言

    一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...

随机推荐

  1. virtualbox 打不开ubuntu解决

    装了一个win7x64,准备打开ubuntu12.04,后来竟然报错(最新版的virtualbox,VirtualBox-4.3.18-96516-Win): 也没找到什么原因,网上查了之后,禁用了w ...

  2. Android开发的那些坑和小技巧

    1.android:clipToPadding 意思是控件的绘制区域是否在padding里面.默认为true.如果你设置了此属性值为false,就能实现一个在布局上事半功陪的效果.先看一个效果图. 上 ...

  3. 简述WebService的使用(二)

    上集回顾 上一篇我简单的介绍了一下整个WebService建立和后端访问的过程,如果感兴趣可以看一看:简述WebService的使用(一) //如有不懂请留言,觉得有用请点赞 内容提要 这一篇主要介绍 ...

  4. jquery-ajax-async之浏览器差异

    最近的PC项目遇到了一个问题,日志记录程序会在1s内多次发起对首页的请求,一时间没有找到原因. 简单描述一下问题:访问一个首页的时候,由于代码质量不高的原因,访问就连接数据库,但是同时存在的问题是一秒 ...

  5. php 读取文件的几种方法

    文件操作的三个步骤,打开,操作,关闭.$fopen=fopen(路径,方式),fwrite($fopen,写入的字符串);fclose($fopen). 其中打开方式有如下几种方式: 模式 描述 r ...

  6. python3 入门 (三) 函数与lambda表达式、闭包

    函数 是组织好的.可重复使用的.用来实现单一或相关联功能的代码段. 函数代码块以def关键词开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数 函 ...

  7. Fluent NHibernate关系映射

    1.好处:Fluent NHibernate让你不再需要去写NHibernate的标准映射文件(.hbm.xml), 方便了我们的代码重构,提供了代码的易读性,并精简了项目代码 实现: (1).首先我 ...

  8. [bzoj1296][SCOI2009]粉刷匠(泛化背包)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=1296 分析: 首先预处理出每一行的g[0..T]表示这一行刷0..T次,最多得到的正确格子数 ...

  9. WebForm控件之DropDownList

    DropDwonList 三件事: ------------------------------------------1.把内容填进去-------------------------------- ...

  10. zepto源代码解读

    /** * Created by nono on 14-11-16. */ /* Zepto v1.1.4 - zepto event ajax form ie - zeptojs.com/licen ...