一、九大内置对象
范围对象:
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();
//使输出格式为img
response.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>