首页 > 代码库 > JavaWeb之request/respone(四)
JavaWeb之request/respone(四)
ServletResponse对象
简介
今天是JavaWeb入门第三天,代码量多了一些。今天学习的是Servlet引擎中两个对象,可能今天的理论知识不能掌握下来。我想说多敲代码,会有收获的。 学习原则不变,牢记知识点以及小案例应用,不断的练习代码。基础打扎实了,才能面对接下来的学习呀。不多说,练习咯~对现在的自己说一句话,加油~
1. ServletResponse简介
1). 辅助 servlet 将响应内容发送到客户端的对象。servlet 容器创建 ServletResponse 对象,并将它作为参数传递给 servlet 的 service 方法2). Http协议响应消息头--->面向对象的开发人员--->用对象封装所有的响应消息头及正文--->ServletResponse(与协议无关)--->HttpServletResponse(与协议相关)用户第一次请求时,服务器要生成一个response对象,第二次访问时,也会生成一个新的对象
2. 如何将正文发送给客户端
2.1 如何获得字节流 1) //得到用于发送字节流对象 OutputStream os = response.getOutputStream(); //发送字节流os.write("hello".getBytes()); //输出中文问题,输出中文默认情况下没有乱码,可以改变服务器输出数据的编码格式 //看到乱码,因为客户端还采用GBK显示,所以要用代码调整,客户端显示数据的编码 <meta http-equiv="Content-Type" context="text/html;charset=UTF-8"> response.setHeader("Content-Type", "text/html;charset=UTF-8"); response.setContentType("text/html;charset=UTF-8"); //解决服务器控制浏览器显示数据采用什么编码的最好的方法 os.close();没有必要写,因为Servlet引擎会自动关闭 2) 如何解决中文乱码 // 第一种解决思路: meta标签 // os.write("<meta http-equiv=‘Content-Type‘ content=‘text/html;charset=GBK‘>".getBytes()); // 第二种解决思路: 采用response对象中加入响应消息头 // response.setHeader("Content-Type", "text/html;charset=UTF-8"); // 第三种解决思路: setContentType(); response.setContentType("text/html;charset=UTF-8");(推荐) 总结:浏览器采用什么编码写出数据,必须相应的声明标头的编码格式 2.2 如何以字符流输出 PrintWriter pw = response.getWriter(); 默认输出数据用ISO-8859-1 如何改变服务器向客户端输出数据的编码: response.seCharacterEncoding("UTF-8"); 通知客户端也要采用同样的编码显示 response.setContentType("text/html;charset=UTF-8"); 总结:对于服务器输出字符流数据是,只要就加上response.setContentType("text/html;charset=UTF-8"); 就不会有乱码问题,因为有两个作用 1. 告知浏览器显示数据采用什么编码 2. 服务器输出字符数据采用什么编码
3. URL写法总结
URL写法总结: 给服务器用的,不需要写应用名 getServletContext().getRealPath("/WEB-INF/classes"); 给浏览器用的要写应用名 <a href=""> Location <img src=""> <link href=""> <script src="">
ServletRequest对象
1. ServletRequest简介
1. 它是服务器提供的一个对象,用于封装客户端请求信息,并提供Servlet2. 子接口 HttpServletRequest 它与协议相关3. 为什么用它? 作为面向对象的开发人员,想到用一个HttpServletRequest的对象来封装客户端4. 什么情况下产生这个对象(它的生命周期) 每次请求时,服务器都会产生一个新的request对象
2. 得到头信息常用的方法
getHead(name): 根据指定的名字,获取客户端发过来请求头所对应的值 Accept-Encoding请求头用于告知服务器,客户端可以接收什么样的数据压缩格式getHeaders(String name)根据指定的名字,获取客户端发过来请求头所对应的一组值getHeaderNames()用于获取客户端发过来请求头所有值String clientIP = request.getRemoteAddr();// 得到客户端ipString clientHost = request.getRemoteHost();String uri = request.getRequestURI();// 资源路径StringBuffer url = request.getRequestURL();// 协议+主机地址+资源地址+端口号System.out.println(clientIP + ">>" + clientHost + ">>" + uri + ">>");System.out.println("协议+主机地址+资源地址+端口号: "+url.toString());//有可能应用名与工程名不同名System.out.println("动态获取应用名: " +request.getContextPath()); //动态获取应用名System.out.println("得到客户端本次请求时使用的端口号:" +request.getRemotePort());//端口号每次请求时会不一样
3. 请求参数
<input type="text" name="username" />String value = http://www.mamicode.com/request.getParameter("username");//接收指定名称的一个值//用于接收一个指定名字所对应的一组值String[] getParameterValues(java.lang.String name)Enumeration<String> paramNames = getParameterNames();//返回一个表单 中所有的请求参数名Map map = getParameterMap();//返回 一个Map 集合 key:paramName value:paramValues为了简化封装参数的过程?引入一个框架BeanUtils 1.框架的使用 1.1引入jar (commons-beanutils--xxx.jar,commons-logging-xxx.jar) 2.使用 BeanUtils.setProperty(bean,propertyName,propertyValue);3.请求过程中的乱码处理(post,get) 1.post方式 request.setCharacterEncoding("UTF-8"); 2.get方式 String usernameValue = http://www.mamicode.com/request.getParameter("username");//username 是为了要与文本框的name属性取值一样 byte []oldStr = usernameValue.getBytes("iso-8859-1");//还原回去 usernameValue = http://www.mamicode.com/new String(oldStr,"UTF-8");
小知识点扫盲
*Serializable是专门用于实现序列化的* 实现了这个接口,意味着这个类是可以被序列化* 实现了这个接口,意味着可以在网络上直接传输对象* * 什么是序列化?它支持一次性将一个对象存入到文件中* 支持对象进行网络传输* * JavaBean* 1. 是一个公有类* 2. 提供私有字段* 3. 对于这些私有字段,提供getter与setter* 4. 提供一个公有无参构造* 5. 一般实现Serializable接口
JavaWeb之request/respone(四)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。