Java Web学习总结(8)JSP(二)
一,JSP中的九个内置对象
|
名称 |
类型 |
描述 |
|
out |
javax.servlet.jsp.JspWriter |
用于页面输出 |
|
request |
javax.servlet.http.HttpServletRequest |
得到用户请求信息, |
|
response |
javax.servlet.http.HttpServletResponse |
服务器向客户端的回应信息 |
|
config |
javax.servlet.ServletConfig |
服务器配置,可以取得初始化参数 |
|
session |
javax.servlet.http.HttpSession |
用来保存用户的信息 |
|
application |
javax.servlet.ServletContext |
所有用户的共享信息 |
|
page |
java.lang.Object |
指当前页面转换后的Servlet类的实例 |
|
pageContext |
javax.servlet.jsp.PageContext |
JSP的页面容器 |
|
exception |
java.lang.Throwable |
表示JSP页面所发生的异常,在错误页中才起作用 |
1,page
page对象表示当前一个JSP页面,可以理解为一个对象本身
2,out
out对象用于向客户端发送文本数据。
3,pageContext
pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象(容器),可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
通过pageContext获得其他对象:
|
getException方法 |
返回exception隐式对象 |
|
getPage方法 |
返回page隐式对象 |
|
getRequest方法 |
返回request隐式对象 |
|
getResponse方法 |
返回response隐式对象 |
|
getServletConfig方法 |
返回config隐式对象 |
|
getServletContext方法 |
返回application隐式对象 |
|
getSession方法 |
返回session隐式对象 |
|
getOut方法 |
返回out隐式对象 |
pageContext作为域对象
pageContext对象可以作为容器来使用,因此可以将一些数据存储在pageContext对象中。
pageContext对象的常用方法:
|
setAttribute(String name,Object value) |
添加一个名称为name的属性,值为value |
|
getAttribute(String name) |
获取名称为name的属性 |
|
removeAttribute(String name) |
移除名称为name的属性 |
|
findAttribute(String name) |
根据name查找各个域中的属性 |
当使用findAttribute查找某个属性时,findAttribute方法按照查找顺序"page→request→session→application"在这四个对象中去查找,只要找到了就返回属性值,如果四个对象都没有找到要查找的属性,则返回一个null。
二,JSP属性范围
JSP中提供了四种属性范围,如下:
当前页(pageContext):一个属性只能在一个页面中取得,跳转到其他页面无法取得
一次服务器请求(request):一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续取得。
一次会话(session):一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话表示一个人,这个人设置的东西只要这个人不走,就依然有效)
上下文中(application):在整个服务器上设置的属性,所有人都可以访问
1,page属性范围(pageContext)
在一个页面设置的属性,跳转到其他页面就无法访问了。但是在使用page属性范围的时候必须注意的是,虽然习惯上将页面范围的属性称为page范围,但是实际上操作的时候是使用pageContext内置对象完成的。
例如:
<%@ page language="java" errorPage="/error.jsp" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
pageContext.setAttribute("name","Zender"); String name = (String)pageContext.getAttribute("name");
%>
name:<%=name %>
</body>
</html>
运行结果如下:

使用<jsp:forward page="/index2.jsp" />标签进行服务器跳转到index2.jsp
Index.jsp
<%@ page language="java" errorPage="/error.jsp" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
pageContext.setAttribute("name","Zender");
%>
<%--使用jsp:forward标签进行服务器端跳转--%>
<jsp:forward page="/index2.jsp" />
</body>
</html>
Index2.jsp
<%@ page language="java" errorPage="/error.jsp" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String name = (String)pageContext.getAttribute("name");
%>
name:<%=name %>
</body>
</html>
运行结果如下:

使用了服务器端跳转,但是发现内容并不能取得,证明page范围的属性只能在本页中取得,跳转到其他页面之中不能取得。
2,request属性范围
request属性范围表示在一次服务器跳转中有效,只要是服务器跳转,则设置的request属性可以一直传递下去。
例如:
Index.jsp
<%
request.setAttribute("name","Zender");
%>
<%--使用jsp:forward标签进行服务器端跳转--%>
<jsp:forward page="/index2.jsp" />
Index2.jsp
<%
String name = (String)request.getAttribute("name");
%>
name:<%=name %>
运行结果如下:

修改Index2.jsp代码如下:
<%
String name = (String)request.getAttribute("name");
%>
name:<%=name %>
<a href="/JSP/index3.jsp">链接跳转</a>
Index3.jsp代码如下:
<%
String name = (String)request.getAttribute("name");
%>
name:<%=name %>
使用了超链接的方式传递的话,则属性是无法向下继续传递的,一旦跳转之后,地址栏改变,所以此种跳转也可以称为客户端跳转。点击链接跳转结果如下:

3,Session属性范围
session设置的属性不管如何跳转,都可以取得的(session只针对一个用户)。
例如:
Index.jsp
<%
session.setAttribute("name","Zender");
%>
<%--使用jsp:forward标签进行服务器端跳转--%>
<jsp:forward page="/index2.jsp" />
Index2.jsp
<%
String name = (String)session.getAttribute("name");
%>
name:<%=name %>
<%--使用超链接这种客户端跳转--%>
<a href="/JSP/index3.jsp">链接跳转</a>
Index3.jsp
<%
String name = (String)session.getAttribute("name");
%>
name:<%=name %>
访问Index.jsp(服务器端跳转到index2.jsp):

点击链接跳转(客户端跳转到index3.jsp):

4,application属性范围
application属性范围是在服务器上设置的一个属性,所以一旦设置之后任何用户都可以浏览到此属性(服务器上设置了过多的application属性,则会影响到服务器的性能)。
例如:
Index.jsp
<%
application.setAttribute("name","Zender");
%>
<%--使用jsp:forward标签进行服务器端跳转--%>
<jsp:forward page="/index2.jsp" />
Index2.jsp
<%
String name = (String)application.getAttribute("name");
%>
name:<%=name %>
<%--使用超链接这种客户端跳转--%>
<a href="/JSP/index3.jsp">链接跳转</a>
Index3.jsp
<%
String name = (String)application.getAttribute("name");
%>
name:<%=name %>
访问Index.jsp(服务器端跳转到index2.jsp):

点击链接跳转(客户端跳转到index3.jsp):

重启web服务器后访问index2.jsp或者index3.jsp:


三,JSP标签
JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。
常用标签有以下三个:
1,<jsp:include>标签
<jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。
语法:<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
|
page |
用于指定被引入资源的相对路径,它也可以通过执行一个表达式来获得。 |
|
flush |
指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。 |
<jsp:include>标签与include指令的区别:
<jsp:include>标签是动态引入, <jsp:include>标签涉及到的2个JSP页面会被翻译成2个servlet,这2个servlet的内容在执行时进行合并。 而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行合并。
2,<jsp:forward>标签
<jsp:forward>标签用于把请求转发给另外一个资源(服务器跳转,地址不变)。
语法:<jsp:forward page="relativeURL | <%=expression%>" />
|
page |
用于指定请求转发到的资源的相对路径,它也可以通过执行一个表达式来获得。 |
3,<jsp:param>标签
在使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数。
,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数。
语法1:
<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
语法2:
<jsp:forward page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:forward>
|
name |
用于指定参数名 |
|
value |
指定参数值 |
例如:
index.jsp
<%--使用jsp:forward标签进行服务器端跳转,--%>
<jsp:forward page="/index2.jsp" >
<jsp:param value="10086" name="num"/>
<jsp:param value="10010" name="num2"/>
</jsp:forward>
Index2.jsp
num:<%=request.getParameter("num") %>
<br/>
num2:<%=request.getParameter("num2") %>
运行结果如下:

Java Web学习总结(8)JSP(二)的更多相关文章
- Java Web学习笔记之---JSP
Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...
- java web学习之初识jsp
用java语言(+html语言)开发动态资源的技术: jsp的运行过程,1:tomcat服务器将jsp代码翻译成java代码,并且编译成class文件 2:tomcat服务器构造类对象 3:tomca ...
- Java Web 学习与总结(二)Servlet核心接口+Servlet3.0配置
Servlet3.0版本对Servlet配置进行了重大变革,Servlet类不需要再麻烦的去编辑web.xml文件了,只需要在类上面进行注释就可以了,获得了 Java 社区的一片赞誉之声,以下是新增的 ...
- java web学习笔记-jsp篇
1.java web简介 1.1静态页面与动态页面 表现形式 所需技术 静态网页 网页内容固定,不会更新 html,css 动态网页 网页内容由程序动态显示,自动更新 html,css,DB,ja ...
- java web 学习笔记 编码问题总结
java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...
- Java Web学习笔记之---EL和JSTL
Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...
- Java Web 学习路线
实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了.大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总算 ...
- Java web 学习之旅
java web学习之旅 来公司十天了,感觉已经慢慢地融入了这个环境中,几个学长人都很好,都是在他们帮助下,我才能比较顺利的开始了学习java web的旅途. 来这里学习的第一个阶段是做一个简单的用户 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java Web 学习笔记 1
Java Web 学习笔记 1 一.Web开发基础 1-1 Java Web 应用开发概述 1.1.1 C/S C/S(Client/Server)服务器通常采用高性能的PC机或工作站,并采用大型数据 ...
随机推荐
- change可以重命名列名,也可能修改列的类型和约束,而modify只能修改列的数据类型。
change 可以重命名列名,也可能修改列的数据类型,而modify只能修改列的数据类型. change 比modify功能多,如果要用change修改字段类型和约束,要加上新字段名,新字段名可以和原 ...
- 【GDAL】聊聊GDAL的数据模型(二)——Band对象
在GDAL中栅格数据直接参与各种计算的重要对象是Band 摘录官方描述: Raster Band A raster band is represented in GDAL with the GDALR ...
- 把Notepad++的tab设置为四个空格
在7.1版本以及以后 设置->首选项->Language 勾选Repalce by space 在7.1版本以前 设置->首选项->制表符设置 右侧,转为空格,勾选上 参考: ...
- MySQL 查询语句--------------进阶8:分页查询
#进阶8:分页查询 /* 应用场景:要显示的数据,一页显示不全,需要分页提交sql请求 语法: select 查询列表 from 表 [join type] join 表2 on 连接条件 [wher ...
- Codeforces Round #285 (Div. 2)C. Misha and Forest(拓扑排序)
传送门 Description Let's define a forest as a non-directed acyclic graph (also without loops and parall ...
- 用递归方法求n!
题目: 编写一个程序,输入n,求n!(用递归的方式实现). public class test { public static long fac(int n){ if(n<0){ return ...
- 洛谷 P1049 装箱问题(01背包)
一道水题,但看到好久没有发博客了,再一看是一道noip普及组t4,就做了. 题目链接 https://www.luogu.org/problemnew/show/P1049 解题思路 一道裸的01背包 ...
- [CodeForces 52C]Circular RMQ
题目传送门 评分:省选/NOI-,难度:普及+/提高 这题真的和RMQ没有半点关系,只需要一个裸的线段树,连pushdown都不需要,只需要两种操作:区间修改和区间求最小值,在回溯时加上标记即可,唯一 ...
- [fw]Nvidia Linux Drive Privilege Escalation
/* Anonymous * * How to use: sudo rm -rf / * * greetz: djrbliss, kad, Ac1dB1tch3z, nVidia! * * Only ...
- 解决java.net.BindException: Address already in use(Bind failed)端口占用问题
问题描述: 解决办法: sudo lsof -i:20101ps -ef|grep 9905kill -9 9905ps -ef|grep 9905 ------------------------- ...