JSP内置对象(上)
在JSP中为了简化页面的开发提供了一些内置的对象。这些对象不需要由JSP的编写者通过new关键字实例化,他们都由容器实现和管理,在所有的JSP页面中都可以使用内置对象。
JSP中共有9大内置对象:
- out对象
- requset对象
- response对象
- session对象
- pageContext对象
- application对象
- config对象
- page对象
- exception对象
JSP内置对象(下):http://wxmimperio.coding.io/?p=329
PS:
【web对象的请求响应模式】
1.用户从客户端发送HTTP请求(request)到web服务器端
2.服务器给用户做相应的HTTP响应(response)返回客户端
【表单提交的两种方式:get and post】
1.get:以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2kb。安全性比较低但效率比post方式高,适合提交数据量不大,安全性不高的数据。比如:搜索、查询
2.post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。比如:注册、修改、上传
1.out对象
out对象被封装成javax.servlet.jsp.JspWriter接口,主要用来向客户端输出数据,代表输出流的对象。
常用的方法:
- out.print()、out.println():向客户端打印字符串
- out.clear():清除缓冲区里的数据,但不会把数据输出到客户端,如果在flush之后调用会抛出异常
- out.flush():输出缓冲区里的数据
- out.clearBuffer():清除缓冲区里的数据,并把数据输出到客户端,如果在flush之后调用不会抛出异常
- out.getBufferSize():获得缓冲区大小
- out.getRemaining():获得缓冲区剩余空间大小
- out.close():关闭输出流
- out.isAutoFlush():返回布尔值,判断是否为自动清除缓存
代码:
- <body>
- println方法:<%out.println("打印输出");%><br>
- getBufferSize方法:缓冲区大小=<%=out.getBufferSize()%><br>
- getRemaining方法:缓冲区剩余大小=<%=out.getRemaining()%><br>
- isAutoFlush方法:是否自动清除缓冲区:<%=out.isAutoFlush()%><br>
- clear方法:<%out.close();%><br>
- <%--
- clearBuffer方法:<%out.clearBuffer();%><br>
- flush方法:<%out.flush();%><br>
- close方法:<%out.close();%><br>
- --%>
- </body>
2.request对象
request对象代表请求对象,他被封装成HttpServletRequest接口。通过getParameter方法可以得到requset的参数,通过get、post、head等方法可以得到request的类型,通过Cookies、Referer等可以得到请求的HTTP头。来自客户端的请求经Servlet容器处理后,有request对象进行封装,他作为jspServlet()方法的一个参数由容器传递给JSP页面。
常用的方法:
- getParamter(String name):获得客户端传给服务器端的参数值,参数由name指定
- getParameterValues(String name):获得指定参数的所有值,参数由name指定
- getProtocol():获取客户端向服务器端传送数据所依据的协议类型及版本号
- getServerName():获取服务器的名字
- getServerPath():获取客户端所请求的脚本文件的路径
- getServerPort():获取服务器的端口号
- getContentLength():返回请求的长度,如果长度不确定,返回-1
- getCharacterEncoding():返回请求中的编码方式
- getLocalAddr():返回接收到请求的网络接口的IP地址,这个方法是在Servlet 2.4规范中新增的方法
- getLocalName():返回接收到请求的IP接口的主机名,这个方法是在Servlet 2.4规范中新增的方法
- setAttribute(String name,java.lang.Object objt):储存此请求中的属性
- getAttribute(String name):返回由name指定的属性,如果此属性不存在,则返回一个null值
代码:
requestForm.jsp
- <form name="requsetFrom" action="requestObject.jsp" method="post">
- <table>
- <tr>
- <td>用户名:</td>
- <td><input type="text" name="username"></td>
- </tr>
- <tr>
- <td>兴趣:</td>
- <td>
- <input type="checkbox" name="favorite" value="basketball">篮球
- <input type="checkbox" name="favorite" value="music">音乐
- <input type="checkbox" name="favorite" value="football">足球
- </td>
- </tr>
- <tr>
- <td><input type="submit" value="提交"></td>
- </tr>
- </table>
- </form>

requestObject.jsp
- <body>
- <%
- /*解决中文乱码问题,但不能解决用URL传递中文的乱码*/
- request.setCharacterEncoding("utf-8");
- /*调用setAttribute方法*/
- request.setAttribute("password","123456789");
- %>
- 用户名:<%=request.getParameter("username")%><br>
- 兴趣:
- <%
- if(request.getParameterValues("favorite") != null) {
- String[] favorites = request.getParameterValues("favorite");
- for(int i=0;i<favorites.length;i++) {
- out.println(favorites[i]+" ");
- }
- }
- %><br>
- 服务器版本号:<%=request.getProtocol()%><br>
- 服务器名字:<%=request.getServerName()%><br>
- 客户端请求的文件路径:<%=request.getServletPath()%><br>
- 服务器端口号:<%=request.getServerPort()%><br>
- 请求长度:<%=request.getContentLength()%><br>
- 请求中编码方式:<%=request.getCharacterEncoding()%><br>
- 请求中网络接口的IP:<%=request.getLocalAddr()%><br>
- 请求中的主机名:<%=request.getLocalName()%><br>
- 获取指定属性:<%=request.getAttribute("password")%><br>
- </body>

3.response对象
response被包装成HttpServletResponse接口,他封装了JSP产生的响应,然后被发送到客户端以响应客户的请求。和request对象一样,他由容器生成,作为jspService()方法的参数被传入JSP。他具有页面作用域,即访问一个页面时,该页面的response对象只能对该页面有效,其他页面的response对象对当前页面无效。
常用的方法:
- flushBuffer():强制把当前缓冲区的内容发送到客户端
- getBufferSize():返回缓冲区大小
- addCookie(Cookie cook):添加一个Cookie对象,用来保存客户端信息
- sendError(int):向客户端发送错误的信息
- sendRedirect(String location):把响应发送到另一个位置进行处理
- setContentType(String ContentType):设置响应的MIME类型
- getWriter():返回一个可以向客户端输出字符的对象
- getCharacterEncoding():返回响应所用的编码类型
PS:
【请求重定向】
客户端行为,response.sendRedirect(),从本质上讲等同于发出两次请求,前一次请求对象不会被保存,地址栏的URL地址会发生改变
【请求转发】
服务器行为,requset.getRequestDispatcher().forward(request,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会发生变化
代码:
- <body>
- 缓冲区大小=<%=response.getBufferSize()%><br>
- <%--错误=<%response.sendError(404);%><br>--%>
- 响应的编码类型=<%=response.getCharacterEncoding()%><br>
- <%
- response.setContentType("text/html;charset=utf-8");//设置响应的MIME类型
- /*response生成的输出流优先级高于内置对象out,先进行打印输出*/
- PrintWriter outer = response.getWriter();//获得输出流
- outer.println("response生成的输出流<br>");
- /*使用了一个Cookie,每次访问此页面时,就通过requset对象把客户端的所有Cookie获取过来*/
- Cookie[] cookies = request.getCookies();
- Cookie cookie_response = null;
- List list = Arrays.asList(cookies);
- Iterator it = list.iterator();
- while (it.hasNext()) {
- Cookie temp = (Cookie)it.next();
- if(temp.getName().equals("_access_time")); {
- cookie_response = temp;
- break;
- }
- }
- if(cookie_response != null) {
- outer.println("访问时间="+cookie_response.getValue()+"<br>");
- cookie_response.setValue(new Date().toString());
- } else {
- cookie_response = new Cookie("_access_time",new java.util.Date().toString());
- }
- response.addCookie(cookie_response);
- response.flushBuffer();
- %>
- </body>
4.session对象
session对象用来保存每个用户信息,以便跟踪每个用户的操作状态。其中,session信息保存在容器中,session的ID保存在客户端的Cookie中。session表示客户端与服务器的一次会话,web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间他表示特定的一段时间,在服务器内存中保存着不同用户的session,session对象在第一个jsp页面被装载时自动创建,完成回话管理。
【生命周期】
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开服务器结束,称为一个会话。当一个用户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象。session对象是HttpSession类的一个实例.
创建:
当客户端第一次访问某个jsp或者servlet时候,服务器会为当前回话创建一个SessionId,每次酷虎段想服务器发送请求时,都会将此SessionId携带过去,服务器会对此SessionId进行校验
活动:
某次回话当中通过超链接打开的新页面属于同一次会话,只要当前回话页面乜有全部关闭,重新打开新的浏览器窗口访问同一个项目资源时属于同一次会话,除非本次会话的所有页面都关闭,再新访问某个jsp或者servlet将会创建新的会话,旧的会话还在,只是这个旧的sessionID仍然存在服务器端,只不过再也没有客户端会携带它然后然后交给服务器端校验。
销毁:
调用session. invalidate()方法、Session过期、服务器重启(Tomcat默认超时时间是30分钟)
web.xml配置销毁时间(分钟):
<session-config>
<session-timeout>10</session-timeout>
</session-config>
常用的方法:
- getCreationTime():返回session被创建的时间,最小单位为千分之秒
- getId():返回每个session不同的唯一标识
- getMaxInactiveInterval():返回两次请求之间session销毁的时间,负值表示永远不会超时
- invalidate():销毁这个session对象
- getAttributeNames():返回session对象中储存的每一个属性对象,结果为一个枚举类的实例
- getAttribute(String name):获取指定名字name相联系的属性
- setAttribute(String name,java.lang.Object value):设置指定名字name的属性值value,并储存在session中
代码:
- <body>
- <%
- //格式化日期
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
- Date date = new Date(session.getCreationTime());
- session.setAttribute("username","admin");
- session.setAttribute("password","123456");
- //设置当前session的生命为10秒钟
- session.setMaxInactiveInterval(10);
- %>
- session创建的时间=<%=sdf.format(date)%><br>
- session的ID=<%=session.getId()%><br>
- 从session中获取=<%=session.getAttribute("username")%><br>
- 从session获得所有属性=
- <%
- Enumeration e = session.getAttributeNames();
- while (e.hasMoreElements()) {
- out.println(e.nextElement()+" ");
- }
- /*session.invalidate();*/
- %><br>
- </body>
参考:JSP应用开发详解(第三版)、慕课网
JSP内置对象(上)的更多相关文章
- Java遇见HTML——JSP篇之JSP内置对象(上)
一.JSP内置对象简介 1.1.内置对象简介 JSP内置对象是WEB容器中创建的一组对象,可以直接使用不需要new,如截图中的out 对象. JSP有九大内置对象: 五大常用对象: out.reque ...
- JAVA遇见HTML——JSP篇(JSP内置对象上)
action:表单交给哪个动作去处理 MIME类型: 浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理文档:因此服务器设置正确以将正确的MIME类型附加到响应对象的头部是非常重要的. 语法 ...
- jsp内置对象浅谈
jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...
- JSP内置对象-request
JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍 ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础
JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...
- JSP内置对象详解
jsp中内置对象:request.response.session.applecation.out.pagecontesx.config.page.exception.cookie 1.request ...
- JSP内置对象(下)
JSP中共有9大内置对象: out对象 requset对象 response对象 session对象 pageContext对象 application对象 config对象 page对象 excep ...
- JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象
Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...
随机推荐
- 知名IT企业待遇一览表
115家IT公司待遇一览表 作者是西电通院2013届毕业硕士,依据今年找工作的情况以及身边同学的汇总,总结各大公司的待遇例如以下,吐血奉献,公司比較全.下面绝对是各大公司2013届校招的数 ...
- android 61 logcat
package com.itheima.logcat; import android.os.Bundle; import android.app.Activity; import android.ut ...
- group by是什么意思 mysql中
mysql语法中group by是什么意思? 在百度中搜索半天,最后找到一篇解释比较好的(不是博文,是百度知道,很郁闷那么多网友怎么就没人解释的清楚),链接如下: http://zhidao.baid ...
- ASI进行POST网络请求
第一步,导入文件 //ASI进行GET数据请求 需要导入的头文件是 ASIHTTPRequest.h //ASI进行POST数据请求 需要导入的头文件是 ASIFormDataRequest.h // ...
- ubuntu14.04使用root用户登录桌面 分类: 学习笔记 linux ubuntu 2015-07-05 10:30 199人阅读 评论(0) 收藏
ubuntu安装好之后,默认是不能用root用户登录桌面的,只能使用普通用户或者访客登录.怎样开启root用户登录桌面呢? 先用普通用户登录,然后切换到root用户,然后执行如下命令: vi /usr ...
- vs2012 aspx 没有设计视图了?
vs2012的html设计视图没有了!重新安装一次都不行!现在已经通过简单办法来解决了 其实当你打开 HTML设计器 设置时, “启用 HTML设计器" 这里是打勾的!这时千万不要放弃.先 ...
- Windows Server 2008 R2 域控制器部署指南
一.域控制器安装步骤: 1.装 Windows Server 2008 R2并配置计算机名称和IP地址(见 附录一) 2.点击“开始”,在“搜索程序和文件”中输入Dcpromo.exe后按回车键: 3 ...
- C语言基础知识小总结(2)
上个总结比较笼统,下面写的稍微详细点吧算是. 一.控制台屏幕打印 1.putchar(); 格式: void putchar(char c); //直接把一个字符输出到屏幕上 2.print ...
- Singleton设计模式 分类: 设计模式 2014-12-03 17:54 59人阅读 评论(0) 收藏
实现方法: public class SingleTon<T> where T : class, new() { protected SingleTon() { } pri ...
- ubuntu15.10升级时校验和不符的解决方法
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 # 错误 # 原因分析 进入/var/lib/apt/lists/partial看下吧: 看到了吧 ...