A. javaWeb 重定向与转发
JavaWeb 重定向与转发在JavaWeb开发中,重定向(Redirect)与转发(Forward)是两种常见的页面跳转方式,它们各自具有不同的特点和适用场景。
重定向概念:重定向是由客户端浏览器进行的页面跳转,即浏览器在接收到服务器的响应后,根据响应中的指令自动向另一个URL发送新的请求。
原理图:
方法:
特点:
| 区别 | 转发 | 重定向 || --- | --- | --- || 根目录 | 使用的服务器端根目录:http://localhost:8080/项目访问地址/ | 使用浏览器端的根目录:http://localhost:8080/ || 地址栏 | 不会变化 | 会变化 || 哪里跳转 | 由服务器进行的跳转 | 由客户端浏览器进行的跳转 || 请求域 | 不会丢失数据(request域中的数据可以正常获取) | 会丢失数据(因为不是同一次请求,request域中的数据不能获取,如果还想数据共享,则要使用session域) |
总结:
在实际开发中,应根据具体需求选择合适的跳转方式,以实现最佳的用户体验和系统性能。
B. java重定向问题
Java中的重定向问题主要涉及请求的处理流程和request对象的有效性。
重定向的基本概念:
request对象的有效性:
与转发的区别:
重定向的使用场景:
综上所述,Java中的重定向涉及两次请求,且第二次请求时原来的request对象已经无效。这与转发不同,转发是在服务器端完成的单次请求,request对象在整个过程中始终有效。
C. JAVA里重定向,转发,转向有什么区别
java 重定向和转发的区别
重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重 定向后,request内的对象将无法使用。
转发和重定向的区别
不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
D. 用JAVA下载HTTP文件时遇到问题
importjava.net.*;
importjava.io.*;
publicclassURLConnectionDemo{
publicstaticvoidmain(String[]args)throwsException{
URLurl=newURL("http://www.scp.e.cn/pantoschoolzz/BG/Bord/Message/DownloadMessageAttachment.aspx?ID=215");
URLConnectionuc=url.openConnection();
StringfileName=uc.getHeaderField(6);
fileName=URLDecoder.decode(fileName.substring(fileName.indexOf("filename=")+9),"UTF-8");
System.out.println("文件名为:"+fileName);
System.out.println("文件大小:"+(uc.getContentLength()/1024)+"KB");
Stringpath="D:"+File.separator+fileName;
FileOutputStreamos=newFileOutputStream(path);
InputStreamis=uc.getInputStream();
byte[]b=newbyte[1024];
intlen=0;
while((len=is.read(b))!=-1){
os.write(b,0,len);
}
os.close();
is.close();
System.out.println("下载成功,文件保存在:"+path);
}
}
//给你一个下载的例子吧,仅供参考。
E. java重定向标准输出流到当前目录的log.txt文件,并输出如下语句:
packagecom.kidd.atmtest;
importjava.io.FileNotFoundException;
importjava.io.PrintStream;
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassTest{
publicstaticvoidmain(String[]args)throwsFileNotFoundException{
System.out.println("log.txt文件位置:"
+Thread.currentThread().getContextClassLoader()
.getResource("log.txt").getFile());
System.setOut(newPrintStream(Thread.currentThread()
.getContextClassLoader().getResource("log.txt").getFile()));
System.out.println("Thisisalogfile.");
System.out
.println("****************************************************");
System.out.println("Time:"
+newSimpleDateFormat("yyyy.MM.ddHH:mm:ss")
.format(newDate()));
System.out.println("Nowsystemisrunningwell.");
System.out.println("MynameisTest.");
}
}