javaweb:request请求对象(5)

1.请求和响应的概述:
什么请求:在浏览器地址栏输入地址,点击回车请求服务器,这个过程就是一个请求过程。
什么响应:服务器根据浏览器发送的请求,返回数据到浏览器在网页上进行显示,这个过程就称之为响应。

2.HttpServletResponse对象
HttpServletResponse是一个接口,它的父接口是ServletResponse,在开发中通常使用HttpServletResponse
响应信息分为三部分:响应行、响应头、响应正文(响应体)
1.1 发送状态码的相关方法:
>>>1.设置状态码
setStatus(int sc) :参数就是状态码。
setStatus(int sc, String sm) :第一个参数表示状态码,第二个参数 就状态码的描述。
常见的状态码:200 响应成功
302 重定向
404 请求资源找不到
500 服务器代码出异常。

3.HttpServletRequest请求对象
HttpServletRequest它是一个接口,它的父接口ServletRequest,在开发中,常用的是带协议的请求对象。
请求消息:请求行,请求头,请求参数。
1.1 HttpServletRequest请求对象
1.获取请求行消息的相关方法:
常用的请求行方法:
>>> 1.获取请求提交的方式: getMethod();
>>> 2.获取请求的协议: getProtocol();
>>> 3.获取项目名称:getContextPath();
>>> 4.获取servlet路径:getServletPath();
>>> 5.获取请求路径: getRequsetURI(),getRequestURL();
uri对应的值:/项目名称/servlet路径
url对应的值:http://localhost:8080/uri

	2.获取请求消息头相关的方法
	  >>> 1. 根据消息头,获取值: String value = getHeader(消息头的名称);
	  >>> 2. 获取所有的消息头: Enumeration er = getHeaderNames();
	  根据Referer请求消息头,做一个防盗链的案例:
	    难点:怎么判断这个发起的下载请求是从别的网站上发起的?
	    解决方法:根据Referer请求头对应的值,是否包含了服务器的名称
		       如果包含,就说明是从本网站下载的,否则就不是。
	3.获取请求参数相关的方法:
	 >>> 1.根据name属性值,获取用户输入的值:String value = getParameter(name属性对应的值);
	 >>> 2.根据name属性值,获取用户选择的值:String[] vaules = getParameterValues(name属性对应的值);
	 >>> 3.没有参数,获取所有值:Map<String ,String[]> map = getParameterMap();
	
	4.解决请求参数的中文乱码问题:
	  中文乱码处理分两种情况:
	  第一种情况:处理get方式提交的中文乱码
		      使用的String的构造方法解决中文乱码:new String(字节数组,编码格式);
		      代码:String newvalue = new String(value.getBytes("ISO8859-1"),"utf-8");
	  第二种情况:处理post请求的中文乱码问题:
		       post提交,会把参数首先提交到request对象的缓冲区中,缓冲区默认编码是ISO8859-1,不支持中文
		       处理方法:把request缓冲区的编码给设置成支持中文的码表格式。
		       代码:request.setCharacterEncoding("utf-8");
	5.通过Requset对象传递数据
	  什么域对象:在一定的范围内,可以存值和取值。
	  request域对象:在一次请求中,可以存值和取值。
	   >>> 存值: setAttribute(String key,Object obj);
	   >>> 取值:Object obj = getAttribute(String key);
	   >>> 移除: removeAttribute(String key);
	     
1.2 RequestDispatcher接口
	在开发中访问到一个web资源后,需要服务器跳转到另一个资源去处理请求,可以通过sendRedirect重定向
	方法来实现,也可以RequestDispatcher转发对象的forward方法来实现。
	得到转发对象:RequestDispatcher forwardObj = request.getRequestDispatcher("另一个资源的路径");
	常用方法:
		>>> 1.实现请求转发:forwardObj.forward(request,response);
		>>> 2.实现请求包含:forwardObj.include(request,response);
	1. 请求转发:
		    特点:发送了一次请求,响应一次,和request域对象配合使用,可以实现值的传递。
		    转发路径:转发动作是在服务器内部实现的,所以转发路径不要携带项目名称。
	   请求重定向:
		     特点:发送了两次请求,响应了两次,不能和request域对象配合使用。
		     重定向路径:重定向动作在浏览器端执行的,所以路径需要携带项目名称。
	2.请求包含:
	  请求包含:在服务器内部完成的,路径不需要携带项目名称。

2.通过request获得请求行
获得客户端的请求方式:String getMethod()

获得请求的资源:

String getRequestURI()

StringBuffer getRequestURL()

String getContextPath() —web应用的名称

String getQueryString() ---- get提交url地址后的参数字符串

username=zhangsan&password=123

request.getRemoteAddr() — 获得访问的客户端IP地址request.getRemoteAddr() — 获得访问的客户端IP地址

public class LineServlet extends HttpServlet {
   
 
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
   
		
		//1、获得请求方式
		String method = request.getMethod();
		System.out.println("method:"+method);//method:GET
		//2、获得请求的资源相关的内容
		String requestURI = request.getRequestURI();
		StringBuffer requestURL = request.getRequestURL();
		System.out.println("uri:"+requestURI);//uri:/WEB15/line
		System.out.println("url:"+requestURL);//url:http://localhost:8080/WEB15/line
		//获得web应用的名称
		String contextPath = request.getContextPath();
		
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值