第三节 JSP内置对象(上)
目录
-九大内置对象
JSP内置对象是Web容器创建的一组对象,不使用new就可使用。
常用:out,response,request,session,application
其他:config,Page,pageContext,exception
-web程序的请求响应模式
用户发送请求(request)
服务器给用户响应(response)
-out对象
jspWriter类的实例,是向客户端输出内容常用的对象
void println()向客户端打印字符串
void clear()清除缓冲区内容,如果在flush之后调用会抛出异常
void clearBuffer()清除缓冲区内容,在flush调用不会抛出异常
即: 如果在out.flush();之后使用out.clear();程序会抛出异常,只能执行out.flush();之前的,之后的不能正常执行
而out.clearBuffer();之前使用out.flush();则不会抛出异常
void flush()将缓冲区内容输出到客户端
int getBufferSize()返回缓冲区以字节数的大小,如不设置缓冲区则为0
int getRemaining()返回缓冲区还剩余多少可用
注: 关于flush和out的输出问题,out只是将内容放到缓冲区,并不给与直接输出,flush是将当前缓冲的内容输出之后清空缓冲区。关于为什么out可以输出,是因为当请求结束后即页面加载要完成了,会自动将缓冲区的内容全部输出但不清空缓冲区,这也是为什么缓冲区的剩余空间会有变化
-get与post都是页面提交信息的方式
get:数据在URL中可以看到,适合数据量不大,安全性不高的数据,例如搜索,查询等。
post:将用户的信息封装在HTML HEADER内,......,例如注册,修改,上传等
使用表单标签,与用户交互
网站怎样与用户进行交互?答案是使用HTML表单(form)。表单是可以把浏览者输入的数据传送到服务器端,这样服务器端程序就可以处理表单传过来的数据。
语法:
提交方式之一: form表单
<form name="标签名称" action="动作/目标地址" method="提交方式">
</form>讲解:
1.<form> :<form>标签是成对出现的,以<form>开始,以</form>结束。
2.action :浏览者输入的数据被传送到的地方,比如一个PHP页面(save.php)。
3.method : 数据传送的方式(get/post)。
request是对提交的数据进行处理
- request对象
request.setCharacterEncoding("utf-8") 解决中文乱码问题,无法解决URL传递中文出现的乱码问题,需要配置conf/server.xml文件。
request.getParameter()可以获取通过URL传递的参数。
request.getParameter()与request.getParameterValues()得到提交的数据
默认提交的是英文字符集,要显示中文要设置字符集
方法一:request.setCharacterEncoding()设置传过来的格式(无法用于解决URL传值)
方法二:修改tomacat的server.xml配置文件,在配置端口下面加上字符集配置,在Connector标签下加入一个属性如下:
URIEncoding=“utf-8”URIEncoding=""(解决URL传值问题)
例:
<%=request.getParameter("username") %>
<%
String [] favorites=request.getParameterValues("favorite");
for(int i=0;i<favorites.length;i++){
out.println(favorites[i]+" ");
}
<%request.setAttribute("pwd","123456"); %>
获取密码:<%=request.getAttribute("pwd") %><br>
请求体的MIME类型:<%=request.getContentType() %><br>
协议类型及版本号:<%=request.getProtocol() %><br>
服务器主机名:<%=request.getServerName() %><br>
服务器端口号:<%=request.getServerPort() %><br>
-response 对象
response 对象包含了响应客户请求的有关信息,但在jsp中很少直接用到它。它是httpservletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。常用方法
string getcharacterEncoding()返回响应用的是何种字符编码
void setContentType(String type ) 设置响应的mime类型
print Writer getWriter()返回可以向客户端输出字符的一个对象(注意比较:printWrite与内置对象的区别
例:
<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=UTF-8"%>//PrintWriter 浏览器不认识,要导入io包。
<%
response.setContentType("text/html;charset=utf-8");//设置响应的MIMI类型
out.println("<h1>response测试对象</h1>");
out.println("<hr>");
//out.flush();//当response.sendRedirect("reg.jsp");时,为out.flush();加注释否则会抛出异常
PrintWriter outer = response.getWriter();//获得输出流对象
outer.println("大家好,我是response对象输出流outer对象");
response.sendRedirect("reg.jsp");//请求重定向:sendRedirect(“跳转的页面地址”)重新定向客户端的请求
%>
注: PrintWriter与内置out对象的区别:
PrintWriter的输出总是提前于内置out对象,即outer.println();输出的结果在out.println()的上方
解决方法:out.flush();//强制清空缓冲区,把缓冲区的内容写到浏览器上
-请求转发和请求重定向的区别
请求重定向是客户器端行为而请求转发是服务器端行为
//请求重定向
response.sendRedirect("request.jsp");
//请求转发
request.getRequestDispatcher("request.jsp").forward(request, response);
请求重定向:客户端行为,response.sendRedirect(),本质上等同于2次请求,第一次请求的对象不会保存,即从reg.jsp中请求跳转到response.jsp的对象不会保存,第二次请求将改变地址栏,即跳转到页面request.jsp
请求转发:服务器行为,request.getRequestDispatcher().forward(req.resp);是一次请求,转发后请求对象会保存,即reg.jsp的请求跳转到response.jsp的对象会保存,地址栏的URL不会改变,将request.jsp页面内容呈现在response页面中,并将以上对象填入request的相应的位置中。