您的位置:首页 > 产品设计 > UI/UE

JSP内置对象(基础二上)out,request,response

2016-11-18 12:51 399 查看
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,提交的对象保存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息