1.什么是JSP内存对象?
JSP内存对象,就是在编写JSP页面时,不需要做任何声明就可以直接使用的对象,例如,下面的代码:
<%
int [] num={60,70,80}
for(int i:num){
out.println(i);
}
%>
代码 out.println()可以实现页面的输出显示,但是在代码中并没有任何地方声明或创建这个out对象,没有创建就可以直接使用的原因是Out对象是JSP内存对象之一
除了out对象以外,在JSP中海油依他一些内存对象
内置对象 | 代表内容 | 范围 |
request | 触发服务调用的请求 | request |
response | 对请求的应答 | page |
session | 为请求的客户创建的session对象 | session |
application | 从 servlet 配置对象获得的 servlet 上下文(如在getServletConfig() ,getContext()的调用中) | application |
out | 向输出流写入内容的对象 | page |
pageContext | 本 JSP 的页面上下文 | page |
page | 实现处理本页当前请求的类的实例 | page |
config | 本 JSP 的 ServletConfig | page |
exception | 表示JSP页面运行时产生的异常 | Page |
现在给大家讲一下今天学过的requset内置对象
equest 对象是 javax.servlet.httpServletRequest类型的对象。该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。例如我们在FORM表单中填写的信息等,是最常用的对象。常用的方法有:getParameter、getAttribute,getParameterNames 和getParameterValues通过调用这几个方法来获取请求对象中所包含的参数的值。
getParameter(Strings) : 获取表单提交的信息
String s = request.getParameter("name");
getAttribute(Strings): 获取指定属性的值,如该属性值不存在返回Null
String s=request.getAttribute(“name”);
setAttribute(String key,Object obj):设置指定名字参数值
Strings=request.setAttribute(“zhuo”,name);
getProtocol() :获取客户使用的协议
getServletPath() :获取客户提交信息的页面
getMethod() :获取客户提交信息的方式 get或post
String s = request.getMethod();
getHeader() :获取HTTP头文件中的accept、accept-encoding和host的值
String s = request.getHeader("accept");
getRemoteAddr() :获取客户的ip地址
getServerHost() :获取客户机的名称
getServerName() :获取服务器名称
getServerPort() :获取服务器的商口号
getPamameterNames():获取客户端提交的所有参数的名字
Enumeration enum = request.getParameterNames();
while(enum.hasMoreElements()){
String s = (String)enum.nextElement();
out.println(s);
}
getRequestURI():获得发出请求字符串的客户端地址。
getSession(Boolean create):返回和当前客户端请求相关联的HttpSession对象。如果当前客户端请求没有和任何HttpSession对象关联,那么如果create变量为true,则创建一个HttpSession对象并返回, 反之返回null。一般与setArribute连用,例如:request.getSession().setAttribute(“zhuo”,name);
getQuertString():返回查询字符串,该字符串由客户端以get方法向服务器端传送。查询字符串出现在页面请求“?”的后面,例如:http://www.njnu.edu.cn/hello.jsp?name=Jack。
getContentType():获取客户端请求的MIME类型。如果无法得到该请求的MIME类型,则返回-1。
getParameterValues(String name):获得指定参数的所有值,参数由name指定。一般应用与要取得多个值当中,比如数组。
String[] goodsId=request.getParameterValues("goodsId");
String[] newNum=request.getParameterValues("newNum");
然后是response内置对象
对客户的请求做出动态响应,向客户端发送数据。响应客户请求时创建,响应结束时销毁。(一次响应产生一个response对象)
setRedirect(url):把响应发送到另一个指定的页面(url)进行处理。这是最常用的一个方法
sendError(int sc):向客户端发送错误信息。例如:“505指示服务器内部错误”, “404指示网页找不到的错误”
addHeader(String name,String value):添加http头文件,该Header将会传到客户端去,如果有同名的Header存在,那么原来的Header会被覆盖。
setHeader(String name,String value):设定指定名字的http文件头的值,如果该值存在,那么它将会被新的值覆盖。
containsHeader(String name):判断指定名字的http文件头是否存在,并返回布尔值。
flushBuffer():强制将当前缓冲区的内容发送到客户端。
addCookie(Cookie cookie):添加一个Cookie对象,用来保存客户端的用户信息,可以用request对象的getCookies()方法获得这个Cookie。
接下来是 session
在页面的page指令加上session="true" 或缺省 情况下以及在servlet中使用request.getSession();的方式进行创建。超时或服务停止时,session结束。(一个用户对应一个session对象)
什么是session对象? ----- 它是一个jsp内置对象,它在第一个jsp被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离 开这个服务器结束(或者超 时),被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要创建session对象。
session对象的ID -----当一个客户首次访问服务器上的一个jsp页面时,jsp引擎会产生一个session对象,同时分配一个String类型的的ID号,jsp引擎同时将这个ID号发送到客户端,存放在cookie中,这样, session对象直到客户关闭浏览器后,服务器端,该客户的session对象才会消失,会并,和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。
getAttribute(String name):获得指定名字的属性,如果该属性不存在,将会返回null。
getAttributeNames():返回session对象中存储的每一个属性对象,结果集是一个Enumeration类的实例。
g etCreationTime():返回session对象被创建的时间,单位为毫秒。
getId():返回session对象在服务器端的编号。每生成一个session对象,服务器都会给它一个编号,而且这个编号不会重复,这样服务器才能根据编号来识别session,并且正确地处理某一特定的session及其提供的服务。
getLastAccessedTime():返回当前session对象最后一次被操作的时间,单位为毫秒。
getMaxInactiveInterval ():获取sessionn对象的生存时间,单位为秒。
setMaxInactiveInterval (int interval):设置session对象的有效时间(超时时间),单位为秒。在网站的实际应用中。
例如:设置有效时间为200秒。
<%session.setMaxInactiveInterval(200);%>
removeAttribute(String name):删除指定属性的属性值和属性名。
setAttribute(String name,Java.lang.Object value):设定指定名字的属性,并且把它存储在session对象中。
invalidate():注销当前的session对象。
在讲解一下什么是转发与定向
forward 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递.
但forward ()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如 servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面.重定向后浏览器地址栏URL不变.
response.sendRedirect()是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,且在浏览器地址栏上会出现重定向页面的URL.sendRedirect()可以重定向有frame的jsp文件.
那么他们俩的区别是什么呢?
1、jsp:forward动作执行的是强制性跳转,写在其后面的语句不会执行。而sendRedirect()方法跳转至页面后,还会执行后面的代码;
2、jsp:forward动作是将page的值指定的页面直接送给IE。sendRedirect()方法是告诉IE要跳转页面,IE再自动调用其参数指定值的页面,其间经过三趟通讯;
3、jsp:forwart动作切断了本面与跳转页的上下文联系,而sendRedirect()方法执行跳转后,还能使用上页传递过来的信息
over