|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听,js|servlet|服务器一般,在一个计划优秀的Web使用中,城市综合利用Servlet和JSP手艺。Servlet把持营业流转,JSP则卖力营业处置了局的显现。此时,将大批用到重定向手艺。
一般,在一个计划优秀的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()办法。代码以下:
publicvoidsendRedirect(java.lang.Stringlocation)throwsjava.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接口中界说了两个办法,拜见以下代码:
publicinterfaceRequestDispatcher{
voidforward(ServletRequestrequest,ServletResponseresponse);
voidinclude(ServletRequestrequest,ServletResponseresponse);
}
forward()办法将以后的request和response重定向到该RequestDispacher指定的资本。这在实践项目中大批利用,由于完成一个营业操纵常常必要超过多个步骤,每步骤完成响应的处置后,转向到下一个步骤。好比,一般营业处置在Servlet中处置,处置的了局转向到一个JSP页面举行显现。如许看起来相似于Servlet链的功效,可是另有一些区分。一个RequestDispatcher对象能够把哀求发送就任意一个服务器资本,而不单单是别的一个Servlet。include()办法将把RequestDispatcher资本的输入包括到以后输入中。
注重,只要在还没有向客户端输入呼应时才能够挪用forward()办法,假如页面缓存不为空,在重定向前将主动扫除缓存。不然将抛出一个IllegalStateException非常。
怎样失掉RequestDispatcher
有三种办法能够失掉RequestDispatcher对象。
1.javax.servlet.ServletRequest的getRequestDispatcher(Stringpath)办法,个中path能够是绝对路径,但不克不及越出以后Servlet高低文。假如path以“/”开首,则剖析为相对以后高低文的根。
2.javax.servlet.ServletContext的getRequestDispatcher(Stringpath)办法,个中path必需以“/”开首,路径相对以后的Servlet高低文。能够挪用ServletContext的getContext(Stringuripath)失掉另外一个Servlet高低文,并能够转向到内部高低文的一个服务器资本链接。
3.利用javax.servlet.ServletContext的getNamedDispatcher(Stringname)失掉名为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能够写进上面的代码:
RequestDispatcherrd=request.getRequestDispatcher("secondservlet");
rd.forward(request,response);
此时把持权将转向到第二个Servlet了。
利用2中的办法,能够从ServletContext中失掉RequestDispatcher代码以下:
RequestDispatcherrd=getServletContext().getRequest
Dispatcher("/servlet/secondservlet");
rd.forward(request,response);
利用3中的办法,从下面的web.xml设置文件能够看到界说了两个Servlet,名字分离为FirstServlet和SecondServlet,以是能够失掉定名的Dispatcher:
RequestDispatcherrd=getServletContext().getNamedDispatcher("SecondServlet");
rd.forward(request,response);
如许也能够重定向到SecondServlet了。
JSP页面中的重定向
JSP在剖析后编译为一个Servlet运转,以是在JSP中也能够利用下面的重定向代码,而且,JSP还供应了更便当的操纵,以下:
JSP页面实行到这儿,将停止以后的处置,将把持权交由nextpage.jsp。
怎样选择
RequestDispatcher.forward()办法和HttpServletResponse.sendRedirect()办法的区分是:前者仅是容器中把持权的转向,在客户端扫瞄器地点栏中不会显现出转向后的地点;后者则是完整的跳转,扫瞄器将会失掉跳转的地点,偏重新发送哀求链接。如许,从扫瞄器的地点栏中能够看到跳转后的链接地点。以是,前者加倍高效,在前者能够满意必要时,只管利用RequestDispatcher.forward()办法,而且,如许也有助于埋没实践的链接。在有些情形下,好比,必要跳转到一个别的服务器上的资本,则必需利用HttpServletResponse.sendRequest()办法。
什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。 |
|