JavaWeb#JSP内置对象
【1.JSP内置对象简介】
内置对象:不加声明就可以在JSP页面脚本中使用的成员变量。(使用这些对象可以更容易收集客户端发送的请求信息,响应客户端的请求及存储客户信息。)
主要介绍:out,request,response,session
【2.页面输出对象out】
out对象代表了向客户端发送数据的对象,通过out对象发送的内容将是浏览器需要显示的内容(是文本一级的,可以通过out对象直接向客户端写一个由程序动态生成的HTML文件。)
常用方法:print,println;
out对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。如:(clear、clearBuffer、flush、getBufferSize、getRemaining)
<%
out.println("hello");
out.println("world");
%>
//hello world
【3.访问请求参数request对象】
request对象代表的是来自客户端的请求(例如在form表单中填写的信息等,是最常用的对象。)
常用方法:getParameter、getParameterNames、getParameterValues(通过调用这几个方法来获取请求对象中所包含的参数的值。)
setAttribute与getAttribute方法
request的setAttribute与getAttribute方法一般都是成对出现的,首先通过setAttribute方法设置属性与属性值,然后通过getAttribute方法根据属性获取到与该属性对应的对象值。
(setAttribute与getAttribute方法都是在服务器端内部执行的,客户端不知道服务器端是否执行过这两个方法。)getParameter方法
request的getParameter方法的作用是获取到客户端通过表单或url请求参数发送过来的参数值(是客户端与服务器端之间的交互,服务器端要想获取到客户端发送过来的数据,就需要使用getParameter方法来获取。)
[没有与getParameter方法对应的setParameter方法。]request对象内数据的存活范围
当客户端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了。
(之后再向服务器端发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象没有任何关系,因此也无法获得在之前的request对象中所存放的任何数据。)
开始了大伙们!!!
[3.1各种方法]
可以用request对象取得请求的Header、信息(如浏览器版本、语言和编码等)、请求的方式(get/post)、请求的参数名称、参数值、客户端的主机名称等。
对应类javax.servlet.http.HttpServletRequest
常用方法:
getParameter(String):返回客户端向服务器端传送的参数值
getMethod():返回客户端向服务器端传送数据的方法
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举类型的数据(Enumeration)
getParameterValues(String):获得指定参数的所有值,返回String[]
getRequestURL():获得发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的机器名称
getServerName():获取服务器的名字
getServletName():客户端所请求的脚本文件路径
getServerPort():获取服务器端的端口
例:
<%
String a=request.getProtocol();//获取的是协议的名称
String b=request.getServletPath();//嗯。。貌似是获取当前文件名
String c=request.getMethod();//返回客户端向服务器端传送数据的方法
int d=request.getServerPort();//获取服务器端的端口
%>
<%=a %><br>
<%=b %><br>
<%=c %><br>
<%=d %><br>
结果:
HTTP/1.1
/First.jsp
GET
8080
[3.2]管理请求中的属性
在进行请求转发时,需要把一些数据传递到转发后的页面进行处理。这时,就需要使用request对象的setAttribute()方法将数据保存到request范围内的变量中。
request对象的setAttribute()方法的语法格式如下:
request.setAttribute(String name,Object object);
request对象的getAttribute()方法的语法格式如下:
request.getAttribute(String name);
例:
【index.jsp】
<html>
<head>
<title>Forward Example</title>
</head>
<body>
<%
request.setAttribute("name","jack");//传递属性name和对象值“jack”
%>
<jsp:forward page="forforward.jsp"/>
</body>
</html>
【forforward.jsp】
<html>
<head>
<title>forforward.jsp</title>
</head>
<body bgcolor=blue>
Welcome<br>
Here is forforward1.jsp<br>
<%= request.getAttribute("name")%>//根据属性name获取值jack
</body>
</html>
结果:
Welcome
Here is forforward1.jsp
jack
蓝色背景,嘻嘻(●'◡'●)
[3.3]处理中文[][][][#啊啊啊~本宝也没看懂 呜呜~O(┭┮﹏┭┮)O 咳咳,看懂再回来改 ][][][]
1.获取访问请求参数时乱码——对单个请求参数进行设置
<%String myname=new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"); %>
2.获取表单提交的信息乱码——对请求对象的所有参数进行设置
注意:一定要在页面中没有调用任何request对象的方法之前使用
<%request.setCharacterEncoding("UTF-8");%>
【4.页面响应对象response】
[][嘿嘿,第三个对象啦~还有俩就看完了(●'◡'●)][]
[4.1]
- response:表示返回给客户端的响应。
- 对应类javax.servlet.http.HttpServletResponse
(经常用于设置Http标题、添加cookie、设置响应内容的类型和状态、发送Http重定向和编码URL。) - 常用方法:
addCookie(Cookie):添加一个cookie对象。用于在客户端保存特定的信息
addHeader(String,String):添加http头信息,该Header信息将发送到客户端
containsHeader(String):判断指定名字的HTTP文件头是否存在
sendError(int, String):向客户端发送错误的信息
sendRedirect(String):重定向JSP文件。注意和jsp:forward的区别
setContentType(String):设置MIME类型与编码方式
[#上面这段过过过。。。]
[4.2 处理重定向 response.sendRedirect]
当你访问第一个页面的时候,页面要求你重新访问另外一个页面,因此客户端浏览器需要访问另外一个页面的地址。因此两个页面使用的是不同的request。
新建test.jsp:
<%
response.sendRedirect("forforward.jsp");
%>
访问test.jsp,在地址栏输入http://localhost:8080/servlet_example1/test.jsp,结果地址栏变为http://localhost:8080/servlet_example1/forforward.jsp,页面显示为forforward.jsp的页面
Welcome
Here is forforward1.jsp
null
在地址栏输入:http://localhost:8080/servlet_example1/test.jsp?name=zhangsan,页面还是
Welcome
Here is forforward1.jsp
null
无法接受参数。
【5. session对象】
[5.1]session对象简介
- session对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。
HTTP是无状态协议;Web Server对每一个客户端请求都没有历史记忆;session用来保存客户端状态信息。
浏览器不关闭,session对象会一直存在,且session对象只有一个。如果浏览器关闭重启,会创建新的session对象
- 这里引入一个概念Cookie
Cookie是记录在客户端,session是记录在服务器端。但是cookie记录在客户端,用户可以设置不允许写入cookie,用户也可以删除cookie或者修改cookie,不够可靠。
Session是写在服务器端内存中的内容,当写session的时候会为客户端的浏览器记录一个唯一的编号,同时为session也赋予同样的号码。当用户访问第二个页面的时候,服务器端会根据浏览器的编号去找同一个编号对应的session。这个编号叫sessionid。
[5.2]session对象方法
创建及获取客户的会话:
这可以通过session对象的setAttribute()方法和getAttribute()方法实现。从会话中移除指定的绑定对象:
对于存储在session会话中的对象,如果想将其从session会话中移除,可以使用session对象的removeAttribute()方法,该方法的语法格式如下:
removeAttribute(String name)销毁session:
通过session对象的invalidate()方法可以销毁session,其语法格式如下:
session.invalidate();
会话超时的管理:
session.getLastAccessedTime()
返回客户端最后一次与会话相关联的请求时间
session.getMaxInactiveInterval()
以秒为单位返回一个会话内两个请求最大时间间隔
session.setMaxInactiveInterval()
以秒为单位设置session的有效时间
很重要哦!!!
【index.jsp】
<html>
<head>
<title>Forward Example</title>
</head>
<body>
<form id="form1" action="session.jsp">//提交表单时,表单数据提交到session.jsp页面(action 属性规定当提交表单时,向何处发送表单数据。)
<input type="text" name="name"/>
<input type="submit" name="Submit" value="ok"/>
</form>
</body>
</html>
【session.jsp】
<body>
<%
String name=request.getParameter("name");//读取之前提交的数据提交表单的值
session.setAttribute("name",name);//将提交表单的值,①存入数据
%>
<form name="form2" action="result.jsp">////提交表单时,表单数据提交到result.jsp页面(action 属性规定当提交表单时,向何处发送表单数据。)
your address is:
<input type="text" name="address"/>
<input type="submit" name="Submit" value="ok"/>
</form>
</body>
【result.jsp】
<body>
<%String name=(String)session.getAttribute("name"); //读取刚刚①存下的数据
String solution=request.getParameter("address");//读取之前提交的数据
%>
your name is:
<%=name %>
your address is:
<%=solution %>
</body>
运行结果:
[5.3] pageContext对象
pageContext对象可以存取关于JSP执行期间所要用到的属性和方法。
可以获取JSP内置对象:
getSession():返回session对象
getServletConfig():返回config对象
getServletContext():返回application对象
[5.4] application全局应用程序对象
application对象在整个应用区域中都有效。application对象管理应用程序环境属性的方法分别介绍如下。
getAttributeNames():获得所有application对象使用的属性名。
getAttribute(String name):从application对象中获取指定对象名。
setAttribute(String key,Object obj):使用指定名称和指定对象在application对象中进行关联。
removeAttribute(String name):从application对象中去掉指定名称的属性。
【index.jsp】
<%@ page language="java" import="java.util.*" pageEncoding="Gb2312"%>
<html>
<head>
<title>Forward Example</title>
</head>
<body>
<%
if(application.getAttribute("counter") == null)
{
application.setAttribute("counter", "1");
}
else
{
String strnum = null;
strnum = application.getAttribute("counter").toString();
int icount = 0;
icount = Integer.valueOf(strnum).intValue();
icount++;
application.setAttribute("counter", Integer.toString(icount));
}
%>
您是第<%=application.getAttribute("counter") %>位访问者!
</body>
</html>
得到下面的页面:
刷新后,页面变为:
ps:
application对象可以是ServletContext类型的。
application的存活范围比request和session都要大。只要服务器没有关闭,application对象中的数据就会一直存在,在整个服务器的运行过程当中,application对象只有一个,它会被所有的用户共享。
application适用于在同一个应用程序中的各个用户共享数据。
其中getRealPath这个方法可以获取资源在服务器上的物理路径(绝对路径),常用来获取上传文件时要存储文件的路径。
[5.5 获取配置信息对象config]
config对象是ServletConfig类型,包含初始化参数以及一些实用方法。
在初始化参数中可以读取web.xml文件中的环境设置和服务器配置信息。
常用方法:
1.getServletName():返回Servlet的名称
2.getInitParameterNames():返回Servlet程序初始化所有的参数名
3.getInitParameter(String):返回Servlet程序初始参数的值
---分割线---
补充:
【获取cookie】
Cookie是由服务器端生成,发送给浏览器,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。
服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。
注意HTTP协议是无连接的,含义就是当客户端从服务器端得到某个文件的内容时,连接就会中断,相当于socket的close方法。但是考虑购物网站,当你在一个页面购买了东西,连接就断了,当你又访问另外一个页面去结账时,这时就不知道购买的东西是什么了。这时的解决办法就是cookie。也就是当你购买了某种商品后,服务器就在客户端记录下相应的信息来,这就是cookie。
但是要遵循两个原则:
(1)只允许写文本文档,不允许写其他类型的文件,避免那些恶意的程序。
(2)客户端可以阻止服务器写入。
结账的时候,服务器端只能拿到自己的web application写入的东西。张三和李四各买了同样的商品,那么可以通过浏览器的独一无二的编号来区分,通过这一点区分不同浏览器的内容。
Cookie:服务器端写到客户端的文本信息,是以名-值-对的形式。
通过cookie的getCookies()方法即可获取到所有cookie对象的集合;
通过cookie对象的getName()方法可以获取到指定名称的cookie;
通过getValue()方法即可获取到cookie对象的值。
另外将一个cookie对象发送到客户端使用了response对象的addCookie()方法。
【login.jsp】
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<html>
<head>
<title>Forward Example</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();
String user = "";
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("mrCookie")) {
user = cookies[i].getValue();
}
}
}
if ("".equals(user)) {
%>
<form id="form1" action="deal.jsp">
<input type="text" name="name" /> <input type="submit" name="Submit"
value="ok" />
</form>
<%
} else {
%>
欢迎<%=user%>再次光临
<%
}
%>
</body>
</html>
【deal.jsp】
<%
String user = request.getParameter("name");
Cookie cookie = new Cookie("mrCookie", user);
cookie.setMaxAge(60 * 60 * 24 * 30);
response.addCookie(cookie);
%>
<script type="text/javascript">
window.location.href = "login.jsp"
</script>
地址栏输入:
http://localhost:8080/ch5_example/login.jsp
页面显示
填写bingbing后提交,地址栏变为
http://localhost:8080/ch5_example/deal.jsp?name=bingbing&Submit=ok
页面显示
JavaWeb#JSP内置对象的更多相关文章
- JavaWeb——JSP内置对象application,JSP属性范围
application application语法 application对象 JSP属性范围 范围的分类 page request session application pagecontext延伸 ...
- JavaWeb——JSP内置对象request,response,重定向与转发 学习总结
什么是JSP内置对象 九大内置对象 requestJSP内置对象 request对象常用方法 request练习 responseJSP内置对象 response练习 response与request ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础
JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...
- IT兄弟连 JavaWeb教程 JSP内置对象经典面试题
1.请说明cookie.request.session.application的作用域和声明周期? 并说明它们适用与什么场景? request的生命周期是一次请求.可以用于JSP表单提交数据. ses ...
- IT兄弟连 JavaWeb教程 JSP内置对象1
JSP内置对象定义 JSP提供了由容器实现和管理的内置对象,也可以称之为隐含对象,这些内置对象不需要通过JSP页面编写来实例化,在所有的JSP页面中都可以直接使用,它们起到了简化页面的作用,JSP的内 ...
- jsp内置对象浅谈
jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...
- JSP内置对象-request
JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍 ...
- Jsp内置对象及EL表达式的使用
一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response HttpServletResponse ses ...
随机推荐
- PE文件结构(32/64差异)
1 基本概念 下表描述了贯穿于本文中的一些概念: 名称 描述 地址 是"虚拟地址"而不是"物理地址".为什么不是"物理地址"呢?因为数据在内 ...
- Flink 保证ExactlyOnce
Flink 保证 ExactlyOnce 1.使用执行ExactlyOnce 的数据源,比如 kafka 2.使用FlinkConsumer,开启CheckPointing,偏移量会保存通过Check ...
- Element form表单方法resetFields无效
之前遇到resetFields无效时都是自己手动用this.ruleForm = Object.assign({}, this.ruleForm, this.$options.data().ruleF ...
- VSCode添加某个插件后,Python 运行时出现Segmentation fault (core dumped) 解决办法
在VSCode添加某个插件后,Debug出现Segmentation fault (core dumped) 解决方案,在当前environment下运行: conda update --all
- Redis-技术专区-帮从底层彻底吃透RDB技术原理
每日一句 低头是一种能力,它不是自卑,也不是怯弱,它是清醒中的嬗变.有时,稍微低一下头,或者我们的人生路会更精彩. 前提概要 Redis是一个的键-值(K-V)对的内存数据库服务,通常包含了任意个非空 ...
- C# 实现图片上传
C# 实现图片上传 C#实现图片上传: 通过页面form表单提交数据到动作方法,动作方法实现保存图片到指定路径,并修改其文件名为时间格式 页面设置 这里使用的模板MVC自带的模板视图 <h2&g ...
- OpenCV 之 透视 n 点问题
透视 n 点问题,源自相机标定,是计算机视觉的经典问题,广泛应用在机器人定位.SLAM.AR/VR.摄影测量等领域 1 PnP 问题 1.1 定义 已知:相机的内参和畸变系数:世界坐标系中,n 个 ...
- CGLib浅析
CGLib浅析 什么是CGLib CGLIB实现动态代理,并不要求被代理类必须实现接口,底层采用asm字节码生成框架生成代理类字节码(该代理类继承了被代理类). 所以被代理类一定不能定义为final ...
- Identity角色管理二(显示角色)
需要将目前所有角色名显示出来,方法同用户管理 一.创建Index acction public async Task<ActionResult> Index() { var roles = ...
- 页面调用系统window打印
一. 打印:直接页面调用window.print(),当前页面就会转换成打印页面 当前页面是使用HTML拼接成A4纸表格样式的展示: doPrint:function(type) { // this. ...