Java-Servlet的请求和响应

Request 和Response 对象都是由服务器创建,管理,销毁.  由我们来使用.

继承体系结构:

ServletRequest(接口)<--------继承<-------HttpServletRequest(接口)<--------实现 org.apache.catalina.connector.RequestFacade@6049a827
ServletResponse(接口)<---------继承---  HttpServletResponse(接口)<-------------实现------org.apache.catalina.connector.ResponseFacade@3bec9d4

1.请求对象:获取请求的消息

 

1)为了防止编码格式的错误,首先应该设置请求编码和响应编码.

 

//设置请求编码和响应编码
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");

 

2)/获取请求头

 

String name = request.getHeader("username");//获取请求头的值
		long date  = request.getDateHeader(name);//获取日期头
		int i = request.getIntHeader(name);//获取数字头


3)获取请求行

 

 

String method = request.getMethod();//获取请求的方式:get/post
		String uri = request.getRequestURI();//获取Uri
		StringBuffer url = request.getRequestURL();//获取URL
		String addr = request.getRemoteAddr();//获取IP地址
		String queryString = request.getQueryString();//获取请求的参数
		String protocol = request.getProtocol();//获取访问的版本,浏览器的信息

4)获取请求体:封装post请求的请求参数

//获取请求体:封装post请求的请求参数
		BufferedReader reader = request.getReader();
		String line = reader.readLine();


5)获取请求的参数

 

 

//获取请求参数的不同方式
		String na = request.getParameter("username");//通过参数名称获取值
		String[] strings = request.getParameterValues("hobby");//通常用于复选框
		Map<String,String[]> map = request.getParameterMap();
		//遍历map集合
		Set<String> keySet = map.keySet();
		for(String key:keySet){
			System.out.println(key);//遍历参数名
			String[] ss = map.get(key);//获取参数的值
			for(String v:ss){
				System.out.println(key+"="+v);
			}
		}
		Enumeration names = request.getParameterNames();//通过枚举的方式获取
		

6)中文乱码的解决:post请求

 

 

//处理post请求中文乱码的问题
		String n = request.getParameter("name");//服务器使用ISO-8859-1 的方式解码
		byte[] bys = n.getBytes("ISO-8859-1");
		n = new String(bys,"utf-8");


7)重定向和请求转发

 

重定向特点:两次请求,两次转发;既可以访问内部资源,也可以访问外部资源,地址栏内的地址发生变化

请求转发:一次请求,一次响应;只可以访问项目内部的资源;地址栏的地址不发生改变.

 

//重定向
		//1.设置302状态
		response.setStatus(302);
		response.setHeader("location", "http:baidu.com");
		//重定向:合二为一
		response.sendRedirect("http:baidu.com");
		//请求转发
		request.getRequestDispatcher("/demo1").forward(request, response);


重定向和请求转发的区别:

1.一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为请求转发。

 

2.一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源,称之为请求重定向。

3.RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。
调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

4.HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。

 5.RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

2.响应对象:封装响应的数据,当真正的响应之前,取出里面的数据,给浏览器响应.

1)为了防止编码格式的错误,首先应该设置请求编码和响应编码.

 

//设置请求编码和响应编码
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");

 

2)响应字符串:

 

 

//响应一个字符串'
		PrintWriter writer = response.getWriter();
		writer.write("正在请求");


3)响应一个图片

 

 

//响应一个图片
		String path = this.getServletContext().getRealPath("xxx.jpg");//获取图片的真是路径
		//读取文件
		FileInputStream  fis=new FileInputStream(new File(path));
		//获取要读的文件
		ServletOutputStream fos = response.getOutputStream();
		byte[]  by=new byte[1024];
		int len=0;
		while((len=fis.read(by))!=-1){
			fos.write(by,0,len);
			fos.flush();
		}
		//关闭资源
		fis.close();
		fos.close();

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值