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机或工作站,并采用大型数据 ...
随机推荐
- P1040加分二叉树
据说窝回去的那几天考了n次试 过去了一个月才想起来补锅 传送 首先来区分一下什么是中序遍历,什么又是前序遍历 中序遍历:左,根,右(也就是说给出一个序列(按照中序遍历的序列),第i个点左边的点都是i的 ...
- 将原生JS和jquery里面的DOM操作进行了一下整理
创建元素节点 1.原生: document.createElement("div") 2.jquery: $("<div></div>" ...
- Recurrent Neural Network(3):LSTM Basics and 《Inside Out》
下图是Naive RNN的Recurrent Unit示意图,可以看到,在每个时间点t,Recurrent Unit会输出一个隐藏状态ht,对ht加工提取后将产生t时刻的输出yt.而在下一个时间节点t ...
- 5G网络的深度强化学习:联合波束成形,功率控制和干扰协调
摘要:第五代无线通信(5G)支持大幅增加流量和数据速率,并提高语音呼叫的可靠性.在5G无线网络中共同优化波束成形,功率控制和干扰协调以增强最终用户的通信性能是一项重大挑战.在本文中,我们制定波束形成, ...
- mybatis全局配置mybatis-config.xml
大部分时候,我们都是在Spring 里面去集成MyBatis.因为Spring 对MyBatis 的一些操作进行的封装,我们不能直接看到它的本质,所以先看下不使用容器的时候,也就是编程的方式,MyBa ...
- mybatis 批量update报语法错误解决方法
1.为什么会报语法错误 原因:在 *.xml文件内使用了循环,在mybatis中默认是不允许使用批量修改. <update id="setMaxMin" parameterT ...
- TCP协议-流量控制
流量控制是通过滑动窗口来实现控制的.使用了坚持定时器,防止发送失败导致死锁.
- 移动app云测试平台
一:移动App云测试平台 1.云测试平台背景 随着智能手机的普及率和渗透率越来越高,App开发软件也越来越多.但是因为安卓和IOS的碎片化,尤其是安卓,因为完全开源的原因,导致设备繁多,品牌众多,版本 ...
- Springboot War包部署下nacos无法注册问题
目录 1. @EnableDiscoveryClient的使用 2. EnableDiscoveryClientImportSelector类的作用 3.AutoServiceRegistration ...
- Tesseract-OCR识别中文与训练字库
转自:https://www.cnblogs.com/lcawen/articles/7040005.html 关于中文的识别,效果比较好而且开源的应该就是Tesseract-OCR了,所以自己亲身试 ...