首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>J2EE>正文

J2EE基础:Servlet/JSP服务器端的重定向

http://www.oklinux.cn  2008-01-20  来源: ccidnet baocl  会员收藏  游客收藏  【 】 

通常,在一个设计良好的Web应用中,都会综合使用Servlet和JSP技术。Servlet控制业务流转,JSP则负责业务处理结果的显示。此时,将大量用到重定向技术。

重定向技术可以分为两类,一类是客户端重定向,一类是服务器端重定向。客户端重定向可以通过设置特定的HTTP头,或者写JavaScript脚本实现。本文主要探讨服务器端重定向技术的实现。


服务器端的重定向相关类


服务器端的重定向技术涉及到javax.servlet.ServletContext、javax.servlet.RequestDispatcher、javax.servlet.http.ServletRequest、javax.servlet.http.ServletResponse等几个接口。


服务器端的重定向方式


服务器端的重定向可以有两种方式,一是使用HttpServletResponse的sendRedirect()方法,一是使用RequestDispatcher的forward()方法。下面对这两种方式进行介绍。

HttpServletResponse.sendRedirect()方法

HttpServletResponse接口定义了可用于转向的sendRedirect()方法。代码如下:

public void sendRedirect(java.lang.String location)throws java.io.IOException


这个方法将响应定向到参数location指定的、新的URL。location可以是一个绝对的URL,如response.sendRedirect("http://java.sun.com")也可以使用相对的URL。假如location以“/”开头,则容器认为相对于当前Web应用的根,否则,容器将解析为相对于当前请求的URL。这种重定向的方法,将导致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址,作用类似于上面设置HTTP响应头信息的实现。

RequestDispatcher.forward()方法

RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中。RequestDispatcher接口中定义了两个方法,参见如下代码:

public interface RequestDispatcher {
void forward(ServletRequest request, ServletResponse response);
void include(ServletRequest request, ServletResponse response);
}



forward()方法将当前的request和response重定向到该RequestDispacher指定的资源。这在实际项目中大量使用,因为完成一个业务操作往往需要跨越多个步骤,每一步骤完成相应的处理后,转向到下一个步骤。比如,通常业务处理在Servlet中处理,处理的结果转向到一个JSP页面进行显示。这样看起来类似于Servlet链的功能,但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。 include()方法将把Request Dispatcher资源的输出包含到当前输出中。

注重,只有在尚未向客户端输出响应时才可以调用forward()方法,假如页面缓存不为空,在重定向前将自动清除缓存。否则将抛出一个IllegalStateException异常。


如何得到RequestDispatcher


有三种方法可以得到Request Dispatcher对象。

1.javax.servlet. ServletRequest的getRequestDispatcher(String path)方法,其中path可以是相对路径,但不能越出当前Servlet上下文。假如path以“/”开头,则解析为相对于当前上下文的根。

2.javax.servlet. ServletContext的getRequestDispatcher(String path)方法,其中path必须以“/”开头,路径相对于当前的Servlet上下文。可以调用ServletContext的getContext(String uripath)得到另一个Servlet上下文,并可以转向到外部上下文的一个服务器资源链接。

3.使用javax.servlet. ServletContext的getNamedDispatcher(String name)得到名为name的一个Web资源,包括Servlet和JSP页面。这个资源的名字在Web应用部署描述文件web.xml中指定。

这三种方法的使用有细微的差别。比如,下面是一个应用的配置文件web.xml:


"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">


FirstServlet
org. javaresearch.redirecttest.ServletOne


SecondServlet
org.javaresearch. redirecttest.ServletTwo


FirstServlet
/servlet/firstservlet/


SecondServlet
/servlet/secondservlet/





其中定义了两个Servlet,名字分别为FirstServlet和SecondServlet,对应的类分别为org.javaresearch. redirecttest.ServletOne和org. javaresearch.redirecttest.ServletTwo。可以在浏览器中通过类似于下面的链接访问:

http://localhost:8080/servlet/firstservlet/

使用1中方法,例如在firstservlet可以写入下面的代码:

RequestDispatcher rd = request.getRequestDispatcher("secondservlet");
rd.forward(request, response);



此时控制权将转向到第二个Servlet了。

使用2中的方法,可以从Servlet Context中得到RequestDispatcher代码如下:

RequestDispatcher rd = getServletContext().getRequest
Dispatcher("/servlet/secondservlet");
rd.forward(request, response);



使用3中的方法,从上面的web. xml配置文件可以看到定义了两个Servlet,名字分别为FirstServlet和SecondServlet,所以可以得到命名的Dispatcher:

RequestDispatcher rd = getServletContext().getNamedDispatcher("SecondServlet");
rd.forward(request, response);



这样也可以重定向到SecondServlet了。


JSP页面中的重定向


JSP在解析后编译为一个Servlet运行,所以在JSP中也可以使用上面的重定向代码,并且,JSP还提供了更便利的操作,如下:

共2页: 上一页 1 [2] 下一页

上一篇:J2EE基础--weblogic的几个基础问题   下一篇:J2EE基础:为什么jsp不能取代servlet?


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·J2EE基础--weblogic的几个基础问题
·J2EE基础:为什么jsp不能取代servlet?
·J2EE:用RMI和CORBA进行分布式Java编程
·J2EE基础:j2ee所包含的13种核心技术
·solaris上开发J2EE应用中文问题的解决
·J2EE基础:web开发需要注意的一些地方
·J2EE基础:Spring的MVC模型运行序列分析
·J2EE基础:在Struts 2中实现文件上传
·J2EE--关于用JAVA开发短信方面的知识
·J2EE基础:几种Portal技术的比较与评述
·J2EE基础:怎样读取和处理XML的配置文件
·高手为你解读J2EE开发过程中的异常处理
·J2EE基础:开发第一个分布式的j2ee应用
·J2EE基础:步入J2EE架构和过程
·[J2EE] JNDI定义Oracle数据源的方法
·J2EE:教你提升JSP应用程序的七大绝招
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·一个用JAVA写的测算服务器响应速度程序
·软件测试:软件测试的基础知识概要介绍
·J2EE综合--浅析Java程序员的存储过程
·J2EE综合:业务逻辑和数据库的访问决策
·J2EE综合:关于Java EJB容器存取和实现
·J2EE综合--Java企业系统架构的选择考量
·J2EE综合--java语言不一定就跨平台
·J2EE综合--对Struts中常见错误的汇总
·J2EE综合:开发J2EE应用应遵循的几点原
·J2EE综合:Java EE/J2EE面向对象编程之
·提高J2EE层与数据库层交互操作能力的优
·开发J2EE应用时应该遵循的几个基本准则
  阅读排行
·对J2EE开发中常用开源项目的介绍
·J2EE综合--关于权限设计的详细探讨
·J2EE--关于JAVA的分页查询操作技术
·J2EE综合--Java企业系统架构选择考量
·J2EE基础:j2ee所包含的13种核心技术
·J2EE综合:Struts上传多个文件的例子
·J2EE基础:在Struts 2中实现文件上传
·J2EE综合--业务逻辑和数据库访问决策
·与你共同分享12个最重要的J2EE最佳实践
·J2EE综合--浅谈Java程序员的存储过程
·J2EE综合--Java EJB容器的存取和实现
·J2EE综合--JAVA开发工具安装配置心得
·J2EE综合--总结java编程中的经验教训
·J2EE综合--java语言不一定就跨平台
·J2EE基础:Struts开发中异常处理机制
网摘收藏: