<!-- Error --> 由于response是jsp页面中的隐含对象,故在jsp页面中可以用response.sendRedirect()直接实现重定位。
注意:
(1).使用response.sendRedirect时,前面不能有HTML输出。
这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,一般在8K(我是说JSP SERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。
(2).response.sendRedirect之后,应该紧跟一句return;
我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。
补充
1.RequestDispatcher.forward()
是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在b.jsp都可以获得,参数自动传递.
但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面.
重定向后浏览器地址栏URL不变.
例:在servlet中进行重定向
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html; charset=gb2312"); ServletContext sc = getServletContext(); RequestDispatcher rd = null; rd = sc.getRequestDispatcher("/index.jsp"); //定向的页面 rd.forward(request, response); } |
通常在servlet中使用,不在jsp中使用。
2.response.sendRedirect()
是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.
重定向后在浏览器地址栏上会出现重定向页面的URL
例:在servlet中重定向
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html; charset=gb2312"); response.sendRedirect("/index.jsp"); } |
由于response是jsp页面中的隐含对象,故在jsp页面中可以用response.sendRedirect()直接实现重定位。
注意:
(1).使用response.sendRedirect时,前面不能有HTML输出
这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,一般在8K(我是说JSP SERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。
(2).response.sendRedirect之后,应该紧跟一句return;
我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。
比较:
(1).Request Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
(2).response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法.
注:在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法。
3.<jsp:forward page="" />
它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。
如果在<jsp:forward>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。
另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交
4.修改HTTP header的Location属性来重定向
通过设置直接修改地址栏来实现页面的重定向。
jsp文件代码如下:
<% response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); String newLocn = "/newpath/jsa.jsp"; response.setHeader("Location",newLocn); %> |
5.JSP中实现在某页面停留若干秒后,自动重定向到另一页面
在html文件中,下面的代码:
<meta http-equiv="refresh" content="300; url=target.jsp"> |
它的含义:在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间,以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。
由上可知,可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。
关键代码:
String content=stayTime+";URL="+URL; response.setHeader("REFRESH",content); |
如果总结得不够全面,请各位发表自己的意见或经验。
相关推荐
当用户访问一个需要会话支持的Web应用时,服务器会在响应中通过Set-Cookie头部将`jsessionId`发送给客户端(通常是浏览器或Android应用),客户端则将其保存在Cookie中,并在后续的请求中自动附带这个标识,以便...
在Web开发中,`jsessionid`是一个常见的概念,它关联到Java服务器会话(Session)的管理。本文将深入探讨`jsessionid`存在的问题以及相应的解决方案,并结合提供的`DisableUrlSessionFilter.java`和`web.xml`文件来...
### Tomcat中修改JSessionID在Cookie中的名称 在Tomcat服务器中,默认情况下,用于传递会话标识(即JSessionID)的Cookie名称为“JSESSIONID”。有时,出于安全考虑或其他需求,我们可能需要自定义这个名称。本文将...
在Java Web开发中,`jsessionId`是服务器为了区分不同的用户会话而分配的一个唯一标识符。它通常会被添加到URL中或者通过Cookie传递。然而,在某些情况下,我们可能不希望URL中含有`jsessionId`,例如出于安全性的...
在登录时,服务器通常会生成一个Session ID,并通过Cookie将这个ID返回给客户端。后续的请求,客户端需要携带这个Session ID,以便服务器识别出这是同一用户。 在Java中,HttpURLConnection并不直接支持session管理...
如:A,B两个服务,在浏览器中登录访问A后,当前打开的浏览器上在开一个选项卡访问B服务后,回过来点击访问A时session丢失,需要重新登录A才可以访问。经过资料查找,发现问题是因为:IP相同认为是同一个域,接收了B...
然而,这种处理办法治标不治本,当用户第一次访问的时候,Cookie 还是会记录原 Path 属性,之后的再次访问,属性会被容器置换。 2. 从容器本身解决 从容器本身解决的思路是通过配置容器的设置来处理问题。例如,...
在这种情况下,搜索引擎会选择其中一个URL作为标准URL(canonical URL),并将其他变体视为其副本。 #### 四、不同服务器下的URL重写规则 根据使用的服务器类型不同,URL重写的方式也会有所不同。常见的服务器如...
重定义URL 使其直接进去网页 不用登录 用于:邮件链接直接进入网站
在上面的示例代码中,我们首先创建了一个HttpClient实例,然后设置了要访问的URL,接着创建了一个PostMethod对象,并设置了请求参数。最后,我们执行了POST请求,并读取了服务器返回的响应结果。 3. 处理Cookie和...
在Java中访问.NET Web服务的第一步是生成客户端代理类。这通常通过WSDL(Web Service Description Language)文件完成,该文件描述了Web服务的接口和操作。使用工具如`wsimport`命令或者IDE中的功能,可以自动生成与...
对于HTML元素的使用,PPT中提到了标签,它是Struts提供的标签库中的一个元素,可以简化URL的构造,自动处理jsessionid,进行URL编码,并且方便地传递参数。相比直接使用标签,更适应Struts框架。 文件上传是Web应用...
在Java编程中,后台请求HTTP并保持Session是一个常见的任务,特别是在需要访问受保护的Web资源时,例如登录后的网页数据。下面将详细讲解这个过程,包括GET和POST方法的使用,以及Session管理。 首先,我们需要了解...
Struts框架在接收到用户请求后,ActionServlet首先被调用,接着ActionFormBean封装请求数据,如果验证失败则返回Input视图,否则Action执行并返回ActionForward,ActionForward指导视图的跳转,最终展示结果给用户。...
添加Cookie可以通过定义一个函数来实现,该函数接受必要的参数(如名称、值、有效期等),并构建一个有效的Cookie字符串。 ```javascript function addCookie(name, value, expiresDay, domain, path, isSecure) { ...
在 CASClient 中,可以配置一个统一的注销 URL,当用户注销时,可以将用户重定向到这个 URL,从而实现统一注销。 配置 CASClient 为了实现单点登录和统一注销,需要在 web.xml 中进行相应的配置。需要配置 ...
存放在客户端的用于保存 SessionID 的 Cookie 会在浏览器关闭时清除,因此当你重新打开一个浏览器时,第一次的输出依然会是"sorry,cookie is null...",因为服务器认为这是一次新的“会话”,同样当你刷新此页面时,...
获得请求头的各种参数信息jsp代码: ...获取接受客户提交信息的页面: /004.jsp 接受客户提交信息的长度: -1 ...获取头文件中指定头名字的全部值的一个枚举: JSESSIONID=7278C051AADA7370A6DB7492CDD13984
在 WebLogic 发生故障切换(failover)时,如果缓存已满,则可能会导致第一个请求失败,而第二个请求成功。需要注意的是,当 `FileCaching` 设置为 `ON` 时,POST 数据可能会被缓存,即使实际未写入缓存。因此,在...
认证成功后,服务器通常会返回一个Set-Cookie头,包含会话标识。我们需要捕获并保存这个Cookie,以便后续请求使用: ```java Map, List<String>> headers = conn.getHeaderFields(); List<String> cookies = ...