在访问网页的过程中,页面自动刷新、跳转和重定向是经常用到的,这里就说说在Java中是如何实现这些功能的!
一、页面自动刷新
页面自动刷新在股票网站中是经常可以看到的,网页上显示股票数据都是时时刷新的。页面自动刷新的实现主要是通过HTTP响应头告诉浏览器多长时间刷新一次。在JavaWeb中的实现就有两种方式:一是发送HTTP响应头;二是使用<meta>标签来告诉浏览器。实现代码如下:
// 方法一:设置HTTP响应头 |
response.setHeader( "refresh" , "5" ); |
// 方法二:发送<meta>标签 |
response.getWriter().write( "<meta http-equiv=\"refresh\" content=\"5\">" ); |
在实现这个方法的同时,我们还可以告诉浏览器告诉用户重新刷新后打开一个新的页面!也就是在浏览器端实现页面跳转,代码如下:
response.setHeader( "refresh" , "5;/RefreshProject/index.jsp" ); |
同时,既然方法二可以在浏览器端实现,我们也可以直接在网页中使用<meta>标签,内容就是上面方法二的内容一样的。
二、页面跳转和带值跳转
页面跳转这个必须是在服务器端实现的。比如说用户登陆时,根据用户选择的登陆类型不同来交给不同的Servlet处理。主要是通过RequestDispatcher接口对象的forward()方法来实现的,RequestDispatcher接口对象可以通过request对象获取,需要的Path参数是相对于当前Context的。代码如下:
// 传递参数
request.setAttribute( "myname" , "Xcoder Studio" ); |
// 页面跳转 |
request.getRequestDispatcher( "/index.jsp" ) |
.forward(request, response); |
这里可以看到,通过这个对象我们可以实现带request、response传递,并且可以在传递前设置修改request请求。给新的页面处理。
传参页面跳转:
客户端跳转不能像目标页面传递参数(如果使用该方法非要向目标页面传递参数的话,可以可以使用session对象将参数值记录,在此不详细记录)// 使用response对象的sendRedirect实现客户端跳转 // servlet的doGet方法 public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException { PrintWriter out = res.getWriter(); out.println( " Hello world! " ); res.sendRedirect( " test.do " ); // servlet实现跳转(客户端跳转) }
// 使用RequestDispatcher接口实现服务器端跳转,且向目标页面传递参数public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ PrintWriter out = resp.getWriter(); /* * 在servlet中实现服务器端跳转,并向跳转页面传递参数 */ req.setAttribute( " name " , " haiyun " ); // 为request对象添加参数 RequestDispatcher dispatcher = req.getRequestDispatcher( " test-04.jsp " ); // 使用req对象获取RequestDispatcher对象 dispatcher.forward(req, resp); // 使用RequestDispatcher对象在服务器端向目的路径跳转
三、页面重定向实现
页面重定向就是告诉浏览器改访问目标,类似于发送一个302响应,告诉浏览器去访问一个新的地址。这个地址是对于浏览器的,所以如果是以”/”开头的话是对于整个域名而言!代码如下:
response.sendRedirect( "/RefreshProject/index.jsp" ); |
四、重定向与跳转区别
重定向与跳转比较直观的区别就是跳转在浏览器端地址不会改变,而重定向浏览器端的地址会改变。
另外就是跳转的时候我们是可以将客户端发送的请求一并发送给跳转目标,但是这点对于重定向就不能了!