out对象
JspWriter类的一个实例,是向客户端输出内容常用的对象。
常用方法:
方法 | 作用 |
---|---|
void println() | 向客户端打印字符串 |
void clear() | 清除缓冲区的内容,如果在flush之后调用会抛出异 |
void clearBuffer() | 清除缓冲区的内容,如果在flush之后调用不会抛出异常 |
void flush() | 将缓冲区内容输出到客户端 |
int getBufferSize() | 返回缓冲区以字节数的大小,如不设缓冲区则为0 |
int getRemaining() | 返回缓冲区还剩余多少可用 |
boolean isAutoFlush() | 返回缓冲区满时,是自动清空还是抛出异常 |
void close() | 关闭输出流 |
request/response对象
get与post区别
GET是以明文方式通过URL提交数据,数据在URL中可以看到。提交的数据量最多不超过2KB.安全性较低但效率比post高。适合提交数据量不大,安全性不高的数据。比如:搜索、修改、上传等功能。
POST将用户提交的信息封装HTML HEADER内。适合提交数据量大,安全性高的用户信息。比如:注册、修改、上传等功能。
request对象
客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类实现。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。常用方法如下:
方法 | 作用 |
---|---|
String getParameter(String name) | 返回name指定参数的参数值 |
String[] getParameterValues(String name) | 返回包含参数name的所有值的数组 |
void setAttribute(String,Object) | 存储此请求中的属性 |
boject getAttribute(String name) | 返回指定属性的属性值 |
String getContentType() | 得到请求的MIME类型 |
String getProtocol() | 返回请i去用的协议类型及版本号 |
String getServerName() | 返回接受请求的服务器主机名 |
int getServerPort() | 返回服务器接受此请求所使用的端口号 |
Stirng getCharacterEncoding() | 返回字符编码方式 |
void setCharacterEncoding() | 设置请求的字符编码方式 |
int getContentLength() | 返回请求体的长度(以字节数) |
String getRemoteAddr() | 返回发送此请求的客户端IP地址 |
String getRealPath(String path) | 返回一虚拟路径的真实路径 |
String getContextPath() | 返回上下文路径 |
取值乱码问题
在getParameter和getParameterValues取值时,中文出现乱码的情况使用request.setCharacterEncoding(“编码”)方法,如:request.setCharacterEncoding("utf-8")
必须在第一次使用request时就要调用这个方法来设置编码集。
该方法无法解决URL传递中文的乱码问,如: <a href="request.jsp?username=李四">测试</a>
解决方法:
配置tomcat服务器
打开tomcat安装目录/conf/server.xml
修改Connector标签 添加属性URIEncoding="utf-8"
重启服务器
response对象
response对象包含了响应客户请求的有关信息,但在JSP中很少直接使用到它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其它页面的response对象对当前页面无效。常用方法如下:
方法 | 作用 |
---|---|
String getCharacterEncodng() | 返回响应用的是何种字符编码 |
void setContentType(String type) | 设置响应的MIME类型 |
PrintWriter getWriter() | 返回可以向客户端输出字符的一个对象(注意比较:PrintWriter与内置out对象的区别) |
sendRedirect(String location) | 重新定向客户端的请求 |
PrintWriter与内置out对象的区别
getWriter返回的PrintWriter类型对象打印的内容总是先于内置的out对象。
解决方式:
<%
response.setContentType("text/html;charset=utf-8");//设置响应的MIME类型
out.println("内容");
out.println("<hr>");
out.flush() //增加这句话后就可以先输出内容
PrintWriter outer = response.getWriter();//获得输出流对象
outer.println("我是PrintWriter对象");
%>
请求转发与请求重定向
示例视频地址
请求重定向:客户端行为,response.sendReadirect()
,从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。
请求转发:服务端行为,request.getRequestDispatcher().forward(req,resp)
是一次请求,转发后请求对象会保存,地址栏URL不会改变。
举个例子,假设你去办理某个护照
重定向:
你先去A局,A局的人说:“这事不归我们管,去B局,然后你就离开A局自己去了B局转发:
你先去A局,A局的人知道这事该B局管,但是他没让你退回来,而是让你坐了一会,自己到后面办公室联系了B的人,让他们办好之后送了过来
session对象
- session表示客户端与服务器的一次会话
- Web中的session指的是用户在浏览某个网站所花费的时间
- 从上述定义中可以看到,session实际上是也给特定的时间概念
- session对象在第一个JSP页面被装载时自动创建,完成会话期管理。
- 从第一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
- 当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就要session对象。
- session对象是HttpSession类的实例
session对象常用方法
方法 | 作用 |
---|---|
long getCreationTime() | 返回SESSION创建时间 |
public String getId() | 返回SESSION创建时JSP引擎为它设的唯一ID号 |
public Object getAttribute(String name) | 返回与此会话中的指定名称绑定在一起的对象,如果没用对象绑定在该名称下,则返回null |
String[] getValueNames() | 返回一个包含此SESSION中所有可用属性的数组 |
int getMaxInactiveInterval() | 返回两次请求间隔多长时间此SESSION被取消(单位秒),即多久失效 |
void setMaxInactiveInterval() | 设置两次请求间隔多长时间此SESSION被取消(单位秒),即多久失效 |
Session的生命周期
- 创建:
- 当客户端第一次访问某个JSP或者Servlet时候,服务器会为当前会话创建一个SessionId,每次客户端向服务端发送请求时,都会将此SessionId携带过去,服务端会对此Session进行校验。
- 活动:
- 某次会话当中通过超链接打开的新页面属于同一次会话
- 只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同以项目资源时属于同义词会话。
- 除非本次会话的所有页面都关闭后再重新访问某个JSP或者Servlet将会创建新的会话。
注意事项:注意原有会话还存在,只是这个旧的Session仍然存在于服务器,只不过再也没有客户端会携带它然后交予服务器校验。- 销毁(在服务器中):
- Session的销毁只有三种方式:
1.调用了session.invalidate()方法
2.Session过期(超时)
3.服务器重新启动
设置session超时时间
- Tomcat默认session超时时间为30分钟
- 设置session超时有两种方式:
1.session.setMaxInactiveInterval(时间);//单位秒
2.在Web.xml配置
<session-config>
<session-timeout>
10 //单位分钟
</session-timeout>
</session-config>
application对象
- application对象实现了用户间数据的共享,可存放全局变量
- application开始于服务器的启动,终止于服务器的关闭。
- 在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。
- 在任何地方对application对象属性的操作,都将影响到其他用户对此的访问。
- 服务器的启动和关闭决定了application对象的生命.
- application对象是ServletContext类的实例。
application对象常用方法
方法 | 作用 |
---|---|
public void setAttribute(String name,Object value) | 使用指定名称将对象绑定到此会话。 |
public Object getAttribute(String name) | 返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null。 |
Enumeration getAttributeNames() | 返回所有可用属性名的枚举 |
String getServerInfo() | 返回JSP(SERVLET)引擎名及版本号 |
page对象
page对象就是指档期那JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例。常用方法如下:
方法 | 作用 |
---|---|
class getClass() | 返回此OBject的类 |
int hashCode() | 返回此Object的hash码 |
boolean equals(Object obj) | 判断此Object是否与指定的Object对象相等 |
void copy(Object obj) | 把此Object拷贝到指定的Object对象中 |
Object clone() | 克隆此Object对象 |
Strinfg toString() | 把此Object对象转换成String类的对象 |
void notify() | 唤醒一个等待的线程 |
void notifyAll() | 唤醒所有等待的线程 |
void wait(int timeout) | 使一个线程处于等待直到timeout结束或被唤醒 |
void wait() | 使一个线程处于等待直到被唤醒 |
pageContext对象
- page Context对象提供了对JSP页面内所有的对象及名字空间的访问
- page Context对象可以访问到本页所在的session,也可以取本页面所在的application的某一属性值
- page Context对象相当于页面中所有功能的集大成者
- page Context对象的本类名也叫 page Context
常用方法:
方法 | 作用 |
---|---|
JspWriter getout() | 返回当前客户端响应被使用的 JspWriter流(out) |
HttpSession getSession() | 返回当前页中的 HttpSession对象(session) |
Object getPage() | 返回当前页的 Object对象(page) |
ServletRequest getRequest() | 返回当前页的 ServletRequest对象(request) |
ServletResponse getResponse() | 返回当前页的 ServletResponse对象(response) |
void setAttribute(String name, Object attribute) | 设置属性及属性值 |
Object getAttribute(String name, int scope) | 在指定范国内取属性的值 |
int getAttributeScope( String name) | 返回某属性的作用范围 |
void forward(String relativeUrlPath) | 使当前页面重导到另一页面 |
void include(String relativeUrlPath) | 在当前位置包含另一文件 |
Config对象
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象),常用方法如下:
方法 | 作用 |
---|---|
ServletContext getServletContext() | 返回含有服务器相关信息的ServletContext对象 |
String getInitParameter(String name) | 返回初始化参数的值 |
Enumeration getInitParameterNames | 返回Servlet初始化时所需所有参数的枚举 |
exception对象
exception对象时一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。它实际上是java.lang.Throwable的对象,常用方法如下:
方法 | 作用 |
---|---|
String getMessage() | 返回描述异常的消息 |
String toString() | 返回关于异常的简短描述消息 |
void printStackTrace() | 显示异常及其栈轨迹 |
Throwable FillInStackTrace() | 重写异常的执行轨迹 |
在需要处理异常的页面的page指令中加入errorPage属性,如:errorPage="exception.jsp"
即交给exception.jsp这个页面处理异常。并且要在该页面的page指令中
把isErrorPage设为true,如:isErrorPage="true"