jsp中隐含定义了9个对象,也叫内置对象。
page:代表当前对象;
pageContext:页面上下文对象,记录当前页面的相关信息;
request:该对象封装了用户提交的信息;
response:对客户的请求做出动态的响应,向客户端发送数据;
session:会话对象,记录会话范围内的相关信息;
application:应用对象,记录应用范围内的相关信息;
out:输出流对象,用于向浏览器输出信息;
config:配置对象,记录当前页面的配置信息;
exception:异常对象,记录出现异常的页面的错误信息。
pageContext对象
属性设置和获取:
void setAttribute()
Object getAttribute()
void removeAttribute()
Object findAttribute()
int getAttributeScope()
Enumeration getAttributeNamesInScope()
页面转发和包含:
void forward()
<%
pageContext.forward("top.jsp");
%>
void include()
<%
pageContext.include("top.jsp", true);
%>
request对象
1、属性设置和获取:
<%
request.setAttribute("username", "david");
out.println(request.getAttribute("username"));
request.removeAttribute("username");
Enumeration temp = request.getAttributeNames();
while (temp.hasMoreElements())
out.println((String)temp.nextElement() + "<br>");
%>
2、设置字符集编码:
void setCharacterEncoding(String arg0)
3、获取请求参数:
<%
String name = request.getParameter("username");
String hobby[] = request.getParameterValues("hobby");
Enumeration temp = request.getParameterNames();
while (temp.hasMoreElements())
out.println((String)temp.nextElement() + "<br>");
Map map = request.getParameterMap();
Iterator it = map.keySet().iterator();
while (it.hasNext())
out.println((String)it.next());
<%--该方法用于获取输入流对象,可通过输入流对象实现文件上传--%>
ServletInputStream getInputStream();
%>
4、获取请求行信息:
假设请求是:http://localhost:8888/test/hello.jsp?name=david
对应的http请求行:GET /test/hello.jsp?name=david HTTP /1.1
<%
out.println(request.getMethod()); GET
out.println(request.getRequestURI()); /test/hello.jsp
out.println(request.getQueryString()); name=david
out.println(request.getProtocol()); HTTP /1.1
out.println(request.getContextPath()); /test
out.println(request.getPathInfo()); null
out.println(request.getPathTranslated()); null
out.println(request.getServletPath()); hello.jsp
%>
5、获取请求头信息:
<%
out.println(request.getHeader("Accept-Language"));
out.println(request.getIntHeader("Content-Length"));
Enumeration ee = request.getHeaders("Accept-Encoding");
while (ee.hasMoreElements())
out.println((String)ee.nextElement() + "<br>");
Enumeration ee = request.getHeaderNames();
while (ee.hasMoreElements())
out.println((String)ee.nextElement() + "<br>");
%>
int getDateHeader(String name);
String getContentType();
int getContentLength();
Cookie[] getCookies();
6、获取网络信息:
<%
out.println(request.getRemoteAddr());
%>
String getRemoteHost();
int getRemotePort();
String getLocalAddr();
String getLocalName();
int getLocalPort();
String getServerName();
int getServerPort();
String getScheme();
String getRequestURL();
7、获取会话对象:
HttpSession getSession(boolean arg0);
HttpSession getSession();
8、获取请求分派对象:
RequestDispatcher getRequestDispatcher(String arg0);
response对象
1、设置状态行
<%
response.setStatus(response.SC_NOT_FOUND);
response.sendError(response.SC_NOT_FOUND, "this is a test");
%>
2、设置响应头信息
<%
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-cache");
response.setContentType("text/html;charset=gbk");
response.setCharacterEncoding("gbk");
response.setLocal(new java.util.Local("zh", "cn"));
%>
void setIntHeader(String name, int value);
void addIntHeader(String name, int value);
void setDateHeadder(String name, long value);
void addDateHeadder(String name, long value);
void setContentType(String s);
void setContentLength(int length);
setContentType()、setCharacterEncoding()和setLocal()都可以设置输出流的字符编码,区别是:
setCharacterEncoding()只能用来设置out输出流所采用的编码,但是其优先权最高,可以覆盖后两种方法中的设置;setContentType()既可以设置out输出流字符的编码方式,也可以设置浏览器接收到这些字符后以什么编码方式来解码,它的优先权居中;setLocal()也只能用来设置out输出流所采用的编码,优先权最低,会被前两种设置覆盖。
3、输出相应正文
ServletOutputStream getOutputStream();
PrintWriter getWriter();
void setBufferSize(int size);
int getBufferSize();
void flushBuffer();
void reset()
4、重定向
<%
response.sendRedirect("/jsp/other.jsp");
%>
session对象
1、属性设置和获取
void setAttribute(String name, Object value);
Object getAttribute(String name);
void removeAttribute(String name);
Enumeration getAttributeNames();
2、session状态相关操作
String getId();
long getCreationTime();
void setMaxInactiveInterval(int interval);
int getMaxInactiveInterval();
boolean isNew();
void invalidate();
long getLastAccessedTime();
application对象
1、属性设置和获取
void setAttribute(String name, Object value);
Object getAttribute(String name);
void removeAttribute(String name);
Enumeration getAttributeNames();
2、Web程序初始化参数设置
<%-- web.xml的参数配置 --%>
<%
out.println(application.getInitParameter("charset"));
Enumeration temp = application.getIniParameterNames();
while (temp.hasMoreElements())
out.println((String)temp.nextElement() + "<br>");
%>
3、访问资源文件
(1) 返回某个资源目录中所有子目录和文件路径名称,如
<%
Set set = application.getResourcePaths("/WEB-INF");
Iterator it = set.iterator();
while (it.hasNext())
out.println((String)it.next());
%>
(2) 返回指定的资源路径对应的一个URL,参数path以"/"开头,如
<%
java.net.URL url = application.getResource("/other.jsp");
%>
(3) 返回连接到某个资源上的输入流,如
<%
InpurStream is = application.getResourceAsStream("upload.jsp");
ServletOutputStream os = response.getOutputStream();
int len = is.read();
while (len != -1)
{
os.write(len);
len = is.read();
}
is.close();
os.close();
%>
上述代码实现了文件内容的传输,通过application.getResourceAsStream("upload.jsp")取得web路径下的资源文件upload.jsp的输入流,然后写到response的输出流中。
(4) 返回某个虚拟路径所映射的本地文件系统路径,如
<%
ServletInputStream sis = request.getInputStream();
String filepath = application.getRealPath("/upload.txt");
FileOutputStream fos = new FileOutputStream(filepath);
int len = sis.read();
while (len != -1)
{
fos.write(len);
len = sis.read();
}
fos.close();
%>
上述代码将请求信息中的实体内容写到web路径下的文件upload.txt中。
out对象
out是抽象类javax.servlet.jsp.JspWriter类型的一个实例对象,用于向客户端进行写操作。
void clear();
void clearBuffer();
void close();
int getBufferSize();
int getRemainning();
boolean isAutoFlush();
void newLine();
void print();
void println();
config对象
web.xml配置信息,貌似跟application对象的“web程序初始化参数设置”类似,将代码中的application改成config即可。
<%
out.println(config.getInitParameter("charset"));
Enumeration temp = config.getIniParameterNames();
while (temp.hasMoreElements())
out.println((String)temp.nextElement() + "<br>");
%>
exception对象
获取异常信息:
String getMessage();
将异常信息及其追踪输出至标准错误流:
void printStackTrace();