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 容易弄混的几点总结的更多相关文章
- Wpf border 容易弄混的两个属性
代码如下: <Border Margin=" > <Button Content="dafkafjk"></Button> </ ...
- js 数组容易弄混的那些方法
js数组中 我们很多数组的方法都知道其中的含义 但是每一次用的都不是很顺手 下边我给大家写了一个小小的demo 来理解那些 近似”双胞胎“的东西 // splice方法 var a=[1,2,3,4, ...
- Kindeditor(JSP)& 上传目录不存在
一.基本配置 Kindeditor是一款富文本编辑器,作用跟博客园写文章用的这个编辑器一样,都是为了让文本加入各种各样的修饰元素. 使用方法如下,解压缩,把期中的ASP\NET\PHP文件夹都删除,然 ...
- JSP技术基础(动态网页基础)
前言:如果说html为静态网页基础,那么jsp就是动态网页基础,两者的区别就是jsp在html的前面多加了几行而已.当然,jsp里面对java的支持度更高.要明白,js只是嵌入在客户端的小程序小脚本而 ...
- springMVC框架访问web-inf下的jsp文件
博客原文章:http://td.xue163.com/1042/1/10425265.html 用户提出问题:springMVC框架访问web-inf下的jsp文件,具体如下: 使用springMVC ...
- 关于springMVC框架访问web-inf下的jsp文件
问题:springMVC框架访问web-inf下的jsp文件,具体如下: 使用springMVC,一般都会使用springMVC的视图解析器,大概会这样配置 <property name=&qu ...
- js基础--javaScript数据类型你都弄明白了吗?绝对干货
欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...
- Spring6:基于注解的Spring MVC(上篇)
什么是Spring MVC Spring MVC框架是一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC ...
- Struts2的OGNL表达式语言
一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...
随机推荐
- C#中 += (s, e) => 这些字符什么意思
public MainWindow(){InitializeComponent();this.Loaded += (s, e) => DiscoverKinectSensor();this.Un ...
- Linux第八次学习笔记
系统级I/O 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程. 输入操作是从I/O设备拷贝数据到主存. I/O→主存 输出操作是从主存拷贝数据到I/O设备. 主存→I/O Unix I/O ...
- SQL Serve允许远程连接的解决方法
(一)用户需要做的第一件事是检查SQL数据库服务器中是否允许远程链接.在SQL 2008服务器中可以通过打开SQL Server 2008管理项目(SQL Server 2008 Management ...
- hello,world!
这可以算是我的第一篇博客了吧?真正意义上的开始... 我于2016年6月毕业于山东英才学院信工学院计算机管理系,至今已有近半年.几经周转,总算是准备稳定下来了.于是,当初的博客想法提上了日程. 本人工 ...
- openwrt的路由器重置root密码
家里路由器刷了openwrt,结果长期没登录,忘了root密码. 很容易就找到了这里介绍的办法 http://www.openwrt.org.cn/bbs/thread-12327-1-1.html ...
- GnuDIP制作动态域名服务器(DDNS Server)_转载http://blog.sina.com.cn/s/blog_4d4c23530100rlfj.html
这个阶段在做DDNS,虽然有dyndns和tzo两个免费的国外的DDNS服务器(支持免费用户注册使用),但是公司需求中要有GnuDIP这种服务.于是只能自己制作DDNS服务器,颇费功夫,于是想把这段记 ...
- android之外部文件存储和读取
这次借用上次读写内部存储的代码,只是对将更换文件的读写路径即可.这里需要对获取SDcard的读写权限. 一.AndroidManifest.xml 这里增加了对外部存储设备的读写权限 <?xml ...
- 第二十七课:滚轮事件,mouseenter与mouseleave事件的修复
滚轮事件 jQuery核心库没有对mousewheel事件的差异性进行处理,但作为一个常用的事件,本文讲解一下. mousewheel事件只有火狐浏览器不支持.mousewheel用于取得滚动距离的属 ...
- 第十一章:WEB浏览器中的javascript
客户端javascript涵盖在本系列的第二部分第10章,主要讲解javascript是如何在web浏览器中实现的,这些章节介绍了大量的脚本宿主对象,这些对象可以表示浏览器窗口.文档树的内容.这些章节 ...
- Ibatis学习总结5--动态 Mapped Statement
直接使用 JDBC 一个非常普遍的问题是动态 SQL.使用参数值.参数本身和数据列都 是动态的 SQL,通常非常困难.典型的解决方法是,使用一系列 if-else 条件语句和一连串 讨厌的字符串连接. ...