JavaWeb学习 (2) JSP - Ryan的修炼之路
JSP内置对象
1、JSP内置对象是Web容器创建的一组对象,【不使用new关键字】就可以使用的内置对象。例如:out
2、JSP九大内置对象:
out,request,response,session,application(五大常用对象)
Page,pageContext,exception.config(四个不太常用对象)
out对象
out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。
最初的JspWriter类对象根据页面是否有缓存来进行不同的实例化操作。可以在page指令中使用buffered='false'属性来轻松关闭缓存。
常用方法
void println()向客户端打印字符串
void clear()清除缓冲区的内容,如果在flush之后调用会抛出异常
void clearBuffer()清除缓冲区的内容,如果在flush之后调用不会抛出异常
void flush()将缓冲区内容输出到客户端
int getBufferSize()返回缓冲区以字节数的大小,如不设缓冲区则为0
int getRemaining()返回缓冲区还剩余多少可用
boolean isAutoFlush()返回缓冲区满时,是自动清空还是抛出异常
void close()关闭字节流
clear() 前不能跟flush() 否则抛出异常
clearBuffer后加flush()不抛出异常
request对象
客户端的请求信息被封装在Request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。Request对象具有请求域,即完成客户端的请求前,该对象一直有效。常用方法如下:
getParameter()//返回name指定参数的参数值;getParameterValues()//返回包含参数name的所有值的数组;setAttribute()//存储此请求中的属性;getAttribute()//返回指定属性的属性值;getContentType//得到请求体的MIME类型;getProtocol()//返回请求用的协议类型及版本号;getServerName()//返回接受请求的服务器主机名;
执行forward或include
request还有一个功能就是执行forward和include,也就是代替JSP所提供的forward和include动作指令
getRequestDispatcher("/x.jsp").include(ServletRequest request,ServletResponse response);
getRequestDispatcher("/x.jsp").forward(SevletRequest request,ServletResponse response); 注意:使用request的getRequestDispatcher(String path)方法时,该path字符串必须以斜线开头。
jsp表单处理
<form action="动作" name="名字" method="提交方式">
method的两种方式
get
通过URL提交数据,数据在URL中【可以看到】。提交数据最多不超过【2KB】。安全性较低,但效率比post方式高。适合提交数据量不大,且安全要求不高的数据:比如:搜索、查询等功能。post
将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。如:注册、修改、上传等功能。
response对象
response是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其它页面的response对象对当前页面无效。
常用方法如下:
String getCharacterEncoding(); 返回响应用的是何种字符编码;void setContenType(String type); 设置响应的MIME类型;PrintWriter getWriter(); 返回可以向客户端输出字符的一个对象(注意比较:PrintWriter与内置out对象的区别——response获得的writer对象在打印时优先于我们的out内置对象,可用out.flush()强制清空缓冲区,保证out内置对象的打印顺序);sendRedirect(java.lang.String location); 返重新定向客服端的请求。
重定向是response的一个用处, 与forward不同的是重定向会丢失所有的请求参数和request范围属性.
forward 和redirect对比
| 重定向(Redirect) | 转发(forward) |
|---|---|
| 服务端responce.sendRedirect("xx.jsp")重定向 | 服务端request.getRequestDispatcher("xx.jsp").forward(request,response)请求转发 |
| 客户端行为:即客户端会访问两次,第一次访问后会立即跳转到第二个重定向页面上,【从本质上讲等于两次请求】,而前一次的请求封装的request对象不会保存 | 【服务器行为】:服务器会代替客户端去访问转发页面,【从本质是一次请求】,转发后请求对象会保存 |
| 地址栏的URL地址会改变。 | 地址栏的URL地址不会改变。 |
session对象
session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。
session代表: 从客户浏览器连接服务器开始到客户端与服务器断开的过程
long getCreationTime()//返回session的创建时间(毫秒值)。simpleDateFormat//格式化日期和时间(导包:java.text.*)。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");Date d = new Date(session.getCreationTime());sdf.format(d);String getId()//返回session的唯一ID号。Object setAttribute(String name,Object value)//向session中保存数据Object getAttribute(String name)//获取session中的数据(如果不存在,则返回null)int getMaxInactiveInterval()//获取失效时间(秒)。String[] getValueNames()//获取该session中所有的属性名称
Application对象
Application对象实现了用户间数据的共享,可存放全局变量;Application开始于服务器的启动,终止于服务器的关闭;在用户的前后连接或不同用户之间的连接中,可以对Application对象的同一属性进行操作;Application对象是ServletContext类的实例.
application对象常用方法:
public void setAttribute(String name,Object value);//通过setAttribute方法将一个值设置成application的属性值, 使得该web应用里的每个jsp和servlet都可以访问该属性public Object getAttribute(String name);//返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null.Enumeration getAttributeNames();//返回所有可用属性那个名的枚举String getServerInfo();//返回JSP(SERVER)引擎及版本号
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对象
String toString(); //把此Object对象转换为String类的对象
void notify(); //唤醒一个等待的线程
void notyfyAll(); //唤醒所有等待的线程
void wait(int timeout); //使一个线程处于等待直到timeout结束或被唤醒
void wait(); //使一个线程处于等待直到被唤醒
exception对象
jsp内置对象 exception
在发生异常的页面,page指令中指定errorPage="excetion.jsp"
在excetion.jsp中,指定isErrorPage="true"
Exception对象常用方法:
String getMessage() 返回描述异常的信息
String toString() 返回关于异常的简短描述信息
void printStackTrace() 显示异常及其栈轨迹
Throwable FillInStackTrace() 重写异常的执行栈轨迹
pageContext对象
pageContext对象是PageContext类的实例, 可以访问page, request, session, application范围的变量.
pageContext对象的常用方法:
JspWriter getOut() 返回当前客户端相应被使用的JspWriter流(out)
HttpSession getSession() 返回当前页面中HttpSession对象(session)
Object getPage() 返回当前页面的Object对象(page)
ServletRequest getRequest()返回当前面的ServletRequest对象(request)servletResponse getResponse()返回当前页的ServletResponse对象(response)void setAttribute(Strign name, Object attribute) 设置属性及属性值
Object getAttribute(String name ,int scope) 在指定范围内取属性值
int getAttributeScope(String name) 返回某属性的作用范围
void forward(String relativeUrlPath) 使当前页面跳转到另外一个页面(服务器转发)
void include(String relativeUrlPath) 在当前位置包含另一个文件
eg:
<%// 两种方法设置page ,request, session, application的属性pageContext.setAttribute("page","hello");request.setAttribute("request","hello");pageContext.setAttribute("request2","hello" , pageContext.REQUEST_SCOPE); session.setAttribute("session","hello");pageContext.setAttribute("session2","hello" , pageContext.SESSION_SCOPE);application.setAttribute("app","hello");pageContext.setAttribute("app2","hello" , pageContext.APPLICATION_SCOPE);%>Config对象
config对象代表JSP的配置信息, 但JSP页面通常无需配置所以应用较少.
ServletContext getServletContext()返回含有服务器相关信息的ServletContext对象
String getInitParameter(String name)返回初始化参数的值
Enumeration getInitParameterNames()返回Servlet初始化所需所有参数的枚举
Cookie技术
cookie是web服务器保存在客户端的一些列文本信息
保存用户对象的追踪;
保存用户网页浏览记录与习惯;
简化登录;
容易泄露用户信息;
使用JSP设置Cookies
使用JSP设置cookie包含三个步骤:
创建一个Cookie对象: 调用Cookie的构造函数,使用一个cookie名称和值做参数,它们都是字符串。
Cookie cookie = new Cookie("key","value");设置有效期:调用
setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。下面的操作将有效期设为了24小时。
cookie.setMaxAge(60*60*24); 用response将cookie发送至HTTP响应头中:调用
response.addCookie()函数来向HTTP响应头中添加cookies。
response.addCookie(cookie);用request读取cookie对象
调用request.getCookies()方法来获得一个javax.servlet.http.Cookie对象的数组
Cookie[] cookies = request.getCookies();public int getMaxAge()
获取cookie有效期,以秒为单位,默认为-1 ,表明cookie会活到浏览器关闭为止public void setMaxAge(int expiry)
设置cookie有效期,以秒为单位,默认有效期为当前session的存活时间public String getName()
返回 cookie的名称,名称创建后将不能被修改public void setValue(String newValue)
设置 cookie的值public String getValue()
获取cookie的值, 返回字符串类型(cookie是文本文件格式存于客户端)
session与cookie对比
Session保存在服务器端内存里,Cookie以文本文件形式保存在客户端;
Session保存的是Object类型,Cookie保存的是String类型;
Session随会话的结束将其存储的数据销毁,Cookie可以长期保存在客户端;
Session保存重要信息,Cookie保存不重要信息;

