JSP九大内置对象之request和response

本文详细介绍了JSP中的九大内置对象,包括范围对象如pageContext、request等,以及response对象的使用方法,例如如何获取请求参数、请求头信息,并解决了中文乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、九大内置对象

范围对象:

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>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值