Servlet中的request和response

Servlet接口中有两个对象,一个是request(请求),一个是response(响应)。request可以对浏览器发来的请求进行操作,获取请求的一些参数,response是可以对服务器发给浏览器的响应进行操作,设置响应参数。

 

 下面先说request对象,request是由tomcat创建的,主要用于获取请求数据,request提供了获取请求数据的方法,如获取参数请求方式:getMethod(),获取请求参数getQueryString()

 

下面说一下获取请求参数的方法,有三个 方法,获取所有参数map集合:getParameterMap(),根据名称获取参数值(数组):getParameterValues(String name),

根据名称获取参数值(单个值):getParameter(String name)。

 

 

然后有一个问题就是中文乱码问题,就是当浏览器输入请求参数为中文时,request对象得到的参数可能是乱码。因为当在浏览器输入中文时使用的是url编码,把数据的每个字节用两个十六进制的数表示,再在每两个十六进制数也就是一个字节之间加一个%,当请求参数给到tomcat服务器时,tomcat用的ISO-8859-1解码,不是用的utf-8解码,所以会出现乱码。

解决方案和请求方式有关,当请求方式为post时,只需要设置字符输入的编码:request.setCharacterEncoding("UTF-8");

当请求方式为get时,需要先将ISO-8859-1编码(也就是之前说的乱码)编码成字节数组,再把字节数组按照utf-8的编码转场字符串,就可以还原中文了:

byte[] bytes = username.getBytes("ISO-8859-1"); username  = new String(bytes,"utf-8");这个username就是中文了。

 

 

接下来就是转发问题,转发就是当浏览器发给服务器的请求时,请求给到资源A时,资源A调用forward()方法把请求转发给服务器里的资源B。其中有个request资源共享域,可以在A资源中把一些数据(以键值对形式)存入request资源域中,B资源可以调用这个共享资源域中的数据。

 

 

 实例:

 

 

 

 然后就是response对象,它也是由tomcat服务器创造,是对服务器对浏览器做出响应是参与设置参数的对象。

 

response中有一个重定向功能,就是当浏览器发送请求发给服务器资源A时,资源A响应给浏览器另一个资源地址,让浏览器去找它。

 

然后这个response主要用到 两个输出流一个是字符输出流,一个是字节输出流。

字符输出流,主要用于文本信息的响应,先设置响应数据的格式,流的编码,防止出现中文乱码:response.setContentType("text/html;charset=utf-8");

然后获得字符输出流:PrintWriter writer = response.getWriter();之后就可以用write调用write()方法,输出字符:

 

 字节输出流:当输出,图片,视频等非文本信息时,需要用到直接输出流。字节输出流先要得到要输出的文件的字节输入流,再把这个文件输入流的字节数据复制给输出流,输出流再调用write方法输出:

byte [] buff = new  byte[1024];int len =0; while((len=fis.read(buff)) !=-1){ os.write(buff,0,len);}

当然有更加简单io框架提供了流的复制功能,只不过需要把这个 框架的jar包添加到项目中,而在maven中只需要在prom.xml文件中添加这个包的依赖就行。

 

posted @   索隆111  阅读(332)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示