IT兄弟连 JavaWeb教程 请求重定向案例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了IT兄弟连 JavaWeb教程 请求重定向案例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3980字,纯文字阅读大概需要6分钟。
内容图文
![IT兄弟连 JavaWeb教程 请求重定向案例](/upload/InfoBanner/zyjiaocheng/830/7d0f64cf90ff48ee8ae89f64ee056790.jpg)
Check2Servlet类与Output2Servlet类之间为请求转发关系。在web.xml文件中,为Check2Servlet映射的URL为"/check2",为Output2Servlet映射的URL为"/outout2"。
public class Check2Servlet extends HttpServlet{
public void service(HttpServletRequest request,
HttpServletResponse response)throws ServletException,IOException{
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String message = null;
if(username == null){
message = "Please input username";
}else{
message = "Hello," + username;
}
request.setAttribute("msg",username);
out.println("Output from Check2Servlet before redirecting.");
System.out.println("Output from Check2Servlet before redirecting");
response.sendRedirect("/helloapp/output2?msg="+message);
out.println("Output from Check2Servlet after redirecting.");
System.out.println("Output from Check2Servlet after redirecting.");
}
}
public class Output2Check extends HttpServlet{
public void service(HttpServletRequest request,
HttpServletResponse response)throws ServletException,IOException{
String message = (String)request.getAttribute("msg");
System.out.println("请求范围内的消息:" + message);
message = request.getParameter("message");
System.out.println("请求参数中的消息:" + message);
PrintWriter out = response.getWriter();
out.println("message");
out.close();
}
}
Check2Servlet与上个例子中的CheckServlet有些相似,Check2Servlet先检查客户端是否提供username请求参数,在依据此生成一条消息,用变量message表示,接下来把这条消息作为属性保存到ServletRequest对象中,在重定向到Output2Servlet。与重定向相关的代码为:
response.sendRedirect("/helloapp/output2?msg="+message);
response.sendRedirect(String location)方法具有以下特点:
Servlet源组件生成的响应结果不会被发送到客户端。request.sendRedirect(String location)方法一律返回状态码为302的响应结果,浏览器端接收到的这种响应结果后,再立即自动请求访问重定向的目标Web组件,客户端最后接收到的是目标Web组件的响应结果。
如果源组件在进行重定向之前,已经提交了响应结果(例如调用ServletResponse的flushBuffer()方法,或者调用与SerlvetResponse关联的输出流的close()方法),那么sendRedirect()方法会掏出IllegalStateException。为了避免该异常,不应该在源组件中提交响应结果。
在Servlet源组件中调用response.sendRedirect()方法之后的代码块也会被执行。
源组件和目标组件不共享同一个ServletRequest对象,因此不共享请求范围内的共享数据。
对于response.sendRedirect(String location)方法中的参数location,如果以"/"开头,表示相对于当前服务器根路径的URL,如果以http://开头,表示一个完整的URL。
目标组件不必是同一个服务器上的同一个Web应用中的组件,它可以是Interner上的任意一个有效的网页。
sendRedirect()方法是在HttpSerlvetResponse接口中定义的,而在ServletResponse接口中没有sendRedirect()方法,因此重定向机制是由HTTP协议规定的。
在浏览器中访问http://localhost:8080/helloapp/check2,其中helloapp是项目名称,/check2是请求路径,浏览器中会出现"Please input username"。
浏览器实际上发出了两次请求,第一次请求访问Check2Servlet,第二次请求访问Output2Servlet,浏览器最终展示的是Output2Servlet生成的HTML页面。
Check2Servlet在调用sendRedirect()方法之前和之后,都试图向浏览器端及服务器的控制台输出一些数据:
out.println("Output from Check2Servlet before redirecting.");
System.out.println("Output from Check2Servlet before redirecting");
response.sendRedirect("/helloapp/output2?msg="+message);
out.println("Output from Check2Servlet after redirecting.");
System.out.println("Output from Check2Servlet after redirecting.");
从浏览器中显示的页面可以看出,Check2Servlet作为源组件,它所生成的响应结果不会被发送到客户端。
此外,在Tomcat服务器的控制台,会显示调用response.sendRedirect()方法之前及之后的System.out.println()语句的打印结果。由此可见,在Servlet源组件中调用response.sendRedirect()方法之后的代码也会被执行。
另外,Output2Servlet也向控制台打印了如下内容:
请求范围内的消息: null
请求参数中的消息:Please input username.
由于Output2Servlet与Check2Servlet不共享请求范围内的数据,因此尽管Check2Servlet向请求范围内存放了消息,Output2Servlet却无法从请求范围内获得该消息。Check2Servlet还把消息作为请求参数传给Output2Servlet,Output2Servlet能获得该请求参数。
内容总结
以上是互联网集市为您收集整理的IT兄弟连 JavaWeb教程 请求重定向案例全部内容,希望文章能够帮你解决IT兄弟连 JavaWeb教程 请求重定向案例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。