一、九大内置对象
范围对象:pageContext(页面范围)、request(请求范围)、session(会话范围)、application(应用范围)
常用对象
response、out
不常用对象
exception、page、config
二、requrst
客户端发送给服务器的所有数据,所有信息,都会被封装在request内置对象中,也就是说,请求行+请求头+请求体-->request!
主要方法:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><fieldset><legend>获取请求行的数据</legend>请求方式:<%=request.getMethod() %><br />请求uri:<%=request.getRequestURI() %><br /></fieldset><fieldset><legend>获取请求头的数据</legend>Accept:<%=request.getHeader("Accept") %><br />User-Agent:<%=request.getHeader("User-Agent") %><br />Accept-Encoding:<%=request.getHeader("Accept-Encoding") %><br />Host:<%=request.getHeader("Host") %><br /></fieldset><fieldset><legend>获取其他信息</legend>获取客户端ip地址:<%=request.getRemoteAddr() %><br />获取web应用在服务器的真实路径:<%=request.getRealPath("/") %><br /></fieldset><fieldset><legend>获取请求参数</legend>姓名:<%=request.getParameter("username") %><br />密码:<%=request.getParameter("password") %><br /></fieldset>
<fieldset><legend>request的其他一些方法</legend>请求的web应用名字:<%=request.getContextPath()%><br />请求的参数的长度(提交方式必须为post,长度为name的值加上参数:us=1):<%=request.getContentLength() %><br />服务器的ip地址:<%=request.getLocalAddr() %><br />请求的端口:<%=request.getLocalPort() %><br /></fieldset><fieldset><legend>利用枚举获取所有请求参数的集合</legend><%Enumeration<String> s= request.getParameterNames();while(s.hasMoreElements()){String str = s.nextElement();out.print(str);}%></fieldset>
数据:
解决request获取到中文乱码问题:主要原因,编码和解码用的码表不一样
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%-- 第一种方式 提交方式必须为post<% request.setCharacterEncoding("utf-8");%><%=request.getParameter("name") %><br /><%=request.getParameter("pw") %><br /><%=request.getParameter("addr") %><br /> --%><% String name1=request.getParameter("name"); String name=new String(name1.getBytes("iso-8859-1"),"utf-8");String pw1=request.getParameter("pw"); String pw=new String(pw1.getBytes("iso-8859-1"),"utf-8");String addr1=request.getParameter("addr"); String addr=new String(addr1.getBytes("iso-8859-1"),"utf-8");%><%=name %><br /><%=pw %><br /><%=addr %><br />
三、response
服务器发送给客户端的所有数据,都会被先封装进response中,在从response中取出来,制作一个http响应
方法:
1、getWriter();用于获取一个字符输出流,该流的起点是服务器,终点是客户端
注意:
Out内置对象是一个字符输出流, getOutputStream()获取的是一个字节流,这两个流都能向客户端浏览器发送数据,方向是一致的! 所以它们2的关系是互斥的!如果非要使用response.getOutputStream()获取的字节流,必须让out失效,使用response.getOutputStream()目的就是为了给客户端发送2进制数据! 而不是发送html字符串。
举例:制作五彩的验证码
<%@page import="java.awt.Graphics2D"%><%@page import="java.awt.Font"%><%@page import="java.awt.Color"%><%@page import="com.sun.image.codec.jpeg.JPEGImageEncoder"%><%@page import="com.sun.image.codec.jpeg.JPEGCodec"%><%@page import="java.io.OutputStream"%><%@page import="javax.imageio.stream.ImageOutputStream"%><%@page import="java.awt.Graphics"%><%@page import="java.awt.image.BufferedImage"%><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%//让out强制失效out.clearBuffer();out = pageContext.pushBody();//使输出格式为imgresponse.setHeader("content-type","image/jpeg" );//创建图片BufferedImage bi = new BufferedImage(100,20,BufferedImage.TYPE_INT_RGB);//涂鸦//创建画笔Graphics gp = bi.getGraphics();String n ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";gp.setColor(Color.white);gp.fillRect(0, 0, 100, 20);for(int m=1; m<=4; m++){int i = (int)(Math.random()*(61-0+1)+0);char num = n.charAt(i);int r = (int)(Math.random()*256);int g = (int)(Math.random()*256);int b = (int)(Math.random()*256);gp.setColor(new Color(r,g,b));gp.drawString(num +" ", m*17, 15);}//设置干扰线for(int k=1;k<=4;k++){int w = (int)(Math.random()*101);int h = (int)(Math.random()*21);int l = (int)(Math.random()*101);int t = (int)(Math.random()*21);gp.drawLine(w, h, l, t);}//输出OutputStream os = response.getOutputStream();JPEGImageEncoder jie = JPEGCodec.createJPEGEncoder(os);jie.encode(bi);%>
在页面上使用
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><script>window.onload = function(){var bt = document.getElementById("bt");var ig = document.getElementById("ig");bt.onclick = function(){ig.src="diffcolor.jsp?a="+new Date().getTime();}}</script><form action="a.jsp">用户名:<input type="text" /><br />密码:<input type="password" /><br />验证码:<img id="ig" src="diffcolor.jsp" style="border:black solid 1px;"><br /><button type="button" id="bt">看不清?换一张</button><button type="submit">提交</button></form>