JSP 容易弄混的几点总结

最近在做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 容易弄混的几点总结,布布扣,bubuko.com

时间: 2024-08-26 02:52:11

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

Kindeditor(JSP)&amp; 上传目录不存在

一.基本配置 Kindeditor是一款富文本编辑器,作用跟博客园写文章用的这个编辑器一样,都是为了让文本加入各种各样的修饰元素. 使用方法如下,解压缩,把期中的ASP\NET\PHP文件夹都删除,然后在web项目下新建一个文件夹/kindeditor,再将文件拖入: 目录结构如上. 在需要导入kindeditor的JSP中添加以下代码 1 <!-- kindeditor --> 2 <script charset="utf-8" src="kindedit

XP搭建Apache+Tomcat+JSP+PHP+MYSQL环境教程

一.环境说明 1.Window XP 2.apache_2.2.11-win32-x86-no_ssl.msihttp://httpd.apache.org/ 3.Mod_jk-1.2.28-httpd-2.2.3.sohttp://tomcat.apache.org/download-connectors.cgi 4.apache-tomcat-6.0.18.ziphttp://archive.apache.org/dist/tomcat/tomcat-6/v6.0.18/src/ 5.mys

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

问题:springMVC框架访问web-inf下的jsp文件,具体如下: 使用springMVC,一般都会使用springMVC的视图解析器,大概会这样配置 <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> 当我的co

这一次,终于弄懂了协变和逆变

一.前言 刘大胖决定向他的师傅灯笼法师请教什么是协变和逆变.   刘大胖:师傅,最近我在学习泛型接口的时候看到了协变和逆变,翻了很多资料,可还是不能完全弄懂. 灯笼法师:阿胖,你不要被这些概念弄混,编译器可不知道你说的什么协变逆变.这个问题,首先你得弄懂什么叫类型的可变性. 刘大胖:可变性? 二.可变性 灯笼法师:对,可变性是以一种类型安全的方式,将一个对象作为另一对象来引用.虽然是可变,但其实对象的引用地址是不会变的,只是忽悠下编译器. 刘大胖:师傅说的将一个对象作为另一对象来引用?这不就是继

自定义一个类加载器

http://www.cnblogs.com/xrq730/p/4847337.html 为什么要自定义类加载器 类加载机制:http://www.cnblogs.com/xrq730/p/4844915.html 类加载器:http://www.cnblogs.com/xrq730/p/4845144.html 这两篇文章已经详细讲解了类加载机制和类加载器,还剩最后一个问题没有讲解,就是 自定义类加载器.为什么我们要自定义类加载器?因为虽然Java中给用户提供了很多类加载器,但是和实际使用比起

Python爬取CSDN博客文章

之前解析出问题,刚刚看到,这次仔细审查了 0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.windows下环境搭建 3.java里连接redis数据库 4.关于认证 5.redis高级功能总结1.基础底层数据结构1.1.简单动态字符串SDS定义: ...47分钟前1 url :http://blog.csdn.net/youyou1543724847/

Linux下which、whereis、locate、find命令的区别

我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索.这些是从网上找到的资料(参考资料1),因为有时很长时间不会用到,当要用的时候经常弄混了,所以放到这里方便使用. which       查看可执行文件的位置 whereis    查看文件的位置 locate       配合数据库查看文件位置 find          实际搜寻硬盘查询文件名称 (find也可以根据文件大小-size 时间-atime 正则表达式-regex) 1.which 语法: [ro

[转]Linux下which、whereis、locate、find 命令的区别

我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索.这些是从网上找到的资料,因为有时很长时间不会用到,当要用的时候经常弄混了,所以放到这里方便使用. which       查看可执行文件的位置 whereis    查看文件的位置 locate       配 合数据库查看文件位置 find          实际搜寻硬盘查询文件名称 1.which 语法: [[email protected] ~]# which 可执行文件名称 例如: [[email pr

Nginx+Tomcat群集服务

一.简介 Tomcat是Apache 软件基金会(Apache SoftwareFoundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发而成.由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范.因为Tomcat 技术先进.性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的