servlet中的request和response

利用3到4天的时间,把servlet中的request和response视频看了一遍。看完之后,自己总结出来了一些知识点。

先来说说response吧。

1、解决用outputStream输出中文的乱码问题。       

1
2
3
4
5
//1.程序的数据以什么码表输出了,程序就要控制浏览器以什么码表打开
response.setHeader( "content-type" "text/html;charset=utf-8" );
String data= "中国" ;
OutputStream out=response.getOutputStream();
out.write(data.getBytes( "utf-8" ));

要注意:

1
"content-type" "text/html;charset=utf-8" 中的分号切不可写成逗号,不然浏览器会提示下载
1
2
3
4
5
//2.用HTML技术中的meta标签来模拟http响应头,用于控制浏览器的行为
String data= "中国人" ;
OutputStream out=response.getOutputStream();
out.write( "<meta http-equiv='content-type' content='text/html;charset=utf-8'>" .getBytes());
out.write(data.getBytes( "utf-8" ));

  2、用write流输出中文

1
2
3
4
//设置response中的码表
response.setCharacterEncoding( "utf-8" );
response.setContentType( "text/html;charset=utf-8" );
response.getWriter().write( "中国" );

  3、实现文件的下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
String path= this .getServletContext().getRealPath( "/download/image1.jpg" );
String filename=path.substring(path.lastIndexOf( "\\" )+ 1 ); //取文件名的小技巧
response.setHeader( "content-disposition" , "attachment;filename=" +URLEncoder.encode(filename, "utf-8" ));
InputStream in =  null ;
OutputStream out =  null ;
in =  new  FileInputStream(path);
int  len= 0 ;
byte  buffer[]= new  byte [ 1024 ];
out=response.getOutputStream();
while ((len=in.read(buffer))> 0 ){
out.write(buffer, 0 ,len);
}
out.close();
in.close();

  4、控制浏览器定时刷新

1
2
response.setHeader( "refresh" "3" ); //3秒后刷新
response.setHeader( "refresh" , "3;url='index.jsp'" ); //3秒后跳到index.jsp

 还有一个请求重定向,这个放在后面跟请求转发放在一起说


 接下来说的就是request,先来说说一些常用的方法吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
System.out.println(request.getRequestURI());
System.out.println(request.getRequestURL());
//URL和URI的区别:
//URI:统一资源标识符  exp:/day02/RequestDemo1
//URL:全球资源定位器  exp:http://localhost:8080/day02/RequestDemo1
System.out.println(request.getQueryString()); //获取参数信息(返回请求行中的参数)exp:   返回name=zengxiang
System.out.println(request.getRemoteAddr()); //返回发出请求的客户机IP地址
System.out.println(request.getRemoteHost()); //返回发出请求的客户机主机名
System.out.println(request.getMethod()); //返回请求方式POST、GET、PUT
 
//客户机带数据给servlet有两种方式:超链接和提交表单,下面是获取请求数据的几种方式
1 .String value = (String)request.getParameter( "name" );
2 .Enumeration e=request.getParameterNames();
   while (e.hasMoreElements()){
     String name=(String) e.nextElement();
     value=request.getParameter(name);
     System.out.println(name+ "=" +value);
   }
3 .String[] values=request.getParameterValues( "password" );
   for ( int  i= 0 ;values.length!= 0 &&i<values.length;i++){
     System.out.println(values[i]);
   } //切记判断传递过来的参数是否为空
4 .Map m=request.getParameterMap();
   User user= new  User();
   try {
         BeanUtils.populate(user,m); //用map集合数据填充bean
       } catch (Exception e1){
         e1.printStackTrace();
     }
   System.out.println(user);
5 .InputStream in=request.getInputStream(); //一般不采用此种方式去获取数据,文件上传需要这种方式
   int  len= 0 ;
   byte  buffer[]= new  byte [ 1024 ];
   while ((len=in.read(buffer))> 0 ){
     System.out.println( new  String(buffer, 0 ,len));
   }

下面就是中文乱码的问题了,先来解释一下乱码的原因吧,在浏览器中接受一个数据(编码取决于在浏览器中的编码),在数据传给request时,按照request域中的码表(iso8859-1)翻译过来,这个“中国”就不是“中国”了,于是到了servlet中就出现乱码了。

通过浏览器带来数据的方式不同,解决方式也不一样。

一、解决get表单,超链接提交的乱码

1
2
3
String value=request.getParameter( "username" );
String value1= new  String(value.getBytes( "iso8859-1" ), "gbk" );
System.out.println(value1);

二、解决post表单提交的乱码

1
2
3
request.setCharacterEncoding( "gbk" );
String value1=request.getParameter( "username" );
System.out.println(value1);


区分两种域:

1
2
    request域:作用于请求范围,每个请求对应一个request域,相互独立
servletContext域:作用于WEB应用,所有请求都在一个context域,数据易覆盖


区分两个方法:

1
2
getAttribute():获取域中的数据
getParameter():获取客户机所提交的数据


WEB中各类地址的写法:首先以“/”开头,然后判断该地址是给谁用的,给服务器用,“/”代表当前WEB应用;给客户机浏览器用,“/”代表网站(包含多个web应用)例如:

1
2
3
4
5
6
1 .request.getRequestDispatcher( "/form1.html" ).forward(request, response);
2 .response.sendRedirect( "/day02/form1.html" );
3 . this .getServletContext().getRealPath( "/form1.html" );
4 . this .getServletContext().getResourceAsStream( "/form1.html" );
5 .<a href= "/day06/form1.html" >xx</a>
6 .<form action= "/day06/form1.html" ></form>

最后再来说说请求重定向和请求转发的区别


重定向的特点就是:1.浏览器向服务器发出两个请求,意味着有两个response/request

2.浏览器地址栏会变化


转发的特点就是:1.浏览器向服务器发出一个请求,而服务器有多个web资源调用

2.浏览器地址栏不会变化


通俗一点理解就是:A找B借钱,B没钱,1.B找C去借钱,然后再给A,这是转发;2.B叫A自己找C借钱,这是重定向。


发现错误,谢谢提醒,增强你我实力!

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值