jsp内置对象主要有:
out,request,response,session,application,page,pageContext,exception,config。
- out内置对象
out对象是JspWrite类的示例,是向客户端输出内容常用的类。
常用方法:
1.void println()向客户端打印字符串
2.void clear()清除缓冲区内容,如果在flush之后调用会抛出异常
3.void clearBuffer()清除缓冲区内容,如果在flush之后调用不会抛出异常
4.void flush将缓冲区内容输出到客户端
5.int getBufferSize()返回缓冲区字节数的大小,如果不设缓冲区则为0
6.int getReMaining()返回缓冲区剩余多少可用
7.boolean isAutoFlush()返回缓冲区满时,是自动清空还是抛出异常
8 void close()关闭输出流
运用:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h1>out内置对象</h1>
<%
out.println("<h2>静夜思</h2>");
out.println("床前明月光<br>");
out.println("疑是地上霜<br>");
out.flush();
//out.clear();//这里会抛出异常。
out.clearBuffer();//这里不会抛出异常。
out.println("举头望明月<br>");
out.println("低头思故乡<br>");
%>
缓冲区大小:<%=out.getBufferSize() %>byte<br>
缓冲区剩余大小:<%=out.getRemaining() %>byte<br>
是否自动清空缓冲区:<%=out.isAutoFlush() %><BR>
</body>
</html>
- request对象
首先介绍表单的get提交与post提交方式的区别。
1.get提交
get提交以明文的方式通过URL提交数据,提交的数据最多不超过2KB,安全较低但效率比post高,适合提交数据量不大,安全性不高的数据,比如:搜索,查询功能。
post提交是将用户提交的信息封装在HTML HEADER内,适合用于提交数据量大,安全性高的用户信息,比如:注册,修改,上传等功能。
客户端请求的信息被封装在request对象中,通过它才能了解客户的需求,做出响应,它是httpSerlvetRequest类的实例。request对象具有请求作用域,即完成客户端请求之前,该对象一直有效。
常用方法:
void setAttribute(String name,Object):设置名字为name的request 的参数值
Object getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有 Cookie 对象,结果是一个Cookie 数组
getCharacterEncoding() :返回请求中的字符编码方式
getContentLength() :返回请求的 Body的长度
getHeader(String name) :获得HTTP协议定义的文件头信息
getHeaders(String name) :返回指定名字的request Header 的所有值,结果是一个枚举的实例
getHeaderNames() :返回所以request Header 的名字,结果是一个枚举的实例
getInputStream() :返回请求的输入流,用于获得请求中的数据
getMethod() :获得客户端向服务器端传送数据的方法
String getParameter(String name) :获得客户端传送给服务器端的有 name指定的参数值
getParameterNames() :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实
例
String[] getParameterValues(String name):获得有name指定的参数的所有值
String getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString() :获得查询字符串
getRequestURI() :获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的 IP 地址
getRemoteHost() :获取客户端的名字
getSession([Boolean create]) :返回和请求相关 Session
String getServerName() :获取服务器的名字
String getContentType:得到请求体的MIME类型
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性
实例
实现用户表单提交
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h1>用户登录</h1>
<hr>
<form action="request.jsp" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>爱好:</td>
<td>
<input type="checkbox" name="favorite" value="read">读书
<input type="checkbox" name="favorite" value="music">音乐
<input type="checkbox" name="favorite" value="movie">电影
<input type="checkbox" name="favorite" value="internet">上网
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"/></td>
</tr>
</table>
</form>
<br>
<br>
<a href="request.jsp?username=李四">测试URL传参数</a>
</body>
</html>
request.jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'request.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h1>request内置对象</h1>
<%
request.setCharacterEncoding("utf-8");
//解决中文乱码问题,无法解决URL传递中文出现的乱码问题。
//解决URL传递中文乱码需到tomcat下的server.xml内加入URIEncoding="utf-8"
request.setAttribute("password", "123456");
%>
用户名:<%=request.getParameter("username") %><br>
爱好 :<%
if(request.getParameterValues("favorite")!=null)
{
String[] favorites = request.getParameterValues("favorite");
for(int i=0;i<favorites.length;i++)
{
out.println(favorites[i]+" ");
}
}
%> <br>
密码:<%=request.getAttribute("password") %><br>
请求体的MIME类型:<%=request.getContentType() %><br>
协议类型及版本号: <%=request.getProtocol() %><br>
服务器主机名 :<%=request.getServerName() %><br>
服务器端口号:<%=request.getServerPort() %><BR>
请求文件的长度 :<%=request.getContentLength() %><BR>
请求客户端的IP地址:<%=request.getRemoteAddr() %><BR>
请求的真实路径:<%=request.getRealPath("request.jsp") %><br>
请求的上下文路径:<%=request.getContextPath() %><BR>
</body>
</html>
解决URL传递中文乱码:
打开tomcat->conf->server.xml
加入:URIEncoding=”utf-8”
- response对象
response是HttpSerlvetResponse类的实例,response对象具有页面作用域,即访问一个页面时,该页面的response对象只能对这次访问有效,其他页面的response对当前页面无效。
常用方法:
String getCharacterEncoding()返回响应用的是何种字符编码
void setContentType(String type)设置响应MIME类型
PrintWrite getWrite()返回可以向客户端输出字符的一个对象
sendRedirect(java.lang.String location)重新定向客户端的请求
实例
<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>
<%
response.setContentType("text/html;charset=utf-8"); //设置响应的MIMI类型
out.println("<h1>response内置对象</h1>");
out.println("<hr>");
//out.flush();
PrintWriter outer = response.getWriter(); //获得输出流对象
outer.println("大家好,我是response对象生成的输出流outer对象");
response.sendRedirect("login.jsp");//请求重定向
//请求重定向
//response.sendRedirect("request.jsp");
//请求转发
// request.getRequestDispatcher("request.jsp").forward(request, response);
%>
请求转发与请求重定向的区别:
请求重定向:客户端行为,response.sendRedirect();从本质上讲,相当于两次请求,前一次请求对象不会保存,地址栏的URL地址会改变。如上例子从login.jsp表单提交到response.jsp,页面调用response.sendRedirect(“request.jsp”)(取消注释);则地址栏是request.jsp,且提交的对象未保存。
请求转发:request.getRequestDispatcher().forward(request, response);
是一次请求,请求对象会保存,地址栏的url地址不会变。如上例子从login.jsp表单提交到response.jsp,页面调用request.getRequestDispatcher(“request.jsp”).forward(request, response)(取消注释);则地址栏是response.jsp,提交的对象保存。