response和request 入门

response

1.response发送状态码

public class AServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.sendError(404, "你请求的资源存在,但不给你看!");
	
	}

}

得到的结果

2.一些响应头

package cn.itcast.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 AServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	/*	//适用于多值的响应头
		response.addHeader("aaa", "A");
		response.addHeader("aaa", "AA"); 
		//适用于单值int类型
		response.setIntHeader("Content-Lenth", 888);
		//第二个参数为毫秒
		response.setDateHeader("expires", 1000*60);*/
		
		//****发送错误状态码
		response.sendError(404, "你请求的资源存在,但不给你看!");
		
		//*****适用于单值的响应头
		response.setHeader("aaa", "AAA");
		
		
	}

}
3.  演示重定向

  用戶請求BServlet 然后BServlet响应302 给出Location 头

快捷重定向方法:

sendRedirect("day10_1/CServlet");
package cn.itcast.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;


//演示重定向
//用戶請求BServlet 然后BServlet响应302 给出Location 头
public class BServlet extends HttpServlet {




	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("BServlet");
		/**
		 * 重定向
		 * 1.设置Location
		 * 2.发送302状态码
		 */
//		
//		response.setHeader("Location", "/day10_1/CServlet"); 
//		response.setStatus(302);
		
		//快捷重定向
	//	response.sendRedirect("day10_1/CServlet");
		response.sendRedirect("http://www.baidu.com");
		
	}


}

4.演示定时刷新

package cn.itcast.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 DServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//设置一个Refresh 表示定时刷新
		PrintWriter writer = response.getWriter();
		writer.print("欢迎xxx登录!5s后自动跳转到主页");
		response.setHeader("Refresh", "5;URL=/day10_1/CServlet");
	}

}

5.禁用浏览器缓存

package cn.itcast.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;

//禁用浏览器缓存
//从index。jsp 可以看到这三个参数名字
/**
 * <meta>标签可以代替响应头
 *<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">  
 *
 */
public class FServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.getWriter().print("hello world");
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("pragma","no-cache");
		response.setDateHeader("expires", 0);
	}

}

6.response的两个流:

⑴.ServletOutputStream 用来向客户端发送字节数据

ServletOutputStream sot = response.getOutputStream();

⑵.PrintWriter 用来向客户端发送字符数据 需要设置编码

PrintWriter writer = response.getWriter();

响应字节数据

IO工具包

commons-io-1.4.jar  下载 丢进lib包里

package cn.itcast.servlet;

import java.io.FileInputStream;
import java.io.FileOutputStream;
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;

import org.apache.commons.io.IOUtils;

public class GServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	/*	String string = "Hello outputStream";
		byte[] bytes =string.getBytes();
		response.getOutputStream().write(bytes);
		*/
		
		//演示响应字节数据
		
		//把一张图片读取到字节数组中
		String path ="F:/a.jpg";
		FileInputStream in = new FileInputStream(path);
		byte[] bytes = IOUtils.toByteArray(in); //读取输入流内容的字节到字节数组中
		response.getOutputStream().write(bytes);
		
		//最终会把图片显示出来
	}

}


request 

封裝了客戶端所有的请求数据

1.获取常用信息:⒈获取客户端IP:request.getRemoteAddr()

                        ⒉请求方式:request.getMethod(),可能是post也可能是get

2.获取Http请求头:String getHeader(String name ) 适用于单值头

3.通过User-Agent 识别用户浏览器类型

package cn.itcast.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
 * 获取客户端Ip地址
 * 获取请求方式
 * 获取User-Agent,得到客户端的信息(操作系统浏览器)
 * 
 *
 */

@WebServlet("/AServlet")
public class AServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String addr = request.getRemoteAddr(); //获取客户端的IP地址
		System.out.println("IP为:" + addr);
		
		System.out.println("请求方式:" + request.getMethod()); //获取请求方式(几乎都是get 只有表单发post)
		
		String userAgent = request.getHeader("User-Agent");  //获取名为User-Agent的请求头
		System.out.println("" + userAgent);
		
		/**
		 * IP为:0:0:0:0:0:0:0:1
		请求方式:GET
		Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
		 */
		//判断是否包含Chrome 是否在谷歌浏览器运行
		if (userAgent.toLowerCase().contains("chrome")) {
			System.out.println("谷歌浏览器");
		}else if (userAgent.toLowerCase().contains("firefox")) {
			System.out.println("火狐浏览器");
		}else if (userAgent.toLowerCase().contains("msie")) {
			System.out.println("IE浏览器");
		}
		
		
	}


}

4.通过request来获取url的相关方法

如请求URL为  http://localhost:8080/day10_2/AServlet?username=123&password=abc

    String getScheme() 获取协议 http

    String getServerName() 获取服务器名 localhost

    String getServerPort() 获取服务器端口 8080

    String getContextPath() 获取项目名 /day10_2

    String getServletPath() 获取Servlet路径 /AServlet

    String getQueryString() 获取参数部分,即问号后面的部分  username=123&password=abc

    String getRequestURI() 获取请求URI 等于项目名加Servlet路径  /day10_2/AServlet

    String getRequestURL() 获取请求URL 等于不包含参数的整个请求路径即 问号前面的 http://localhost:8080/day10_2/AServlet

所以一般获取getRequestURL() 和getQueryString () 即全部的地址


package cn.itcast.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/CServlet")
public class CServlet extends HttpServlet {
	  
	//通过request来获取url的相关方法
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().print(request.getScheme()+ "<br/>");  //获取请求协议
		response.getWriter().print(request.getServerName()+"<br/>"); //获取服务器名称
		response.getWriter().print(request.getServerPort()+"<br/>"); //获取服务器端口号
		response.getWriter().print(request.getContextPath() + "<br/>"); //获取项目名称
		response.getWriter().print(request.getServletPath() + "<br/>"); //获取Servlet路径
		response.getWriter().print(request.getQueryString() + "<br/>"); //获取参数部分
		response.getWriter().print(request.getRequestURI() + "<br/>"); // 获取请求URI
		response.getWriter().print(request.getRequestURL() + "<br/>"); //获取请求URL
	}


}

这个在谷歌浏览器输出<br/>标签并没有换行 在ie可以换行



暂时还不知道原因

5.防盗链:如果请求不是通过本站的超链接发出,则报404.

在a.html添加這一句

  <body>
    <a href="/day10_2/BServlet">xxx</a>
  </body>
然后Servlet这样写
package cn.itcast.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/BServlet")
public class BServlet extends HttpServlet {
	//使用referer请求头 来防盗链
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String referer = request.getHeader("Referer");
		System.out.println(referer);
		
		if(referer ==null || !referer.contains("localhost")){
			System.out.println("hello");
		}else{
			response.sendRedirect("http://www.baidu.com");//快捷定向 
		}
	}


}

6。演示request获取请求参数

首先建一个html

<!DOCTYPE html>
<html>
  <head>
    <title>a.html</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">
     <meta name="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
	<h1>测试请求参数</h1>
	<a href="/day10_3/AServlet?xxx=XXX&yyy=YYY">点击这里</a>
	<hr/>
	<form action="/day10_3/AServlet" method="post">
		用户名:<input type="text" name="username"><br/>
		密码:<input type="password" name="password"><br/>
		爱好: <input type="checkbox" name="hobby" value="cf"/>吃饭
			<input type="checkbox" name ="hobby" value="sj"/>睡觉
			<input type="checkbox" name="hobby" value="ddm"/>打代码
		<br/>
		<input type="submit" value="提交">
			
	</form>
  </body>
</html>

package cn.itcast.servlet;

import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;

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


@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
	
	//演示request获取请求参数
	
	
	//get获取xxx yyy
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		 System.out.println("GET:" + request.getParameter("xxx"));
		 System.out.println("GET:" + request.getParameter("yyy"));
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//单值
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		// 多值
		String[] hobby = request.getParameterValues("hobby");
		System.out.println(username +"..." + password +"..." + Arrays.toString(hobby));
		
		//测试获取所有请求参数的名称
		Enumeration names = request.getParameterNames();
		while (names.hasMoreElements()) {
			System.out.println(names.nextElement());
			
		}
		
		//获取所有请求参数 封装到Map中
		Map<String , String[]> map = request.getParameterMap();
		for(String name:map.keySet()){
			String[] value = map.get(name);
			System.out.println(name +"="+Arrays.toString(value));
		}
		System.out.println(map);
		
	}

}

7.请求转发 forward  one留头不留体 

package cn.itcast.servlet.forward;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//演示请求转发
//one 留头不留体

@WebServlet("/OneServlet")
public class OneServlet extends HttpServlet {
	
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//在使用getWriter()方法之前 调用以下编码方法
		response.setContentType("text/html;charset=utf-8");
		System.out.println("OneServlet....");
		response.setHeader("aaa", "AAA");	//设置响应头 
		
//		for(int i=0;i<1024*24+1;i++){
//			response.getWriter().print("Hello OneServlet");	//设置响应体 这个会被忽略 但要是响应体太多 会直接抛异常 所以这段话应该废弃 (测试效果)
				//java.lang.IllegalStateException: Cannot forward after response has been committed
//		}
		
		//向request域中添加一个属性
				request.setAttribute("username", "zhangsan");
		
		//等同于调用TwoServlet的service方法
		request.getRequestDispatcher("/TwoServlet").forward(request,response); //请求转发
	
		
	
	}

}
package cn.itcast.servlet.forward;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/TwoServlet")
public class TwoServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println(request.getAttribute("username"));
		System.out.println("TwoServlet...");
		response.getWriter().print("hello TwoServlet"); //设置响应体
		
	}

}

8。请求包含 include 留头又留体

package cn.itcast.servlet.include;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//演示请求包含 留头又留体 
@WebServlet("/CServlet")
public class CServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("CServlet....");
		response.setHeader("aaa", "AAA");	//设置响应头 
		
		response.getWriter().print("Hello CServlet");	
		
		//等同于调用TwoServlet的service方法
		request.getRequestDispatcher("/DServlet").include(request,response); //请求转发
	}

}
package cn.itcast.servlet.include;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/DServlet")
public class DServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("DServlet...");
		response.getWriter().print("hello DServlet"); //设置响应体
	}

}


9 编码(这个看看就行 好像Tomcat 8 不适合 先写着吧)

<!DOCTYPE html>
<html>
  <head>
    <title>form.html</title>
    
    //这句话不加会乱码
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">
    <meta name="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
    This is my HTML page. <br>
    <form action="/day10_4/AServlet" method="post">
    	用户名:<input type="text" name="username" value="李四"/><br/>
    	<input type="submit" value="提交"/>
    </form>
    	<hr/>
    	<a href="/day10_4/AServlet?username=张三">GET</a>
  </body>
</html>

package cn.itcast.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/AServlet")
public class AServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/**
		 * 1。先获取来使用iso的错误字符串
		 * 2.回退,使用utf8重编
		 * 这是tomcat8之前的版本用 的  8以后自动utf8编码
		 */
		String name =request.getParameter("username");
//		byte[] b = name.getBytes("iso-8859-1");
//		name = new String(b,"utf-8");
		System.out.println(name);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/**
		 * 1.在获取参数之前 需先调用request.setCharacterEncoding("utf-8");
		 * 2.使用getParameter()获取参数  username=%E5%BC%A0%E4%B8%89  =李四
		 */
		request.setCharacterEncoding("utf-8");
		String username = request.getParameter("username");
		System.out.println(username);
	}

}

package cn.itcast.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/AServlet")
public class AServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//打印到页面的时候让其编码为utf-8
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().print("请查看是否有session这个cookie");
	}
	
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值