JSP内置对象
一、JSP内置对象简介
1.JSP内置对象是web容器创建的一组对象,不适用new关键字就可以使用的对象
2.jsp九大内置对象:out对象;request对象;response对象;session对象;application对象;Page对象;pageContext对象;exception对象;config对象
3.五大常用内置对象:out, request, response, session, application

二、out对象
1.缓冲区:Buffer,就是内存的一块区域用来保存临时数据。
2.out对象是JspWriter类的实例,是向客户端输出内容常用的对象。
常用方法如下:
void println() //向客户端打印字符串 void clear() //清除缓冲区的内容,如果在flush之后调用会抛出异常 void clearBuffe(); // 清除缓冲区的内容,如果在flush之后调用不会抛出异常 void flush() //将缓冲区内容输出到客户端 int getBufferSize() // 返回缓冲区以字节数的大小,如不设缓冲区则为0 int getRemaining() //返回缓冲区还剩余多少可用 boolean isAutoFlush() //反悔缓冲区满时,是自动清空还是抛出异常 void close() //关闭输出流
三、Get与Post的区别
表单有两种提交方式:get与post。定义在
<form action="dologin.jsp" name="loginForm" method="提交方式***"></form>
动作/名称等顺序无所谓。
1.get:以【明文】方式,通过URL提交数据,数据在URL中【可以看到】。提交数据最多不超过【2KB】。安全性较低,但效率比post方式高。适合提交数据量不大,且安全要求不高的数据:比如:搜索、查询等功能。
2.post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。如:注册、修改、上传等功能。
四、request对象
1.内容: 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。 它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。
2.方法:
1 object getAttribute(String name) //返回指定属性的属性值 2 Enumeration getAttributeNames()// 返回所有可用属性名的枚举 3 String getCharacterEncoding()// 返回字符编码方式 4 int getContentLength() //返回请求体的长度(以字节数) 5 String getContentType() //得到请求体的MIME类型 6 ServletInputStream getInputStream()// 得到请求体中一行的二进制流 7 String getParameter(String name) //返回name指定参数的参数值 8 Enumeration getParameterNames() //返回可用参数名的枚举 9 String[] getParameterValues(String name)// 返回包含参数name的所有值的数组 10 String getProtocol() //返回请求用的协议类型及版本号 11 String getScheme() //返回请求用的计划名,如:http.https及ftp等 12 String getServerName()// 返回接受请求的服务器主机名 13 int getServerPort() //返回服务器接受此请求所用的端口号 14 BufferedReader getReader() //返回解码过了的请求体 15 String getRemoteAddr() //返回发送此请求的客户端IP地址
16 void setAttribute(String,Object); //存储此请求中的属性
3.常用方法总结:
//获得客户机信息 getRequestURL方法返回客户端发出请求时的完整URL。 getRequestURI方法返回请求行中的资源名部分。 getQueryString 方法返回请求行中的参数部分。 getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。 getRemoteAddr方法返回发出请求的客户机的IP地址。 getRemoteHost方法返回发出请求的客户机的完整主机名。 getRemotePort方法返回客户机所使用的网络端口号。 getLocalAddr方法返回WEB服务器的IP地址。 getLocalName方法返回WEB服务器的主机名。 //获得客户机请求头 getHeader(string name)方法:String getHeaders(String name)方法:Enumeration getHeaderNames()方法 //获得客户机请求参数(客户端提交的数据) getParameter(String)方法(常用) getParameterValues(String name)方法(常用) getParameterNames()方法(不常用) getParameterMap()方法(编写框架时常用)
4.提交中文数据乱码问题总结
1、如果提交方式为post,想不乱码,只需要在服务器端设置request对象的编码即可,客户端以哪种编码提交的,服务器端的request对象就以对应的编码接收,比如客户端是以UTF-8编码提交的,那么服务器端request对象就以UTF-8编码接收(request.setCharacterEncoding(“UTF-8”))
2、如果提交方式为get,设置request对象的编码是无效的,request对象还是以默认的ISO8859-1编码接收数据,因此要想不乱码,只能在接收到数据后再手工转换,步骤如下:
1).获取获取客户端提交上来的数据,得到的是乱码字符串,data=”???è?????”
String data = request.getParameter(“paramName”);
2).查找ISO8859-1码表,得到客户机提交的原始数据的字节数组
byte[] source = data.getBytes(“ISO8859-1”);
3).通过字节数组以指定的编码构建字符串,解决乱码
data = new String(source, “UTF-8”);
通过字节数组以指定的编码构建字符串,这里指定的编码是根据客户端那边提交数据时使用的字符编码来定的,如果是GB2312,那么就设置成data = new String(source, “GB2312”),如果是UTF-8,那么就设置成data = new String(source, “UTF-8”)
五、response对象
1. 通过response.getWriter()获得的printWriter对象打印的内容总是提前于内置的out对象;但使用out.flush()可以强制输出缓冲区内容,就不受printWriter的影响。
2. 请求重定向: response.sendRedirect("xxx.jsp"); 会由原来的页面立刻跳往xxx.jsp页面(和out.flush()会造成冲突)。可用于让客户发送新的请求。
intWriter outer=response.getWriter();//获得输出流对象 PrintWriter对象outer的输出总是提前与比内置out对象

3.请求重定象与请求转发:
求重定向相当于是重新发送了一次请求,而请求转发是一次请求;
重定向:就好比我们找一个A广告公司给设计名片,A明确告诉我们他们不会设计,就让我们找B公司,结果B公司给我设计好了,所以我们会对外宣称是B公司给我们设计的名片,(所以我们就相当于发送了两次次请求,URL地址栏里就从A变成了B公司)
转发:同样去找A公司给设计名片,A公司虽然不能设计但是他们接下了我们的活,把这项任务外包(转发)给B公司,最终我们会把钱给A公司,也就会对外宣称是A公司给我们设计的名片这就是请求重定向(所以我们就相当于只对A发送了一次请求,URL地址栏里依然是A公司)
response.sendReadirect();请求重定向:两次请求。客户端行为。 前一次对象不保存,无法传参。 url会改变
request。getRequsetDispatcher().foward(req,response); 一次请求,服务器行为 对象保存

浙公网安备 33010602011771号