day09_request&response学习笔记
1、响应消息行 HTTP/1.1 200 OK
2、响应消息头
3、响应正文(主体)
案例1:向客户端输出中文数据:用PrintWriter(字符流)发送数据
案例2:向客户端输出中文数据:用OutputStream(字节流)发送数据
案例3:客户端下载文件
案例4:自己编写代码实现客户端网页显示验证码
案例5:通过验证码工具类实现客户端网页显示验证码
案例6:实现定时刷新
4、response的几处细节
1. getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。
二、HttpServletRequest
1、请求消息行
2、请求消息头
1 package com.itheima.servlet; 2 3 import java.beans.IntrospectionException; 4 import java.beans.PropertyDescriptor; 5 import java.io.IOException; 6 import java.io.UnsupportedEncodingException; 7 import java.lang.reflect.InvocationTargetException; 8 import java.lang.reflect.Method; 9 import java.util.Enumeration; 10 import java.util.Map; 11 12 import javax.servlet.ServletException; 13 import javax.servlet.http.HttpServlet; 14 import javax.servlet.http.HttpServletRequest; 15 import javax.servlet.http.HttpServletResponse; 16 17 import org.apache.commons.beanutils.BeanUtils; 18 19 import com.itheima.entity.User; 20 21 public class ServletDemo3 extends HttpServlet { 22 23 public void doGet(HttpServletRequest request, HttpServletResponse response) 24 throws ServletException, IOException { 25 // 告诉服务器要使用什么码表,注:客户端浏览器使用的是什么码表,传过来给服务器的就该使用什么码表 26 request.setCharacterEncoding("UTF-8"); // 注:只能处理post请求方式 27 28 test1(request); 29 test2(request); 30 test3(request); 31 test4(request); 32 } 33 34 private void test4(HttpServletRequest request) { 35 try { 36 User u = new User(); 37 System.out.println("封装数据前:" + u); 38 39 BeanUtils.populate(u, request.getParameterMap()); 40 41 System.out.println("封装数据后:" + u); 42 } catch (Exception e) { 43 e.printStackTrace(); 44 } 45 } 46 47 private void test3(HttpServletRequest request) { 48 try { 49 User u = new User(); 50 System.out.println("封装数据前:" + u); 51 // 获取表单数据 52 Map<String, String[]> map = request.getParameterMap(); 53 54 for (Map.Entry<String, String[]> m : map.entrySet()) { 55 String name = m.getKey(); 56 String[] value = m.getValue(); 57 58 // 反射 59 // 创建一个属性描述器对象 60 PropertyDescriptor pd = new PropertyDescriptor(name, User.class); 61 // 得到setter属性对象 62 Method setter = pd.getWriteMethod(); 63 64 if (value.length == 1) { 65 setter.invoke(u, value[0]); // 给只有一个值的变量赋值 66 } else { 67 setter.invoke(u, (Object) value); // 给复选框赋值 68 } 69 } 70 71 System.out.println("封装数据后:" + u); 72 73 } catch (Exception e) { 74 e.printStackTrace(); 75 } 76 } 77 78 private void test2(HttpServletRequest request) { 79 // 获取表单提交的所有的name的名称 80 Enumeration names = request.getParameterNames(); 81 while (names.hasMoreElements()) { 82 String name = (String) names.nextElement(); // 得到每一个name名称 83 String[] values = request.getParameterValues(name); // 根据name名称,得到value值 84 for (int i = 0; values != null && i < values.length; i++) { 85 System.out.println(name + "\t" + values[i]); 86 } 87 } 88 } 89 90 private void test1(HttpServletRequest request) throws UnsupportedEncodingException { 91 // 获取表单数据 92 // 根据表单中name属性的名,获取value属性的值方法 93 String username = request.getParameter("username"); 94 String pwd = request.getParameter("pwd"); 95 String sex = request.getParameter("sex"); 96 String[] hobbys = request.getParameterValues("hobby"); 97 String city = request.getParameter("city"); 98 99 // 解决get方式编码 100 username = new String(username.getBytes("iso-8859-1"), "UTF-8"); 101 102 System.out.println(username); 103 System.out.println(pwd); 104 System.out.println(sex); 105 106 for (int i = 0; hobbys != null && i < hobbys.length; i++) { 107 System.out.print(hobbys[i] + "\t"); 108 } 109 System.out.println(); 110 111 System.out.println(city); 112 } 113 114 public void doPost(HttpServletRequest request, HttpServletResponse response) 115 throws ServletException, IOException { 116 doGet(request, response); 117 } 118 119 }
3、请求正文(重要)
与请求转发相关的方法:
我的GitHub地址: https://github.com/heizemingjun
我的博客园地址: http://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
javascript数组特性
原文: javascript数组特性 数组是一段线性分配的内存, 它通过整数计算偏移并访问其中的元素. 数组是一种性能出色的数据结构. 1.数组字面量 数组字面量提供了一种非常方便地创建新数组的表示法.多个用逗号分隔的值的表达式. 数组字面量允许出现在任何表达式可以出现的地方. 数组的第一个值将获得属性名'0', 第二个值将获得属性名'1', 以此类推: 1 var empty = []; 2 var numbers = [ 3 'zero', 'one', 'two', 'three', 'four', 4 'five', 'six', 'seven', 'eight', 'nine' 5 ]; 6 7 console.log(empty[1]); // undefined 8 console.log(numbers[1]);// 'one' 9 10 console.log(empty.length);// 0 11 console.log(numbers.length);// 10 对象字面量: 1 var numbers_object = { 2 '0': 'zero', 3 ...
- 下一篇
Java高级之数据格式化
Labmda表达式: Runnable runnable =new Runnable(){ public void run(){ //123 } } 变: Runnable runnable =()->{ //123 } “123”为多句代码,可以写上括号,如果仅一句,可以不写。 获得小数位数: 经测试,使用小数(1.01)通过使用“.”进行split操作后,得到的数组为空,原因在于String的split方法 public String[] split(String regex, int limit) { /* fastpath if the regex is a (1)one-char String and this character is not one of the RegEx's meta characters ".$|()[{^?*+\\", or (2)two-char String and the first char is the backslash and the second is not the ascii digit or ascii lett...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池