JSP内置对象
JSP内置对象是WEB容器创建的一组对象,不需要使用new关键字进行创建。
JSP九大内置对象:out、request、response、session、application、page、pageContext、exception、config
1、 out对象
out对象是JspWriter类的实例,作用是向客户端输出内容。
常用方法:
1、void println()
2、void clear() 清除缓冲区内容,如果在flush之后调用会抛出异常
3、void clearBuffer() 清除缓冲区内容,如果在flush之后调用不会抛出异常
4、void flush() 将缓冲区内容强制输出至客户端,清空缓冲区
5、int getBufferSize()
6、int getRemaining()
7、boolean isAutoFlush() 返回缓冲区满时是自动清空还是抛出异常
8、void close() 关闭输出流
out对象示例代码:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=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"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘index.jsp‘ starting page</title> </head> <body> <h1>out内置对象</h1> <% out.println("<h2>out常用方法测试</h2>"); out.println("第一句话<br>"); out.flush();//将缓冲区内容输出至浏览器 //out.clear();//这里会抛出异常。 out.clearBuffer();//这里不会抛出异常。 out.println("第二句话<br>"); %> 缓冲区大小:<%=out.getBufferSize() %>字节<br> 缓冲区剩余大小:<%=out.getRemaining() %>字节<br> 是否自动清空缓冲区:<%=out.isAutoFlush() %><br> </body> </html>
2、 request对象
request对象是HttpServletRequest类的实例,客户端的请求信息被封装在request对象中,在完成客户端请求之前,该对象一直有效。
常用方法:
1、String getParameter(String name) 返回name指定参数的参数值
2、String[] getParameterValues(String name) 返回包含参数name的所有值的数组
3、void setAttribute(String name,Object value) 存储此请求中的属性
4、Object getAttribute(String name) 返回指定属性的属性值
5、String getContentType() 返回请求体的MIME类型
6、String getProtocol() 返回请求用的协议类型及版本号
7、String getServerName() 返回服务器主机名
8、int getServerPort() 返回服务器接受此请求的端口号
9、String getCharacterEncoding() 返回字符编码方式
10、void setCharacterEncoding() 设置请求的字符编码方式
11、int getContentLength() 返回请求体的字节长度
12、String getRemoteAddr() 返回发送此请求的客户端IP地址
13、String getRealPath(String path) 返回指定虚拟路径的真实路径
14、String getContextPath() 返回上下文路径
以下是getParameter方法和getParameterValues方法的示例代码:
<body> <h1>request内置对象</h1> <% request.setCharacterEncoding("utf-8"); //解决中文乱码问题,无法解决URL传递中文出现的乱码问题。 %> 用户名:<%=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> </body>
【注】要解决URL中文传输乱码问题,需要修改tomcat安装根目录下/conf/server.xml的Connector标签,增加URIEncoding="utf-8"属性,重启tomcat服务器才会生效
3、 reponse对象
response对象是HttpServletResponse类的实例,包含了响应客户请求的有关信息,具有页面作用域。
常用方法:
1、String getCharacterEncoding() 返回响应时使用的字符编码
2、void setContentType(String type) 设置响应的MIME类型
3、PrintWriter getWriter() 返回向客户端进行输出字符的PrintWriter对象,该对象的输出提前于out内置对象
4、sendRedirect(String location) 重新定向客户端的请求
<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%> <% response.setContentType("text/html;charset=utf-8"); //设置响应的MIMI类型 out.println("<h1>response内置对象</h1>"); out.println("<hr>"); //out.flush();//强制输出缓冲区内容,使得out对象的内容在outer前输出 PrintWriter outer = response.getWriter(); //获得输出流对象 outer.println("我是response对象生成的输出流outer对象"); //response.sendRedirect("reg.jsp");//请求重定向 //请求重定向 //response.sendRedirect("request.jsp"); //请求转发 request.getRequestDispatcher("request.jsp").forward(request, response); %>
【注】请求重定向与请求转发的区别:
请求重定向:客户端行为,response.sendRedirect(url),等同于两次请求,前一次的请求对象不会保存,地址栏的URL会改变
请求转发:服务器行为,request.getRequestDispatcher(url).forward(request,response),是一次请求,转发后请求对象会保存,地址栏的URL不会改变
4、 session对象
Session表示客户端与服务器端的一次会话,是保存用户状态的一种机制,session保存在服务器内存中,不同用户对应不同session。
session对象是HttpSession类的实例,在第一个JSP页面被装载时自动创建,进行会话期间的管理。
常用方法:
1、long getCreationTime() 返回session创建时间,长整型毫秒为单位的时间
2、String getId() 返回session创建时JSP引擎为其设置的唯一ID号
3、Object setAttribute(String name,Object value) 使用指定名称将对象绑定到此会话
4、Object getAttribute(String name) 返回与此会话中的指定名称绑定在一起的对象,若不存在则返回null
5、String[] getValueNames() 返回包含此session中所有可用属性的数组
6、int getMaxInactiveInterval() 返回两次请求间隔多长时间此session被取消(单位秒)
<body> <h1>session内置对象</h1> <hr> <% SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); Date d = new Date(session.getCreationTime()); session.setAttribute("username", "admin");//设置当前session最大生成期限单位是秒 //session.setMaxInactiveInterval(10);//10秒钟 %> Session创建时间:<%=sdf.format(d)%><br> Session的ID编号:<%=session.getId()%><br> 从Session中获取用户名:<%=session.getAttribute("username") %><br> </body>
<body> <h1>session内置对象</h1> <hr> Session的ID编号:<%=session.getId()%><br> 从Session中获取用户名:<%=session.getAttribute("username") %><br> Session中保存的属性有:<% String[] names =session.getValueNames(); for(int i=0;i<names.length;i++) { out.println(names[i]+" "); } %> <br> </body>
session的生命周期:
1、创建:当客户端第一次访问某个jsp或者servlet时候,服务器会为当前会话创建一个SessionId,每次客户端向服务器发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验
2、活动:
①某次会话当中通过超链接打开的新页面属于同一次会话
②只要当前会话页面没有全部关闭,重新打开的浏览器窗口访问同一个项目资源时属于同一次会话
③除非本次会话的所有页面都关闭后再重新访问某个JSP或Servlet时将会创建新的会话
【注意:原有会话还存在,只是这个旧的Session仍然存在于服务端,只不过再也没有客户端会携带它然后交予服务端校验】
3、销毁:三种方式
①调用了session.invalidate()方法
②Session过期(超时)
③服务器重新启动
session超时设置:
1、session.setMaxInactiveInterval(time);//单位是秒
2、在web.xml中进行配置,单位是分钟,tomcat默认session超时为30分钟
<session-config> <session-timeout>10</session-timeout> </session-config>
5、application对象
application对象是ServletContext类的实例,可以存放全局变量,开始于服务器启动,终止于服务器关闭,不同用户的不同连接中可以对application对象的同一属性进行操作。
常用方法:
1、void setAttribute(String name,Object value)
2、Object getAttribute(String name)
3、Enumeration getAttributeNames() 返回所有可用属性名的枚举
4、String getServerInfo() 返回JSP引擎及版本号
<body> <h1>application内置对象</h1> <% application.setAttribute("country", "中国"); application.setAttribute("postcode", "00000"); application.setAttribute("email", "[email protected]"); %> 所在国家是:<%=application.getAttribute("country") %><br> application中的属性有:<% Enumeration attributes = application.getAttributeNames(); while(attributes.hasMoreElements()) { out.println(attributes.nextElement()+" "); } %><br> JSP(SERVLET)引擎名及版本号:<%=application.getServerInfo() %><br> </body>
6、 page对象
page对象是Object类的实例,指向当前JSP页面本身。
常用方法同Object类的常用方法。
7、 pageContext对象
pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,可以访问到本页所在的session,也可以取本页面所在的application的某一属性值。
常用方法:
1、JspWriter getOut()
2、HttpSession getSession()
3、Object getPage()
4、ServletRequest getRequest()
5、ServletResponse getResponse()
6、void setAttribute(String name,Object value)
7、Object getAttribute(String name,int scope) 在指定范围内取属性的值
8、int getAttributeScope(String name) 返回指定属性的作用范围
9、void forward(String url) 使当前页面导向另一页面
10、void include(String url) 在当前位置包含另一文件
8、 config对象
config对象是在一个servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
常用方法:
1、ServletContext getServletContext();//返回含有服务器相关信息的ServletContext对象
2、String getInitParameter(String name);//返回初始化参数的值
3、Enumeration getInitParameterNames();//返回Servlet初始化所需所有参数的枚举
9、 exception对象
exception对象是java.lang.Throwable类的实例,是一个异常对象,当一个页面在运行过程中发生了异常,就会产生这个对象。如果一个JSP页面要应用此对象,就必须【把isErrorPage设为true】,否则无法编译。
常用方法:
1、String getMessage();//返回描述异常的消息
2、String toString();//返回关于异常的简短描述消息
3、void printStackTrace();//显示异常及其栈轨迹
4、Throwable FillInStackTrace();//重写异常的执行栈轨迹
【注】errorPage属性指定处理异常的页面,isErrorPage属性指定该页面能否处理异常
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" errorPage="exception.jsp"%>
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" isErrorPage="true" %>
参考资料:慕课网【JAVA遇见HTML——JSP篇】http://www.imooc.com/learn/166
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。