(1)request:对象表示客户端请求的内容(request对象包含所有请求的信息,如:请求的信息来源、标头、cookies和请求相关的参数值等等)
(2)response:对象表示响应客户端的结果
(3)out:对象负责把数据结果显示到客户端的浏览器
对自定义属性的操作:
void setAttribute( String name, Object value)
定义name属性的值为value
Object getAttribute( String name )
取得name属性的值
Enumeriation getAttributeNames( )
取得该范围的属性
void removeAttribute ( Sting name)
移除name属性的值
获取请求参数值:
String getParameter( String name)
取得name的参数值
String[ ] getParameterValues( String name)
取得所有name的参数值(多选框 时,取值用它,存为数组)
Enumeriation getParameterNames( )
取得该范围的所有参数名称
Map getParameterMap()
取得一个要求参数的Map
其他使用方法:
setCharacterEncoding (String)
在读取请求信息前先设置其编码方式
getCharacterEncoding()
获得其编码方式
getContentType()
返回客户端请求的对象类型
getContextPath()
取得Context路径(站台名,绝对路径)
String getMethod()
取得http的方法(get/post)
String getProtocal()
取得所使用的协议(http1.0 / http1.1)
String getRequestedSessionId()
取得用户端的sessionID
String getRemoteAdr()
取得用户的IP地址
Cookie[ ] getCookies()
取得与请求相关的cookies
InetAddress获取主机的参数: <% InetAddress inet = InetAddress.getLocalHost(); %> 访问用户IP:<%=inet.getHostAddress()%><br> 访问用户主机名:<%=inet.getHostName()%><br>获取URL: 协议://服务器名:端口号 项目根路径(/project)/ request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/"
setCharacterEncoding (String)
在回复请求前先设置其编码方式
getCharacterEncoding()
获得其编码方式
setContentType()
设置返回客户信息的对象类型
void addCookie(Cookie cookie)
新增cookie
void addDateHead(String name,long date)
新增long类型值到name标头
void Header(String name,String value)
新增String类型的值到name标头
String sendRedirect (String url)
重定向到新的UTL
转发(forward)与重定向(redirect)的区别:
1.转发可以通过request的setAttributeh和getAttribute实现属性数据共享,重定向不支持
2. 重定向可以在url路径后面拼接参数,转发不可以
3. 转发是服务器端的操作,而重定向则是浏览器端的操作,最直观的效果就是 转发url路径不会发生变化,请求则会发生变化,重定向url路径变化
转发过程 客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完 之后,它要调用getRequestDispacther()方法,把请求转发给指定的student_list.jsp,整个流程都是在服务 器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的 所有东西,在student_list中都能取出来,因此,student_list能把结果getAttribute()出来, getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。 重定向过程 客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了 sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到 response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访 问student_list.jsp,紧接着客户端受到这个请求后,立刻发出一个新的请求,去请求student_list.jsp,这里 两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得 不了。可见,在sendRedirect()里面是两个请求,两个响应。 总结 转发在服务器端完成的;重定向是在客户端完成的 转发的速度快;重定向速度慢 转发的是同一次请求;重定向是两次不同请求 转发不会执行转发后的代码;重定向会执行重定向之后的代码 转发地址栏没有变化;重定向地址栏有变化 转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成(注意:一般的超链接是get请求,也是重定向)
根据response对象中的setContentType()方法来动态设定响应给客户的文件类型(很多都要写Java代码,)
MIME类型
文件类型
后缀
Application/pdf
PDF文件
Application/msword
Word文档
.doc
Application/x-msexcel
Excel表格文件
.xls
Image/Gif
GIF图片
.gif
Image/Jpg
JPG图片
.jpg
Text/Html
HTML超文本文件
.html
Text/Plain
Plain文本
.tx
1、通过response.setIntHeader(“Refresh”,180)让页面自己每隔3分钟 自动刷新。
2、通过response.setHeader(“refresh”,“10;URL=http://www.sina.com”) 让页面过10秒钟后自动重定向到新的页面
out是javax.servlet.JspWriter类的一个实例。
方法
说明
void print( )
显示
void println( )
显示并换行
void clear( )
清楚缓冲区的内容
void close( )
关闭输出流,清楚所有的内容
void clearBuffer( )
清楚当前缓冲区的内容
int getBuggerSize( )
取得目前缓冲区的大小(KB)
int getRemaining( )
取得目前使用后还剩下的缓冲区的大小(KB)
Boolean isAutoFlush
如果回传为true,表示如缓冲区满了,会自动清楚 如果为false,满了则出现异常
共有三种:
session:对象提供一些机制,让服务器能个别辨认用户
application:当程序运行时,application对象能提供服务器的context,说明那些 资源是可利用的,那些资源是可获取的。
pageContext:该对象提供存取所有在此网页中可被利用的隐含对象,并且可以管理 他们的属性。(了解)
三个对象实例都有的方法:
void setAttribute( String name, Object value)
定义name属性的值为value
Object getAttribute( String name )
取得name属性的值
session对象用来保存每个用户的会话信息,以便跟踪每个用户的操 作状态。从一个客户打开浏览器并连接到服务器开始,一直到这个客 户关闭浏览器为一个回话。
当客户第一次连接到服务器请求时会为这个客户分配一个session对 象,并为这个对象分配一个id。session信息保存在容器中, sessionID保存在客户机的cookie中
当服务器发出回复内容的同时将这个id发往客户段,并写入到客户端 的cookie中,这样下次再请求的时候,服务器就可以通过该id来识别 不同的用户。
通过session对象实现跨页面的信息共享。
Session对象实现javax.servlet.http.HttpSession接口,提供如下方法:
方法
说明
long getCreationTime()
取得session产生的时间,单位是毫秒,由1970年1月1 日零时算起
String getID()
取得session的ID
long getLastAccessedTime()
取得用户最后通过这个session送出请求的时间,单位是 毫秒,由1970年1月1日零时算起
long getMaxInactiveInterval()
取得最大session不活动的时间,若超过这个时间,session将会失 效,单位为毫秒
void invalidate()
取消session对象,并将对象存放的内容完全抛 弃
boolean isNew()
判断是否为新session,产生但客户端还未使用过
void setMaxInactiveInterval(
int interval)
设定最大session不活动时间,若超过这个时 间,session将会失效,单位为毫秒
Session对象也可以存储或取得用户相关的数据。例如:用户的名称,用户所 订购的物品、用户的权限等等。
只有设置<%@page session=“true”%>前JSP页面才能使用session隐 含对象,默认为true;
例如:我们设定某些网页必须要求用户先登陆的动作,确定用户是合法用 户的时候才允许读取网页内容,否则把网页重新定向到登陆的网页上。
使一个会话结束的两种方法:
1、在web.xml文件中设置他的最大活动时间(tomcat/conf/web.xml)
<!--设置 session 的过期时间,单位是分钟;-- >
<session-config>
<session-timeout>30</session-timeout>
</session-config>
当你没对网站做任何的操作,时间超过30分钟没,session对象自动销毁
2、在JSP中通过session.invalidate()方法直接关闭一个会话
Application对象是以服务器为主角,服务器的启动和关 闭决 定 了 application的生命周期。
服务器启动后会创建该服务器下的web应用程序,同时为此web应用程序新 建一个application对象,它将一直存在,直到服务器关闭。
当有用户请求web应用下的某个JSP页面时,JSP容器为该请求启动一个线程,并分配这个application对象;每个请求都共享这个application对象。
Application对象实现javax.servlet.ServletContext接口,它主要功用在于 取得或更改Servlet的设定。
一个JSP被编译成Servlet时,applicate对象是如何初始化的:
pageContext = JspFactory.getPageContext(this,request,response,”errorpage.jsp”,true,8192,true); application = pageContext.getServletContext();
参数说明:
this:该servlet对象本身
true:是否需要session对象
8192:最大缓冲大小,单位字节
true:是否自动清楚缓冲区
Javax.servlet.ServletContext接口容器相关信息的方法:
方法
说明
int getMajorVersion( )
取得JSP容器主要的servlet api版本,如:2
int getMinorVersion( )
取得JSP容器次要的servlet api版本,如:4
String getServerInfo( )
取得JSP容器的名称和版本
<%= application.getMajorVersion()%>
<%= application.getMinorVersion()%>
<%= application.getServerInfo%>
当JSP网页有错误产生异常的时候调用该对象进行处理,和session对象一样,只有当<%@page isErrorPage=“true”%>的 时候才能使用该对象。
<%@ page isErrorPage="true" %> <html> <head> <title>Show Error Page</title> </head> <body> <h1>Opps...</h1> <p>Sorry, an error occurred.</p> <p>Here is the exception stack trace: </p> <pre> <% exception.printStackTrace(response.getWriter()); %>