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,提交的对象保存。