当前热点-一篇博客上手request和response
2023-04-20 13:59:30来源:博客园
(资料图)
request:获取请求数据response:设置响应数据
Requestrequest继承体系ServletRequest——Java提供的请求对象根接口HttpServletRequest——Java提供的对http协议封装的请求对象接口RequestFacade——tomcat实现定义类
request获取数据package com.itheijma.web;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.BufferedReader;import java.io.IOException;@WebServlet("/req1")public class RequestDemo1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //String method() 获取请求方式 String method = req.getMethod(); System.out.println(method); //String getContextPath() 获取虚拟目录(项目访问路径) String contextPath = req.getContextPath(); System.out.println(contextPath); //StringBuffer getRequestURL() 获取URL(统一资源定位符) StringBuffer url = req.getRequestURL(); System.out.println(url.toString()); //String getRequestURI() 获取URI(统一资源标识符) String uri = req.getRequestURI(); System.out.println(uri); //String getQueryString() 获取请求参数(get方式) String queryString = req.getQueryString(); System.out.println(queryString); //------------ //获取请求头 String agent = req.getHeader("user-agent"); System.out.println(agent); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取post请求体:请求参数 // 1. 获取字符输入流 BufferedReader br = req.getReader(); // 2. 读取数据 String line = br.readLine(); System.out.println(line); }}
request通用的方式获取数据package com.itheijma.web;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Map;@WebServlet("/req2")public class RequestDemo2 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //get请求逻辑// System.out.println("get..."); // 1.获取所有参数的map集合 Map map = req.getParameterMap(); for (String key : map.keySet()) { //username:zhangsan System.out.print(key+":"); //获取值 String[] values = map.get(key); for (String value : values) { System.out.print(value + " "); } System.out.println(); } System.out.println("----------"); // 2.根据key获取参数值,数组 String[] hobbies = req.getParameterValues("hobby"); for (String hobby : hobbies) { System.out.println(hobby); } // 3. 根据key获取单个参数值 String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println(username); System.out.println(password); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //post请求逻辑 this.doGet(req,resp);// System.out.println("post...");// // 1.获取所有参数的map集合// Map map = req.getParameterMap();// for (String key : map.keySet()) {// //username:zhangsan// System.out.print(key+":");//// //获取值// String[] values = map.get(key);// for (String value : values) {// System.out.print(value + " ");// }//// System.out.println();// }//// System.out.println("----------");//// // 2.根据key获取参数值,数组// String[] hobbies = req.getParameterValues("hobby");// for (String hobby : hobbies) {//// System.out.println(hobby);// }//// // 3. 根据key获取单个参数值// String username = req.getParameter("username");// String password = req.getParameter("password");// System.out.println(username);// System.out.println(password); }}
request请求参数中文乱码解决方法package com.itheijma.web;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.nio.charset.StandardCharsets;/** * 中文乱码问题解决方案 */@WebServlet("/req3")public class RequestDemo3 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. 解决乱码 POST 获取参数方式:getReader()读取数据流 request.setCharacterEncoding("utf-8"); //设置字符输入流的编码 // 2. 获取username String username = request.getParameter("username"); System.out.println("解决乱码前:"+username); // 3. 解决乱码 GET 获取参数方式:getQueryString // 乱码原因:tomcat进行url解码,默认的字符集ISO-8859-1// // 3.1 先对乱码数据进行编码:转为字节数组// byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);// // 3.2 字节数组解码// username = new String(bytes, StandardCharsets.UTF_8); username = new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8); System.out.println("解决乱码后"+username); }}
request请求转发请求转发(forward):一种在服务器内部的资源跳转方式。请求转发特点:
浏览器地址栏路径不发生变化只能转发到当前服务器的内部资源一次请求,可以在转发的资源间使用request共享数据req4package com.itheijma.web;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.nio.charset.StandardCharsets;/** * 请求转发 */@WebServlet("/req4")public class RequestDemo4 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("demo4"); //存储数据 request.setAttribute("msg","hello"); //请求转发 request.getRequestDispatcher("/req5").forward(request,response); }}
req5
package com.itheijma.web;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/req5")public class RequestDemo5 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("demo5"); //获取数据 Object msg = request.getAttribute("msg"); System.out.println(msg); }}
responseResponse完成重定向重定向:一种资源跳转的方式resp1
package com.itheima.web.response;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/resp1")public class ResponseDemo1 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("resp1...");// // 重定向// // 1. 设置状态码 302// response.setStatus(302);// // 2. 设置响应头 Location// response.setHeader("Location","/tomcat-demo2/resp2"); // 简化方式完成重定向 response.sendRedirect("/tomcat-demo2/resp2"); }}
resp2
package com.itheima.web.response;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/resp2")public class ResponseDemo2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("resp2..."); }}
重定向特点:
浏览器地址栏路径发生变化可以重定向到任意位置的资源(服务器内、外部均可)两次请求,不能在多个资源使用request共享数据资源路径问题(什么时候加虚拟目录)浏览器使用:需要加虚拟目录服务端使用:不需要加虚拟目录
动态获取虚拟目录
//动态获取虚拟目录 String contextPath = request.getContextPath(); response.sendRedirect(contextPath + "/resp2");
Response响应字符数据package com.itheima.web.response;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;/** * 响应字符数据:设置字符数据的响应体 */@WebServlet("/resp3")public class ResponseDemo3 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); //获取字符输出流 PrintWriter writer = response.getWriter(); //content-type //response.setHeader("content-type","text/html"); writer.write("你好"); writer.write("aaa
"); //细节:流不需要关闭 }}
Response响应字节数据package com.itheima.web.response;import org.apache.commons.io.IOUtils;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.FileInputStream;import java.io.IOException;import java.io.PrintWriter;/** * 响应字节数据:设置字节数据的响应体 */@WebServlet("/resp4")public class ResponseDemo4 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. 读取文件 FileInputStream fis = new FileInputStream("e://a.jpg"); // 2. 获取response字节输出流 ServletOutputStream os = response.getOutputStream(); // 3. 完成流的copy// byte[] buff = new byte[1024];// int len = 0;// while ((len = fis.read(buff)) != -1){// os.write(buff,0,len);// } IOUtils.copy(fis,os);//使用工具类 fis.close(); }}
pom文件导入工具类
commons-io commons-io 2.6
本网推荐
- 当前热点-一篇博客上手request和response
- hegon电磁炉如何使用(hegon电磁炉如何使用视频)
- 今年58岁,60岁一次性补缴3万农保,养老金能每月领取1500元吗? 独家焦点
- 2022年佛山照明实现营业收入87.60亿元,同比增长0.39% 环球快看
- 强化预算绩效管理全力办好民生实事
- xnxnxnxn中国姑娘 17岁姑娘的鲍鱼
- 《花月杀手》长达3小时26分, 将亮相本届戛纳
- 世界头条:全球最大级别2.4万箱级超大型集装箱船出海试航
- 【环球快播报】探访襄阳唐城:轻歌曼舞间再现大唐盛景
- 全球简讯:周长是什么意思图片(周长是什么意思)
- 焦点短讯!一季度中国经济稳健前行 数据里彰显出大国经济的韧性与活力
- 全球热推荐:Mysteel:从一季度GDP数据看当下大宗原材料行业面临的挑战
- 宝安体育馆游泳馆怎么买票_宝安体育馆游泳馆
- 全球速递!硅业分会:本周硅料市场维持缓跌走势 成交相对清淡
- 全球快讯:“四清”工程激活乡村振兴“一池春水”
- 焦点热议:违法获利2.6亿元!曾在东兴称霸一方,陈基福涉黑组织骨干成员廖树宙获刑20年
- 环球速读:外公为赌资“绑架”外孙女要价50万被判刑 和家人的关系何去何从?
- 华西证券: 华西证券股份有限公司关于2023年度第三期短期融资券发行结果的公告
- 湖南省创新创业大赛累计帮助企业获创业投资超百亿元
- 每日视讯:知音漫客丛书·青春校园系列:班长大人9
- 天天动态:欧冠四分之一赛次回合对阵AC米兰客场对阵那不勒斯
- 飞龙股份:目前公司的电子水泵、电子油泵和热管理系统产品广泛应用在服务器领域|全球热讯
- 全球热点!同飞股份(300990):该股换手率大于8%(04-19)
- 今日热讯:PICO 4 Pro正式发售,售价3799元起
- 直击上海车展:AI变革引领智能出行|全球关注
- 米兰队内欧冠跑动距离前五:托纳利103.5km居首,莱奥77.2km次席
- 有理数包括小数吗_有理数包括什么
- 道县:唐超学调研指导安全生产、防汛等工作
- 美国幼童钻进白宫触发警报 被多名特工当场控制
- 红茶的功效与作用_红茶叶的功效与作用