response

response响应过程

在发送一个请求时,会找到服务器引擎(tomcat),引擎会找到对应的web应用并创建request对象和reponse对象,并且创建request对象和response对象,找到应用后会执行应用web.xml在根据url-patten的内容创建servlet对象.吧request和response对象传入到方法中,拿到response对象后自己可以往响应中写入一些自己给客户端的内容,写的内容是存到一个response缓冲区中,当方法执行结束之后,tomcat就会从response缓冲区当中读取数据

设置响应行reponse.setState(int code)默认是200

添加响应头response.addHeader("name","123123")

设置date类型response.addDateHeader("my-Date",new Date().getTime());

设置int类型的值为int类型的头信息response.addIntHeader("qqq",1);

  • setHeader(name, value):如果Header中没有定义则添加,如果已定义则用新的value覆盖原用value值。
  • addHeader(name, value):如果Header中没有定义则添加,如果已定义则保持原有value不改变。

重定向

response.setStatus(302);//设置状态码
response.setHeader("location","/qqq");//设置重定向地址

也可以只写一行

response.setHeader("refresh","10;url=/admin/index");//过10秒之后去转发

响应体

设置响应体

response.getWriter().write("!@3");


//写文件
File file = new File(url);
        HttpHeaders headers=new HttpHeaders();
        //告诉浏览器以附件的形式打开,并且设置文件名的编码,防止乱码

        //通过ServletContext获取文件名对应的mime类型
        String mimeType = request.getSession().getServletContext().getMimeType(filename);
        response.setContentType(mimeType);//这么写的话可以直接解析图片或者mp4之类的文件

        response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(filename,"UTF-8"));//加上这行就能实现下载



        try(
                InputStream is = new FileInputStream(file);
                ServletOutputStream os = response.getOutputStream();//写在这里,执行结束会自动关闭输入输出流
        ){
            int read = 0;
            byte[] bytes = new byte[2048];
            while ((read = is.read(bytes)) != -1)
                os.write(bytes, 0, read);
        }

以上俩个只能选一种

设置编码

浏览器默认使用的是iso8859编码,不支持中文,可以设置

response.setCharacterEncoding("UTF-8");//设置缓冲区当中的编码
response.setHeader("Content-Type","text/html;charset=UTF-8");//设置编码,

Request

Request 和 Response 对象起到了服务器与客户机之间的信息传递作用。Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏览器。

请求行

获取

request.getMethod();//获取请求方式
request.getRequestURI();//获取从更目录之后的请求路径
request.getRequestURL();//获取带上域名的请求完整路径
request.getQueryString();//获取字符串格式的请求参数

请求头

获取

//枚举集合
Enumeration<String> headerNames = request.getHeaderNames();//获取全部请求头的名称
while (headerNames.hasMoreElements()){
    System.out.println(headerNames.nextElement());
}

request.getHeader("cookie")//获取指定请求头的指定内容
request.getHeader("referer")//获取浏览器的上一个界面

referer

用a标签,或者表单提交js跳转等,是有referer的

但是如果是直接访问的,收藏夹,或者在浏览器当中直接输地址是没有referer的

获取请求参数

System.out.println(request.getParameter("name"));//获取一个name值
request.getRemoteAddr();//获取ip地址
String[] names = request.getParameterValues("name");//获取多个值的name,比如复选框
Enumeration<String> parameterNames = request.getParameterNames();
//遍历获取所有的参数名称
 Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()){
    System.out.println(parameterNames.nextElement());
}
//获取全部的请求参数
Map<String,String[]> parameterMap = request.getParameterMap();

请求转发

RequestDispatcher disp = request.getRequestDispatcher("/admin/user/userlist");
disp.forward(request,response);//springmvc中不能这样处理用:return "forward:/hello";
Last modification:April 21, 2022
如果觉得我的文章对你有用,请随意赞赏