发表时间:2009-09-20
最后修改:2009-09-21
隐式对象(内置变量)
输入输出对象:request, response, out
作用域通信对象: session, application, pageContext
servlet对象:page, config(用的相对较少)
错误对象: exception
<%@ page errorPage="err.jsp" %>
<%@ page isErrorPage="true" %>
<%= exception.getMessage() %>
-----------------
属性与范围
request, session, application, pageContext都能借助属性来做到数据分享
void setAttribute(String, Object);
Enumeration getAttributeNamesInScope(int scope);
注意事项:1,数据类型转换
2,在pageContext,request,session,application中
可以有相同名字的属性,功能有很大的区别
pageContext中的属性只在当前页面中有效
requets:<jsp:forward>,<jsp:include>处理的是同一个
请求,它们的请求是在这几个页之间是共享的。
<%@ include file="a.jsp" %>也可共享
session
如何实现:1,利用客户端cookie. 2,地址重写
cookie是某个网站存在本地的一系列信息
Http请求是无状态的。
application 作用范围从服务器开始服务到服务器关闭。
-----------------
out对象的常用方法:
public abstract void print();
public abstract void println();
requet 对象
方法:
获取请求参数
public Object getAttribute();
public String getParameter(String name);
Enumeration getParameterNames();
String[] getParameterValues(String name);
Map getParameterMap();
获取请求HTTP标头的方法:
String getHeader(String);
Enumeration getHeaderNames();
Enumeration getHeaders(String name);
int getIntHeader(String name);
long getDateHeader(String name);
Cookie[] getCookies();
注意:request没有setParameter()方法。
------------------------
中文问题:
1,post 方式提交:request.setCharacterEncoding("xxxx");
2,get 方式提交:
new String(str.getBytes("ISO-8859-1"),"UTF-8")
地址栏为中文:在server.xml中的Connector标签下设置URIEncoding="UTF-8"
把useBodyEncodingForURI="true"//可以用request.setCharacterEncoding()统一转码
总结(只在Tomcat下):
1,所有页面的pageEncoding 相同GBK/GB2312/UTF-8。
方式一:conf/server.xml中<connector>中URIEncoding="同页面编码"
在每一个页面都做 request.setCharacterEncoding("同页面编码");
方式二:在conf/server.xml中<connector>中加useBodyEncodingForURI="true",在页面也要做request.setCharactoerEncoding("同页面编码");
尽量不要用getBytes()方式进行转码。
---------------------
request 对象
String getContextPath(); //得到根目录
String getServletPath(); //得到根目录后的路径
getRemoteAddr;//ip
getHeader("");//http
------------
response 对象
void addCookie();//增加头部信息
void sendRedirect(String url);//重定向
String encodeRedirctURL(String url);//对指定的地址进行编码
public abstract void setContentType(String type);
//设置响应MIME类型
public abstract String encodeURL(String url);
response.setHeader("Refresh","5;URL=htt://www.baidu.com");
--------------------
sendRidrect();//用绝对路径时要加根目录
<%
Cookie c = new Cookie("season","spring");
c.setMaxAge(30);//cookie的有效期为30秒
response.addCookie(c);//一定要先set再add
%>
String getValue();
int getVersion();
void setDomain(String domain);//设置cookie中适用的域名
void setPath(String path);//设置能够读取cookie的路径
Cookie a[] request.getCookies();
if(a[i].getName.equals("")){}
特殊符号不能放入Cookie