javaee之request和response的详细练习

一、关于在Servlet中的路径解决问题

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class demo5 extends HttpServlet {

	/**
	 *路劲问题:
	 *	首先给每个需要写路径的地方带上一个/,然后区分
	 * 1)服务器行为 :则斜杠就代表是在项目下的地方,需要访问什么路劲便可以直接填写
	 * 2)浏览器行为 :则斜杠就代表是在webapps下,但是不确定是在什么项目,所以路径需要先填写一个项目名
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		//请求转发,属于服务器行为
		request.getRequestDispatcher("/index.jsp").forward(request, response);
		
		//响应重定向,属于浏览器行为
		response.sendRedirect("/Myitcast_day05/index.jsp");
		
		//读取web应用的文件,属于服务器行为
		this.getServletContext().getRealPath("/index.jsp");
		this.getServletContext().getResourceAsStream("/index.jsp");
		
		//超链接,属于在浏览器发送请求,是浏览器行为
		//<a href="/Myitcast_day05/index.jsp">点击</a>
		
		//表单提交,也是在浏览器发送请求,是浏览器行为
		//<form action="/Myitcast_day05/index.jsp"></form>
		
		
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

二、根据在视图层显示字符数据

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class demo6 extends HttpServlet {

	/**
	 *显示数据字符给视图 
	*/
		public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	
			//告诉浏览器以utf-8的形式输出内容,但是浏览器的码表却没有改
			//所以一般是设置setContentType这个方法,这个方法便可以省略了
			response.setCharacterEncoding("UTF-8");
			
			//输出的内容以html形式,text/html也是浏览器默认设置的形式
			response.setContentType("text/html;charset=utf-8");
			
			//输出响应头信息content-type为text/html;charset=utf-8,这个方法是总的方法
			//当输出了setContentTy这个方法便不用输出这个
			response.setHeader("content-type","text/html;charset=utf-8");
			
			//把输出的内容换成xml的形式输出
			response.setContentType("text/xml;charset=utf-8");
			
			
			//在浏览器输出内容的时候查询的码表是ISO-8859-1,不支持中文,所以需要转码表
			//PrintWriter out = response.getWriter();
			//out.write("暴龙");
			
			
			OutputStream out = response.getOutputStream();
			out.write("暴龙".getBytes());   //这个字节码的形式输出参照的码表是GBK,所以需要转换为utf-8来输出
			out.write("暴龙".getBytes("UTF-8"));
		}

	
		public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	
		doGet(request,response);
		}

}

三、在视图层下载数据给用户

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class demo7 extends HttpServlet {

	/**
	 * 在浏览器下载给用户
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		//读取服务器发布的内容,创建成一个文件
		String path = this.getServletContext().getRealPath("/attach/hibernate.zip");
		File file = new File(path);
		
		//设置响应头content-disposition来设置下载的形式
		response.setHeader("content-disposition", "attachment; filename="+file.getName());
		
		//读文件并按照流的方式输出
		FileInputStream in = new FileInputStream(file);
		
		OutputStream out = response.getOutputStream();
		
		byte[] b = new byte[512];
		int length = 0;
		while((length=in.read())!=1){
			out.write(b, 0, length);
		}
		
		out.close();
		in.close();
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

四、关于request和response的刷新转发重定向的问题

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class demo8 extends HttpServlet {

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		//设置响应头为refresh,当值为整数时候,表示当多少秒时该网页会自动刷新
		response.setHeader("refresh", "3");
		
		//当值为整数;url=xxxx,表示当多少秒后会刷新到url指定的页面
		response.setHeader("refresh", "3;url=/Myitcast_day05/index.jsp");
		
		
		//设置响应头location,表示会转发到后面指定的url页面,常常配合状态码302
		response.setHeader("location", "/Myitcast_day05/index.jsp");
		response.setStatus(302);
		
		
		//整个web应用只有一个servletContext对象,
		//放入ServletContet的数据常驻内存的,一般是不用这个属性的
		this.getServletContext().setAttribute("p", "9");

		//另一个域对象:HttpServletRequest对象
		//注意:只需要使用1次的数据,可以用request对象共享出去
		request.setAttribute("p", "9");
		
		//request的请求转发是可以得到共享数据的,但是response的重定向是不可以的
		request.getRequestDispatcher("/demo4").forward(request, response);
		response.sendRedirect("/Myitcast_day05/demo4");
		
		//request能够得到在request域中存放的共享数据
		request.getAttribute("p");
		
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

最后的总结:

responset的重定向和request的转发的区别:

请求重定向:

1)浏览器一共发出了2次请求

2)浏览器行为

3)地址栏会改变,变成了去到的地址

4)请求重定向不能通过request共享数据


请求转发:

1)浏览器只发出1次请求

2)服务器行为 

3)地址栏不会改变的!

4)请求转发可以通过request共享数据


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值