一:request对象
在jsp中,内置对象request封装了用户的提交的信息,那么该对象调用相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的用户信息。
内置对象request实现了serveletRequest借口类的一个实例,可以在Tomcat服务器的webapps\tomcat-docs\servletapi中查找ServeletRequest接口的方法。
1.获取用户提交的信息
比如:
<form action="某页面" method="post">
<input type="text" name="name" value="ok">
<input type="submit" value="提交" name="submit">
</form>
当用户按提交按钮后,request对象就可以用getParameter(String s)方法获取表单通过text提交的信息。
如:request.getParameter("name");
2.处理汉字信息
当用request对象获取用户提交的汉字字符时,会出现乱码问题,所以对汉字字符的信息必须采取特殊的处理方式———页面中使用page指令指定编码必须是gb2312,如下:
<%@ page contentType="text/html;charset=gb2312"%>
可以使用两种方式避免request对象获取的信息出现乱码:
a.对信息重新编码
String str=request.getParameter("message");
byte b[] =str.getBytes("iso-8859-1");//用ISO-8859-1对信息进行重新编码
str=new String(b);
b.request设置编码
request.setCharacterEncoding("gb2312");//在获取信息之前使用此方法设置自己的编码为bg2312
3.常用方法举例
(1)getProtocol()获取用户向服务器提交信息所使用的通信协议,比如http/1.1等。
(2)getServletPath()获取用户请求的jsp页面文件的目录。
(3)getContextPath()获取用户请求的当前web服务目录。
(4)getContentLength()获取用户提交的整个信息的长度。
(5)getMethod()获取用户提交信息的方式,比如post或get。
(6)getHeader(String s)获取http头文件中由参数s指定的头名字的值。s可取的头名:accept、accept-language、content-type、accept-encoding、user-agent、host、content-length、connection、cookie等。
(7)getHeaderNames()获取头名字的一个枚举。
(8)getHeaders(String s)获取头文件中指定头名字的全部值的一个枚举。
(9)getRemoteAddr()获取用户的IP地址。
(10)getRemoteHost()获取用户机的名称(如果找不到,就获取IP地址)。
(11)getServerName()获取服务器的名称。
(12)getServerPort()获取服务器的名称。
(13)getParamterNames()获取用户提交的信息题部分中name参数值的一个枚举。
二:response对象
与request对象相对应的是response对象。可以用response对象对用户的请求作出动态响应。
1.动态响应contentType属性
由于page指令只能为contentType指定一个值来决定响应的MIME类型,如果想动态地改变这个属性的值来响应用户,就需要使用response对象的setContentType(String s)方法来改变contentType的属性值。s可取:text/html、text/plain、image/gif、image/x-xbitmap、image/jpeg、image/pjpeg、application/x-shockwave-flash、application/vnd.ms-powerpoint、apllication/vnd.ms-excel、application/msword等。
2.response的http文件头
当用户访问一个页面时,会提交一个http请求给jsp引擎,这个请求包括一个请求行、http头和信息体,如:
post/example.jsp/HTTP.1.1 //请求行
host:localhost:8080 //http头
accept-encoding:gzip,deflate //http头
同样,响应也包括一些头。response对象可以使用方法
addHeader(String head,String value);或setHeader(String head,String value)来动态添加新的新的响应头和头的值,将这些头发送给用户的浏览器。如果添加的头已经存在,则先前的头被覆盖。
3.response重定向
可以使用response的sendRedirect(URL url)方法实现用户的重定向。就是将当前页面转换到url页面。
4.response的状态行
当服务器对用户请求进行响应时,它发送的首行称为状态行
a.1yy(1开头的3位数):主要是实验性质的
b.2yy:用来表明请求成功
c.3yy:用来表明在请求满足之前应采取进一步的行动
d.4yy:当浏览器给出无法满足的请求时,返回该状态代码,如404表示请求的页面不存在
e.5yy:用来表示服务器出现问题。如:500表示服务器内部发生错误。
一般不需要改变状态行,因为服务器会自动响应。当然我们也可以用response的setStatus(int n)方法设置响应的状态行。
三:session对象
http是一种无状态协议。一个用户向服务器发出请求request后,然后服务器返回响应response,在服务器端不保留连接的有关信息,因此当下一次连接时,服务器已没有以前的连接信息了,无法判断这一次连接和以前的连接是否属于同一个用户。当一个用户访问web服务目录时,可能会在这个服务目录的几个页面反复连接、反复刷新一个页面或不断地向一个页面提交信息等,服务器应当通过某种方法知道这是同一个用户。tomcat服务器可以使用内置session对象(会话)记录有关连接的信息。内置对象session由tomcat服务器创建,session是实现了HttpSession接口类的一个实例,可以在tomcat服务器的webapps\tomcat-docs\servletapi中查找HttpSession接口的使用方法。
1.session对象的id
当一个用户首次访问Web服务目录时,tomcat服务器会产生一个session对象,用于存储当前用户访问该服务目录时提交的所有信息。同时此session对象还被分配一个String类型的ID号,并将其发送到用户端,存放在用户的cookie中。这样session对象就同这个用户建立起了一一对应关系。当用户访问该服务目录其它页面时,服务器就不会再分配新的sessoion对象给用户,除非session对象的生命周期结束。
同一个用户在不同的web服务目录中的session对象是互不相同的。
2.session对象与url重写
session对象能否和用户建立起一一对应关系依赖于用户端是否支持cookie对象。如果不支持,那么用户在不同的网页之间的session对象可能是互不相同的。我们通过如下操作设置cookie为禁止(选择浏览器菜单-工具-Internet选项-隐私,将第三方cookie设置成禁止)。
如果用户不支持cookie,jsp页面可以通过url重写来实现session对象的唯一性。所谓url重写,就是当用户从一个页面重新连接到另一个页面时,通过向这个新的url添加参数,把session对象的ID传带过去,这样就可以保证用户在该网站各个页面中的session对象时完全相同的。可以用response对象调用encodeURL()或encodeRedirectURL()方法实现URL重写。
如String url=response.encodeRedirectURL("某个页面");
然后将连接目标写成<%=url%>就行。
3.session对象存储数据
session对象驻留在服务器,该对象调用某些方法保存用户在某个web服务目录期间的有关数据。session对象使用下列方法处理数据。
(1)public void setAttribute(String key,Object obj);就类似于Map类,使用key/value存储数据
(2)public Object getAttribute(String key); 获取关键字key对应的对象
(3)public Enumeration getAttributeNames();获取一个枚举对象
(4)public void removeAttribute(String name);移除关键字key对应的对象
4.session对象的生命期限
session对象的生存期限依赖于session对象是否调用invalidate()方法是的session对象无效或session对象达到了设置的最长“发呆”状态时间以及是否关闭浏览器 。
“发呆”状态时间就是指用户对某个web服务目录发出的两次请求之间的间隔时间(默认的“发呆”状态时间时30分钟),可以通过修改tomca服务器下的web.xml(位于conf文件下),重新设置session对象的最长“发呆”时间。如下:
同时session对象可以通过使用下列方法获取和设置与生存时间有关的信息。
(1)public long getCreationTime();获取session对象创建的时间,单位是毫秒
(2)public long getLastAccessedTime();获取session最后一次被操作的时间单位是毫秒
(3)public int getMaxInactiveInterval();获取session最长的"发呆"时间,单位是秒。
(4)public void setMaxInactiveInterval(int interval);设置session对象最长的"发呆"时间,单位是秒。
(5)public Boolean isNew();判断session对象是否是一个新建的对象
(6)invalidate();使session对象无效。
四:application对象
该对象与session对象差不多,不同的是,每个web服务目录下的application对象被访问该服务目录的所有的用户所共享,但不同web服务目录下的application对象互不相同。
1.application常用方法
(1)public String getServletInfo().获取Servelet编译器的当前版本信息。
其余四个方法与session对象的一样。
注意:有些服务器不支持直接使用application对象,必须使用ServeletContext类声明这个对象,再使用getServletContext()方法对这个application对象进行初始化。如下:
<%!
ServletContext application;
application=getServletContext();
%>
当然还有其它内置对象,这里就只介绍了常用的几种。