request
用于接受客户端通过http协议连接传输到服务器的数据
父类为javax.servlet.ServletRequest.HttpServletRequest
作用域为一次request请求
传送方法采用get/post
get:传输数据量小,不大于2KB。参数显示在URL中,用户可以看到
post:传输数据量大,通过http post机制,内容放在html header内一起传输到action所指的URL,用户看不到
方 法 说 明
getAttribute(String name) 返回name所指定的属性值
setAttribute(String name, Object obj) 设定name所指定的属性值为obj
removeAttribute(String name) 删除name所指定的属性
getAttributeNames() 返回request对象所有属性的名称集合
getParameter(String name) 从客户端获取name所指定的参数值
getParameterNames() 从客户端获取所有参数名称
getParameterValues(String name) 从客户端获取name所指定参数的所有值
getServerName() 返回服务器名称
getServerPort() 返回服务器接受请求的端口
getRemoteAddr() 获取客户端的IP地址
getRemotePort() 获取客户端的请求端口
getContextPath() 返回环境路径(Web服务程序根目录)
getCharacterEncoding() 返回请求正文中所使用的字符编码
setCharacterEncoding(String charset) 设定请求正文中所使用的字符编码
getCookies() 返回客户端所有的Cookie对象
getSession() 返回请求相关的Session对象
getContentType() 返回请求正文的MIME类型
getContentLength() 返回请求的Body的长度,单位为字节
Enumeration getParameterNames()
返回枚举型,得到客户端提交的所有参数名称void serCharacterEncoding()
示例
<pre class="wp-block-code"><code><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html><head></head><body><form method=get action=checklogin.jsp><table><tr><td>输入用户名:</td><td><input type=text name=name value=<%=request.getParameter("user")%>></td></tr><tr><td>输入密码:</td><td><input type=password name=password></td></tr><tr colspan=2><td><input type=submit value=login></td></tr></table></body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body><%String name= request.getParameter("name");String password=request.getParameter("password");if(name != null && password != null && name.equals("hellking") && password.equals("12345")){%><jsp:forward page="success.jsp"><jsp:param name="user" value="<%=name%>"/></jsp:forward><% }else{%><jsp:forward page="login.jsp"><jsp:param name="user" value="<%=name%>"/></jsp:forward><%}%>
</body>
</html></code></pre>
response对象
响应客户端的请求,将数据发送到客户端,和request相反
父类为javax.servlet.ServletRequest.HttpServletRequest
表4-3response对象的主要方法及说明
方 法 说 明
void sendRedirect(String redirectURL) 将客户端重定向到指定的URL
void setContentType(String contentType) 设置响应数据内容的类型
void setContentLengh(int contentLength) 设置响应数据内容的长度
void setHeader(Stringname, String value) 设置HTTP应答报文的首部字段和值及页面的自动刷新
void setStatus(int n) 设置响应的状态行
ServletOutputStream getOutputStream() 获取二进制类型的输出流对象
PrintWriter getWriter() 获取字符类型的输出流对象
String encodeURL(String url) 编码指定的URL
String encodeRedirectURL(String url) 编码指定的URL,以便向sendRedirect发送
int getBufferSize() 获取缓冲区的大小
void setBufferSize(int bufferSize) 设置缓冲区的大小
void flushBuffer() 强制发送当前缓冲区的内容到客户端
void resetBuffer() 清除响应缓冲区中的内容
void addCookie(Cookie cookie) 向客户端发送一个Cookie
void addHeader(String name, String value) 添加HTTP文件的头文件
boolean isCommittd() 判断服务器端是否已将数据输出客户端
void setContentType(String contentType) 动态响应contenType属性
contenType是<%@page%>中的,具体值有
text/plain 纯文本页面
text/html 纯HTML页面
text/xml XML页面
applcation/x-msexcel Ecxel文件
application/msword Word文件
void setHeader(Stringname, String value)
response.setHeader(“Refresh,”5”);//5秒自动刷新
response.setHeader(“Refresh,”5”;URL=http://www.163.com);//5秒后自动跳转新界面
void sendRedirect(String redirectURL)
与jsp:forword的区别
sendRedirect 和<jsp:forward>的区别如下:
1.response.sendredirect()会在客户端呈现跳转后的URL地址,这种跳转称为客户端跳转。
使用response.sendredirect()方法将重定向的URL发送到客户端,浏览器再根据这个URL
重新发起请求。所以用这个方法时,在浏览器地址栏上会看到新的请求资源的地址。
并且这时的request 和 response 都与第一次的不一样了,因为产生了新的request和response.
2.使用<jsp:forward>完全是在服务器上进行,浏览器地址栏中的地址保持不变,这种跳转称为服务器端跳转。
所以使用这个方法时没有产生新的request和response,因为request没有变,在同一个请求内,可以用request来传递参数。
3.response.sendRedirect()方法想带参数的话,在地址中写成xxx.jsp?paraml=aaa&.这种形式传递参数。
<jsp:forward>能够使用<jsp:param/>标签向目标文件传送参数和值,目标文件必须是一个动态的文件,能够处理参数。
4.<jsp:forward>后面的语句不会被执行,也不会继续发送到客户端;response.sendRedirect()方法后面的语句会继续执行,除非语句前面有return。
5.<jsp:forward>是在服务器的内部进行转换,只发送给客户端最后转到的页面,速度会比较快;response.sendRedirect()方法需要服务器与客户端之间的往返,可以转到任何页面,包括网络有效域名,但速度比较慢。
void setStatus(int n)
响应时,发送的首行称为状态码
5类状态码
1**:实验性质的
2**:表示请求成功
3**:在满足之前应该采取进一步的行动
4**:无法满足请求时,返回状态码
5**:表示服务器出现问题
表4~4状态代码表
状态代码 代码说明
100 101 客户可以继续 服务器正在升级协议
200 201 202 203 204 205 206 请求成功 请求成功且在服务器上创建了新的资源 请求已被接受但还没有处理完毕 客户端给出的元信息不是发自服务器的 请求成功,但没有新信息 客户必须重置文档视图 服务器执行了部分get请求
300 301 302 303 304 305 请求的资源有多种表示法 资源已经被永久移动到新位置 资源已经被临时移动到新位置 应答可以在另外一个URL中找到 get方式请求不可用 请求必须通过代理来访问
400 401 403 404 405 406 407 408 409 410 411 413 414 415 请求有语法错误 请求需要HTTP认证 取得了请求但拒绝服务 请求的资源不可用 请求所用的方法是不允许的 请求的资源只能用请求不能接受的内容特性来响应 客户必须得到认证 请求超时 发生冲突,请求不能完成 请求的资源已经不可用 请求需要一个定义的内容长度才能处理 请求太大,被拒绝 请求的URL太大 请求的格式被拒绝
500 501 502 503 504 505 服务器发生内部错误,不能服务 不支持请求的部分功能 从代理和网关接受了不合法的字符 HTTP服务暂时不可用 服务器在等待代理服务器应答时发生超时 不支持请求的HTTP版本
void addCookie(Cookie cookie)
添加cookie对象,保存客户端用户信息
OUT
javax.servlet.jsp.JspWriter对象,能把信息发送到浏览器
表4-5out对象的常用方法
功 能 方 法 说 明
缓冲处理 clear() 清除缓冲区中的数据,若缓冲区中已经是空的,则会产生IOException 的异常
clearBuffer() 清除缓冲区中的数据,但若缓冲区已经是空的,并不会产生 IOException 的异常
flush( 直接将目前暂存于缓冲区中的数据输出
getBufferSize() 返回缓冲区的大小
getRemainingO 返回缓冲区中剩余的空间大小
isAutoFlush( 返回布尔值表示是否自动输出缓冲区中的数据
输出数据 newLine() 输出换行
print(datatype data) 输出数据类型为 datatype 的数据 data
println(datatype data) 输出数据类型为 datatype 的数据 data,并自动换行
session
jvavx.servlet.Httpsession
从连接服务器开始,到服务器断开结束
存储在服务器端,通过cookie中的sessionid标识
同一个用户,同一个服务器使用同一个session
以下4种情况结束
1.用户关闭正在使用的浏览器程序
2.关闭网页服务器
3.未向服务器提出请求超过预设的时间(tomcat为30分钟)
4.运行程序结束session
session.setAttribute(“变量名称”,变量内容) 建立session变量
session.getAttribute(“变量名称”) 获取变量
session.getValueNames() 返回session中的所有变量名称
session.removeAttribute(“变量名称”) 清除变量
session.invalidate 结束session
表4-6session对象的常用方法
方 法 说 明
getCreation Time0 返回session建立的时间,返回值为从格林威治时间1970年1月1日开始 算起到 session建立时的毫秒数
getLastAccessedTime() 返回客户端对服务器端提出请求至处理 session 中数据最后的时间,若为 新建立的 session 则返回-1
getMaxInactiveInterval() 返回客户端未对session提出请求而session开始停滞到自动消失之间所间 隔的时间,返回值以秒为单位
isNew() 返回布尔值表示是否为新建的 session(客户端建立后还未发送到客户端cookie)
SetMaxInactiveInterval (int interval) 设置客户端未对session提出请求而session开始停滞到自动消失之间所间 隔的时间为 interval,以秒为单位
application
javax.servlet.ServletContext
所有用户共享的数据存取区
开始于服务器启动时,关闭服务器或超过时间未有任何用户连接销毁
所有用户application相同
仅有一个application,由服务器创建,启动和清除,用户不能操作
application.setAttribute(“变量名称”,变量内容) 建立application变量
application.getAttribute(“变量名称”) 获取变量
application.getAttributeNames() 返回application中的所有变量名称
application.removeAttribute(“变量名称”) 清除变量
getMajorVersion() 返回服务器解释引擎所支持的最新Servlet API版本
getMinorVersion() 返回服务器解释引擎所支持的最低 Servlet API 版本
getMimeType(String file) 返回文件 file 的文件格式与编码方式
getRealPath(String path) 返回虚拟路径 path 的真实路径
getServerlnfo() 返回服务器解释引擎的信息
pagecontext
javax.servlet.jsp.PageContext
可以得到当前页面所有其他的JSP隐含对象,并提供了方法
表4-8pageContxt对象访问页面内有效属性的方法
方 法 说 明
Object gettribute(String name) 返回当前页面内的 name 变量
void setAttribute(String name, Object obj) 设定当前页面内name变量值为obj
void removettribute(String name) 删除当前页面内的 name 变量
HttpSession getSession() 取得页面的session对象
ServletContext getServletContext() 返回Srvecotex对象,这个对象对所有的页面都是共享的
javax.servlet ServletRequest getRequest() 该方法的返回对象是JSP 内置对象request, 主要用于获取客户端的信息
config
javax.servlet.ServletConfig
标识Servlet的配置
主要用来取得服务器配置信息
不用逐一更改JSP文件,只用更改相应属性文件的内容,简化了网络维护工作
String getInitParameter(string name) 返回name所指定的初始参数
java.util.Enumeration getInitParameterNames() 返回所有初始参数
ServletContext getServletContext() 返回servlet相关的上下文对象
String getSerletName() 返回servlet名称
page
java.lang.Object
代表组织运行的由JSP文件产生的类对象,指向当前JSP程序本身的对象
exception
java.land.Throwable
提供用于程序运行错误的异常对象,可以配合page一起用,将错误集中到一个页面。
在isErrorPafe=”true”情况下才能使用
表4-10 exception对象的常用方法及说明
方 法 说 明
String getMessage() 返回错误信息
String getLocalizedMessage0) 取得本地语系的错误提示信息
void printStack Trace() 以标准错误的形式输出一个错误和错误的堆栈
String toString() 该方法以字符串的形式返回一个对异常的描述
Throwal fllInStack Trace() 重写错误的堆栈