菜鸟学Android笔记(二十六):Response数据输出

来源:互联网 发布:开淘宝网店的条件 编辑:程序博客网 时间:2024/05/16 01:04

一、Response的概念

response主要是向客户端输出内容,也就是你输出什么,客户端就显示什么。setCharactorEncoding是设置字符集,如出现汉字,以UTF8进行编码。SetContentType 设置页面的ContentType为text/html; 字符集为utf-8

注意:什么是servlet容器

servlet没有main()方法。他们受控于另一个Java应用,这个Java应用成为容器。servlet容器指的是部署servlet的容器,比如tomcat。需要运行在servlet容器中

二、response------响应的意思,就是将服务器对浏览器的响应封装成这个对象。

              |-----HttpServletResponse是实现response的通用类

三、入门案例:如何向客户端(浏览器)输出一段文本?

第一步:建立一个OutServlet.java在classes文件中

package com.java;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class OutServlet extends HttpServlet{public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.getOutputStream().write("sdfjksdlfjsjf".getBytes());}public void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req,resp);}}

第二步:在web.xml中部署访问路径

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>      <servlet>        <servlet-name>OutServlet</servlet-name>        <servlet-class>com.java.OutServlet</servlet-class>    </servlet>     <servlet-mapping>        <servlet-name>OutServlet</servlet-name>        <url-pattern>/java/OutServlet</url-pattern>    </servlet-mapping>  </web-app>
第三步:在浏览器中输入“http://localhost/Day04/java/OutServlet“回车浏览器便会输出

如果输出的是中文会不会乱码?

package com.java;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class OutServlet extends HttpServlet{public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.getOutputStream().write("中文".getBytes());}public void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req,resp);}}
在浏览器中输入回车,可以看出,并没有乱码,原因是浏览器用的是GBK,服务器设置的是浏览器默认的编码

如果设置服务器向浏览器输出的数据是UTF-8编码会怎么样?(这个时候就显示response在浏览器编码设置的作用了,如何设置呢?看下面OutServlet.java的编码)

package com.java;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class OutServlet extends HttpServlet{public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.getOutputStream().write("中国".getBytes("utf-8"));}public void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req,resp);}}

当然不出所料,浏览器显示的是乱码

如何解决这个问题?只要我们在服务器向浏览器输出数据时,提醒浏览器用UTF-8来接收就可以了

package com.java;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class OutServlet extends HttpServlet{public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.getOutputStream().write("中国".getBytes("utf-8"));resp.setHeader("Content-Type", "text/html;charset=utf-8");}public void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req,resp);}}

我们可以直接设置服务器解析的编码为UTF-8,而不用设置成这样:
"中国".getBytes("utf-8")
代码如下:

package com.java;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class OutServlet extends HttpServlet{public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.getOutputStream().write("中国".getBytes());//设置将发送到客户端的响应的字符编码resp.setCharacterEncoding("utf-8");}public void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req,resp);}}

但此时为什么没有乱码?(原因可以根据服务器是什么编码而默认成什么编码)

但我们为了规范,任然要设置浏览器接收的编码:

package com.java;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class OutServlet extends HttpServlet{public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//给浏览器设置utf-8,可以省去resp.setHeader("Content-Type", "text/html;charset=utf-8");//可以简写成为这样://resp.setContentType("text/html;charset=utf-8");//给服务器设置UTF-8resp.setCharacterEncoding("utf-8");resp.getWriter().write("中国");//服务器默认的是iosXX,即非UTF-8}public void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req,resp);}}




0 0
原创粉丝点击