JSP内置对象

1.内置对象简介

1.1内置对象的简介

JSP内置对是Web容器创建的一组对象,不适用new关键字就可以使用的内置对象

Tips:如下代码中的out就是内置对象

<%
int[] value={60,70,80};
    for(int i:value) {
        out.print(i)
    }
%>

1.2 JSP九大内置对象

  • out对象
  • request对象
  • response对象
  • session对象
  • application对象
  • Page、pageContext、exception对象、config对象

2.四种作用域范围

>

名称作用域
Page当前页面有效
request当前请求中有效
session当前回话中有效
application在所有应用程序中有效

Tips:

1.Page

在当前页面有效,即用户请求的页面有效,当当前页面关闭时,page对象将相应回馈给客户端后释放

2.request

一个HTTP请求的处理可能需要多个Servlet合作,而这几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了。request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。 所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。

3.session

session作用域比较容易理解,同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session作用域的体现。如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。

4.application

如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。 整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。 application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。

3.out对象

3.1 什么是缓冲区

缓冲区(Buffer)就是内存的一块区域用来保存临时数据

3.2 Out对象

Out对象是JspWriter类的实例,是向客户端输出内容的对象
常用方法如下:
* 1.void println() 向客户端打印字符串
* 2.void clear() 清除缓冲区中的内容,如果在flush之后会抛出异常
* 3.void clearBuffer() 清空缓冲区的内容,在flush之后不会抛出异常
* 4.void flush() 将缓冲区内容输出到客户端
* 5.int getBufferSize() 返回缓冲区字节大小,如不设置缓冲区则为0
* 6.int getRemaining() 返回缓冲区还剩余多少可用
* 7.boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
* 8.void close() 关闭输出流

案例演示:

<body>
<%
    out.println("<h2>静夜思</h2>");
    out.println("床前明月光,<br>");
    out.println("疑是地上霜。<br>");
    out.flush(); //将缓冲区中的内容输出到客户端
    out.println("举头望明月,<br>");
    out.println("低头思故乡。<br>");

    out.getRemaining(); //获取缓冲区剩余字符大小
%>
<!-- 获取缓冲区字符大小 -->
缓冲区中字符大小:<%=out.getBufferSize() %> byte<br>
缓冲区剩余容量大小:<%=out.getRemaining() %> byte<br>
</body>

演示结果

静夜思

床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
缓冲区中字符大小:8192 byte
缓冲区剩余容量大小:8112 byte

4.request对象

表单提交的两种方式:get和post

4.1 get和post区别

<form name="regForm" action="动作" method="提交方式"></form>

1.get:

以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2kb。安全性低,但效率比post方式高。适合提交数据量不大,安全性不高的数据。比如:搜索、查询等功能。

2.post

将用户提交的信息HTML HEADER内。适合提交数据量大,安全性高的影虎信息。比如:注册、修改、上传等功能。

案例演示

1.get提交方式

 <form action="doLogin.jsp" name="loginForm" method="get">
        <table>
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="userName"/></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td><input type="submit" name="login"></td>
            </tr>
        </table>
    </form>

浏览器地址栏:

http://localhost:8080/web/doLogin.jsp?userName=%E5%BC%A0%E4%B8%89&password=123456&login=%E6%8F%90%E4%BA%A4

2.post提交方式

Tips:

地址栏不会显示用户提交的信息

http://localhost:8080/web/doLogin.jsp

4.2 request对象

客户端的请求信息被封存在request对象中,通过它才能了解到客户的需求。requset对象是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。

4.2.1 requset对象常用的方法

方法功能
String getParameter(String name)返回name属性指定参数的参数值
String[] getParameterValue(String name)返回包含参数name的所有值的数组
void setAttribute(String,Object)存储此请求中的属性
Object getAttribute(String name)返回指定属性的属性值
String getContentType()得到请求的MIME类型
String getProtocol()返回请求用的协议类型和版本号
String getServerName()返回接受请求的服务器主机名
int getServerPort()返回服务器接受此请求所用的端口号
String getCharacterEncoding()返回字符编码方式
void setCharacterEncoding()设置请求的字符编码方式
int getContentLength()返回请求题的长度(以字节数)
Stirng getRemoteAddr()返回发送此请求的客户端IP地址
String getRealPath(String path)返回一虚拟路径的真实路径
String request.getContexPath()返回上下文路径

4.2.2 案例演示:
发送端jsp页面表单

1.首先创建一个jsp页面,命名为:request.jsp

<form action="doRequest.jsp" name="loginForm" method="post">
        <table>
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="userName"/></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td><input type="checkbox" name="favourite" value="read">读书
                <input type="checkbox" name="favourite" value="music">音乐
                </td>
                <td>
                <input type="checkbox" name="favourite" value="running">跑步
                <input type="checkbox" name="favourite" value="swimming">游泳
                </td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" name="login"></td>
            </tr>
        </table>
    </form>

接收端jsp页面代码:
2.创建一个jsp页面,命名为:doRequest.jsp,这个页面的作用是接收从requset页面传递的参数。

<body>
<lable>用户名: <%=request.getParameter("userName") %></lable><br>
<lable>密码: <%=request.getParameter("password") %></lable><br>
<lable>兴趣爱好:
<%
      //getParameterValues()返回一个组名称相同的集合的值
    String [] str=request.getParameterValues("favourite");
    if(str!=null) {
        for(String s:str) {
            out.println(s+"&nbsp;&nbsp;");
        }
    }       
%>
</lable>
</body>

浏览器运行效果:

用户名: sdfsd
密码: asdfa
兴趣爱好: read   music   running   swimming  

当在表单中输入汉字的时候,接收端的jsp页面显示的是乱码,这是因为,request对象接收和提取参数的默认编码方式为”iso-8859-1”,所以需要在提取参数之前修改编码方式为”utf-8”

<% 
    //设置request对象接收参数以"utf-8"编码提取,默认的编码为"iso-8859-1"
    request.setCharacterEncoding("utf-8"); 
%>

其他常用方法代码

<div>
得到请求的MIME类型:                      <%=request.getContentType() %><br>
返回请求用的协议类型和版本号         <%=request.getProtocol() %><br>
返回接受请求的服务器主机名:         <%=request.getServerName() %><br>
返回服务器接受此请求所用的端口号:<%=request.getServerPort() %><br>
返回字符编码方式                             <%=request.getCharacterEncoding() %><br>
返回请求题的长度(以字节数)        <%=request.getContentLength() %><br>
返回发送此请求的客户端IP地址:   <%=request.getRemoteAddr() %><br>
返回一虚拟路径的真实路径:       <%=request.getRealPath("request.jsp") %><br>
返回上下文路径:               <%=request.getContextPath() %>
</div>
用户名: 张三
密码: 1234567
兴趣爱好: read   music   running   swimming   
得到请求的MIME类型: application/x-www-form-urlencoded
返回请求用的协议类型和版本号 HTTP/1.1
返回接受请求的服务器主机名: localhost
返回服务器接受此请求所用的端口号:8080
返回字符编码方式 utf-8
返回请求题的长度(以字节数) 137
返回发送此请求的客户端IP地址: 0:0:0:0:0:0:0:1
返回一虚拟路径的真实路径: D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\web\request.jsp
返回上下文路径: /web

Tips:

调用request对象的getRemoteAdrr()方法,显示的ip地址错误,原因是该方法只能获取静态的ip地址,如果是都动态IP则获取不到

5.response对象

5.1 response对象简介

reponse对象包含了响应客户请求的有关信息,但在JSP中很少使用 它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。

5.2 response对象的常用方法

方法作用
String getCharacterEncoding()返回响应的是何种字符编码
void setContentType(String tyoe)设置响应的MIME类型
PrintWriter getWriter()返回可以像客户端输出字符的一个对象(获得输出流对象,区别于内置对象out)
sendRedirect(java.lang.String location)重新定向客户端的请求

5.3 案例演示

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    import=" java.io.*" 
    %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
    response.setContentType("text/html;charset=UTF-8");   //设置响应的MIME类型
    out.println("response对象"+"<br>");
    PrintWriter outer=response.getWriter();    //获取输出流对象
    outer.println("我是response对象的outer对象"+"<br>");   
    out.println(response.getCharacterEncoding()); //打印response对象返回的字符集编码方式

%>

Tips:

注意都outer对象输出的内容在内置对象out对象的前面显示,这是out对象和PrintWriter类对象outer对象的区别,outer的内容总是先于out对象显示。解决办法是在out对象输出的内容后加上out.flush(),强制清空输出out中的内容。

我是response对象的outer对象
response对象
UTF-8

请求重定向

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    import=" java.io.*" 
    %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
    response.setContentType("text/html;charset=UTF-8");   //设置响应的MIME类型
    out.println("response对象"+"<br>");
    PrintWriter outer=response.getWriter();    //获取输出流对象
    outer.println("我是response对象的outer对象"+"<br>");   
    out.println(response.getCharacterEncoding()); //打印response对象返回的字符集编码方式
    response.sendRedirect("MutipfyTable.jsp"); //请求重定向
%>

Tips:

response对象最后一行代码请求重定向到MutipfyTable.jsp页面,该页面输出一个九九乘法表。

九九乘法口诀表

1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12   4*4=16   
1*5=5   2*5=10   3*5=15   4*5=20   5*5=25   
1*6=6   2*6=12   3*6=18   4*6=24   5*6=30   6*6=36   
1*7=7   2*7=14   3*7=21   4*7=28   5*7=35   6*7=42   7*7=49   
1*8=8   2*8=16   3*8=24   4*8=32   5*8=40   6*8=48   7*8=56   8*8=64   
1*9=9   2*9=18   3*9=27   4*9=36   5*9=45   6*9=54   7*9=63   8*9=72   9*9=81   

5.4 请求转发和请求重定向的区别

方式区别
请求重定向客户端行为,response.sendRedirect(),从本质上讲是两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。
请求转发服务器行为,requset.getRequestDispatch().forward(req,resp); 是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。

6.session对象

6.1 什么是session

  • session表示客户端与服务器的一次会话
  • Web中的session指的是用户在浏览某个网站的时,从进入网站到浏览器关闭所经过的这段时间,也就是用户刘侃这个网站所花费的时间,我们说是一个session
  • 综上所述,session实际上是一个特点的时间概念
  • session保存在服务器的内存当中,每一个用户在服务器中保存不同的session

6.2 session对象

  • session对象是一个JSP内置对象
  • session对象在第一个JSP也变被加载时自动创建,完成会话期管理
  • 从一个客户打开浏览器并连接到服务器开始,到用户关闭浏览器离开这个服务器结束,被称为一个会话
  • 当一个客户访问一个服务器的时候,可能会在服务器几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象
  • session对象是HttpSession类的实例

6.3 session对象常用方法

方法作用
long getCreationTime()返回session创建的时间(毫秒值)
public String getId()返回session创建时JSP引擎为它设的唯一ID号
public void setAttribute(String name,Object value)以键值对的方式将对象绑定到此会话
public Object getAttribute(String name)返回此会话中指定名称绑定在一起的对象,如果没有对象绑定到该名称下。则返回null
String [] getValueNames()返回一个包含此session中所有可用属性的数组
int getMaxInactivInterval()返回凉席请求间隔多长时间次session对象被撤销(单位秒)
void setMaxInactiveInterval()设置此session对象存活的最大时间(单位秒)

6.4 实例演示

(1) session_page1.jsp

<title>session_page1</title>
</head>
<body>
<h1>session对象</h1>
<hr>
<%
    SimpleDateFormat sdf =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    Date date=new Date(session.getCreationTime());
%>
 session对象创建的时间:<%=sdf.format(date)%><br>
<!-- 在session中绑定对象 -->
<% 
    session.setAttribute("userName", "admin");
    //设置session的最大有效时间(秒)
    session.setMaxInactiveInterval(10); //10秒
%>
 获取session中绑定的对象值: <%=session.getAttribute("userName") %><br>
 获取session在的唯一ID号: <%=session.getId() %>
 <br>
 <a href="session_page2.jsp">跳转到session_page2</a>
</body>
</html>
session对象

session对象创建的时间:2017年10月08日 14:09:48
获取session中绑定的对象值: admin
获取session在的唯一ID号: 2EB26E0373352B2246D386C98833B0F8 
跳转到session_page2

(2) session_page2.jsp

<body>
<%
    SimpleDateFormat sdf =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    Date date=new Date(session.getCreationTime());
%>
session的id号为:<%=session.getId() %><br>
session中绑定的用户名:<%=session.getAttribute("userName") %><br>
session创建的时间:<%=sdf.format(date) %>
<br>
session中保存的属性:<%
    String[] str=session.getValueNames(); //获取session中所用可用属性的数组
    for(int i=0;i<str.length;i++) {
        out.println(str[i]+"&nbsp;&nbsp;&nbsp;");
    }

%>
</body>
sessionid号为:2EB26E0373352B2246D386C98833B0F8
session中绑定的用户名:admin
session创建的时间:2017年10月08日 14:09:48 
session中保存的属性:userName   

Tips:

如果在session_page1.jsp页面停留的时间超过10秒。那么跳转到session_page2.jsp显示的页面如下所示

sessionid号为:608B069F812CA0AA8E493B4D9D4A63D3
session中绑定的用户名:null
session创建的时间:2017年10月08日 15:05:48 
session中保存的属性:

因为session设置的有效时间为10秒,过了10秒之后再跳转页面。之前的session就不存在了。所以session_page2页面的session对象的id也发生了变化。

6.4 Session的生命周期

session的生命周期要经历三个阶段,创建——>活动——>销毁

  • 创建

    当客户端第一次访问某个jsp或者servlet时候,服务器会问当前会换创建一个sessionID,每次客户端向服务器发送请求时,都会将此sessionID携带过去,服务器会对此sessionID进行检验。判断是否属于同一词会话。

  • 活动

    • 某次会话当中,通过超链接打开的新的页面属于同一次会话
    • 只要当前会话的页面没有全部关闭,重新单打开的浏览器窗口访问同一个项目资源时属于同一次会话。
    • 除非本次会话的所有页面都关闭再重新访问某个jsp页面或者Servlet将会创建新的会话注意:原有的会话还存在,只是这个旧的sessionid仍然存在于服务端,只是再也不会有客户端携带它然后交个服务端校验
  • 销毁

    session销毁的三种方式

    • 调用session.invalidate()方法
    • session过期(超时)
    • 服务器重新启动

7.application对象

7.1application对象简介

  • application对象实现了用户间数据的共享,可存放全局变量
  • application开始于服务器启动,终止于服务器关闭
  • 在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作
    *application对象属于服务器,而不属于某个对象,也就是说,在任何地方对application对象的属性的操作,都将影响到其他用户对此的访问。
  • 服务器的启动和关闭,决定了application对象的生命。
  • application对象是ServletContext类的实例

7.2 常用方法

方法作用
public void setAttribute(String name , Object value)使用指定名称将对象绑定到此会话
public Object getAttribute(String name)返回此会话中的指定名称绑定到一起的对象,如果没有对象绑定在改名称下,则换回null
Enumeration getAttributeNames()返回所用可用属性的枚举
String getServerInfo()返回JSP(SERVLET)引擎及版本号

7.3 案例演示

<h1>application内置对象</h1>
    <%
        application.setAttribute("city", "北京");
        application.setAttribute("position", "01");
        application.setAttribute("emain", "1540433618@qq.com");
    %>
    <%=application.getAttribute("city") %>
    <%
        Enumeration attributes=application.getAttributeNames();
        while(attributes.hasMoreElements()) {
            out.println(attributes.nextElement()+"nbsp;nbsp;");
        }
    %>
    <br>

    JSP(SERVLET)引擎及版本号为:<%=application.getServerInfo() %>
application内置对象

北京 javax.servlet.context.tempdirnbsp;nbsp; org.apache.catalina.resourcesnbsp;nbsp; org.apache.tomcat.util.scan.MergedWebXmlnbsp;nbsp; citynbsp;nbsp; org.apache.tomcat.InstanceManagernbsp;nbsp; org.apache.catalina.jsp_classpathnbsp;nbsp; org.apache.jasper.compiler.ELInterpreternbsp;nbsp; org.apache.jasper.compiler.TldLocationsCachenbsp;nbsp; org.apache.tomcat.JarScannernbsp;nbsp; javax.websocket.server.ServerContainernbsp;nbsp; positionnbsp;nbsp; emainnbsp;nbsp; org.apache.jasper.runtime.JspApplicationContextImplnbsp;nbsp; 
JSP(SERVLET)引擎及版本号为:Apache Tomcat/7.0.81

8.page对象

8.1 page对象简介

page页面就是指向当前页面本身,类比于this指针,他是java.lang.Object类的实例

8.2 常用方法
参照JDK文档的Object类的肠炎方法

9.pageContext对象

9.1 pageContext简介

  • pageContext对象提供了对JSP页面内所用的对象及名字空间的访问
  • pageContext对象可以访问本页所有的session,也可以取本页所在application的某一属性值
  • pageContext对象相当于页面中所有功能的集大成者
  • pageContext对象的本类名为pageContext

9.2 pageContext对象的常用方法

方法作用
JspWriter getOut()返回当前客户端响应被使用的JspWriter流(out)
HttpSession getSession()返回当前页面的session
Object getPage()返回当前页面的page对象
ServletRequest getRequest()返回当前页面的request
ServletResponse getResponse()返回当前页面的response
void setAttribute(String name, Object attribute)设置属性及属性值
Object getAttribute(String name , int scope)在指定范围内取属性的值
int getAttributeScope(String name )返回某属性的作用范围
void forward(Stirng relativeUrlPath)使得当前页面重导到另一页面、
void include(Strng relativeUrlPath)在当前文件包含领一文件

10.Config对象

10.1 Config对象简介

config对象是一个在Servlet初始化时,JSP引擎想它传递信息用的,此信息包括Servlet初始化时所要用的参数(通过键值对的方式构成)以及服务器的有关信息(通过传递一个ServletContext对象)

10.2 常用方法

方法功能
ServletContext getServletContext()返回包含服务器相关信息的ServletContext对象
String getInitParameter(String name)返回初始化参数的值
Enumeration getInitParameterNames()返回Servlet初始化所需要的所有参数的枚举

10 exception对象

10.1 exception对象简介

exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面应用此对象,就必须吧isErrorPage设为True,否则无法编译。exception对象实际上是java.lang.Throwable对象

10.2 常用方法如下

方法功能
String getMessage()描述异常的信息
String toString()返回关于异常的剪短描述信息
void printStackTrace()显示异常及其轨迹
Throwable FillInStackTrace()重写异常的执行轨迹

10.3 案例演示

(1) exception.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="doexception.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>exception</title>
</head>
<body>
<h1>测试异常的页面</h1>
<%
    System.out.println(1/0);
%>
</body>
</html>

(2) doexception.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--下边是嵌入的java代码-->
<%
    Date myday=new Date(); // 获取系统时间
    SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd-HH-mm:ss"); //定义日期输出格式
    String time =format.format(myday); //按照定义的格式输出时间
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>doException</title>
</head>
<body>
    <h1>处理exception页面异常</h1>
    <%=exception.getMessage() %><br>
    <%=exception.toString() %><br>
    <%=exception.getStackTrace() %>

</body>
</html>
处理exception页面异常

/ by zero
java.lang.ArithmeticException: / by zero
[Ljava.lang.StackTraceElement;@750ae

Tips

exception.jsp页面中的errorPage属性:errorPage=”doexception.jsp”

doexception.jsp 中的属性isErrorPage=”true”,否则页面将会报错。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值