`

ActionForward forward = new ActionForward(url) 会在第一次访问时出现产生jsessionid 之类的一个参数

    博客分类:
  • J2EE
阅读更多

我请求的路径是http://10.20.2.79:8080/unionshopD/yp/search/encrypt.do?product=comp&keywords=%E6%89%8B%E6%9C%BA  

经过加密处理后的参数只有一个自己定义的sid

  ActionForward forward = new ActionForward(url);
  forward.setRedirect(true);
  return forward;

 

结果url变成了

http://10.20.2.79:8080/unionshopD/yp/search/decrypt.do;jsessionid=AAF28A02B394CA8E2EB420114FAB899E?suid=obzg6zdvmn2d2y3pnvycm23fpf3w64teom64vvv37ithg4tdl5vwk6lxn5zgi4z5zlllx6q

 

 

在你第二次请求时,用同样的url则不会出现这种情况,我也说不清,那个好能解释下

就多了个 jsessionid 参数 好像是内部的一个什么机制,这样在后面的解密中总会出现解密不成功,到错误页面。

最后对加密后的用

 

response.sendRedirect(request.getContextPath()+"/yp/search/"+url);

return null;

 

这样就没问题了,就是客户端重新提交

 

随便收集了下这方面的资料

 

 

JSP/Servlet的重定向技术综述

2005-09-20 21:28作者:出处:blog责任编辑:方舟
<!--正文开始-->
<!-- 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);

  如果总结得不够全面,请各位发表自己的意见或经验。
分享到:
评论

相关推荐

    android获取jsessionId和发送jsessionId

    当用户访问一个需要会话支持的Web应用时,服务器会在响应中通过Set-Cookie头部将`jsessionId`发送给客户端(通常是浏览器或Android应用),客户端则将其保存在Cookie中,并在后续的请求中自动附带这个标识,以便...

    jsessionid存在的问题及其解决方案

    在Web开发中,`jsessionid`是一个常见的概念,它关联到Java服务器会话(Session)的管理。本文将深入探讨`jsessionid`存在的问题以及相应的解决方案,并结合提供的`DisableUrlSessionFilter.java`和`web.xml`文件来...

    tomcat修改jsessionid在cookie中的名称

    ### Tomcat中修改JSessionID在Cookie中的名称 在Tomcat服务器中,默认情况下,用于传递会话标识(即JSessionID)的Cookie名称为“JSESSIONID”。有时,出于安全考虑或其他需求,我们可能需要自定义这个名称。本文将...

    UrlFilter过滤jsessionId

    在Java Web开发中,`jsessionId`是服务器为了区分不同的用户会话而分配的一个唯一标识符。它通常会被添加到URL中或者通过Cookie传递。然而,在某些情况下,我们可能不希望URL中含有`jsessionId`,例如出于安全性的...

    java实现多次HttpURLConnection共享session

    在登录时,服务器通常会生成一个Session ID,并通过Cookie将这个ID返回给客户端。后续的请求,客户端需要携带这个Session ID,以便服务器识别出这是同一用户。 在Java中,HttpURLConnection并不直接支持session管理...

    一个服务器搭多个tomcat导致session丢失,或者同一个IP不同端口,多个应用的session会冲突解决方法

    如:A,B两个服务,在浏览器中登录访问A后,当前打开的浏览器上在开一个选项卡访问B服务后,回过来点击访问A时session丢失,需要重新登录A才可以访问。经过资料查找,发现问题是因为:IP相同认为是同一个域,接收了B...

    Set-Cookie: JSESSIONID=8AB51DC4244907FD9EBB063C7FD73CBA; Path=/; HttpOnly

    然而,这种处理办法治标不治本,当用户第一次访问的时候,Cookie 还是会记录原 Path 属性,之后的再次访问,属性会被容器置换。 2. 从容器本身解决 从容器本身解决的思路是通过配置容器的设置来处理问题。例如,...

    URL重写概念和例子

    在这种情况下,搜索引擎会选择其中一个URL作为标准URL(canonical URL),并将其他变体视为其副本。 #### 四、不同服务器下的URL重写规则 根据使用的服务器类型不同,URL重写的方式也会有所不同。常见的服务器如...

    获取JsessionId

    重定义URL 使其直接进去网页 不用登录 用于:邮件链接直接进入网站

    JAVA-用HttpClient来模拟浏览器GET,POST.docx

    在上面的示例代码中,我们首先创建了一个HttpClient实例,然后设置了要访问的URL,接着创建了一个PostMethod对象,并设置了请求参数。最后,我们执行了POST请求,并读取了服务器返回的响应结果。 3. 处理Cookie和...

    java访问.net webservice获取与设置cookie

    在Java中访问.NET Web服务的第一步是生成客户端代理类。这通常通过WSDL(Web Service Description Language)文件完成,该文件描述了Web服务的接口和操作。使用工具如`wsimport`命令或者IDE中的功能,可以自动生成与...

    09年struts高级实战进阶PPT.ppt

    对于HTML元素的使用,PPT中提到了标签,它是Struts提供的标签库中的一个元素,可以简化URL的构造,自动处理jsessionid,进行URL编码,并且方便地传递参数。相比直接使用标签,更适应Struts框架。 文件上传是Web应用...

    java后台请求http并保持Session

    在Java编程中,后台请求HTTP并保持Session是一个常见的任务,特别是在需要访问受保护的Web资源时,例如登录后的网页数据。下面将详细讲解这个过程,包括GET和POST方法的使用,以及Session管理。 首先,我们需要了解...

    张孝祥09年struts高级实战进阶PPT

    Struts框架在接收到用户请求后,ActionServlet首先被调用,接着ActionFormBean封装请求数据,如果验证失败则返回Input视图,否则Action执行并返回ActionForward,ActionForward指导视图的跳转,最终展示结果给用户。...

    SSO-相关核心技术知识

    添加Cookie可以通过定义一个函数来实现,该函数接受必要的参数(如名称、值、有效期等),并构建一个有效的Cookie字符串。 ```javascript function addCookie(name, value, expiresDay, domain, path, isSecure) { ...

    CASClient集群环境的Session问题及解决方案.docx

    在 CASClient 中,可以配置一个统一的注销 URL,当用户注销时,可以将用户重定向到这个 URL,从而实现统一注销。 配置 CASClient 为了实现单点登录和统一注销,需要在 web.xml 中进行相应的配置。需要配置 ...

    session的实现方式

    存放在客户端的用于保存 SessionID 的 Cookie 会在浏览器关闭时清除,因此当你重新打开一个浏览器时,第一次的输出依然会是"sorry,cookie is null...",因为服务器认为这是一次新的“会话”,同样当你刷新此页面时,...

    获得请求头的各种参数信息jsp代码

    获得请求头的各种参数信息jsp代码: ...获取接受客户提交信息的页面: /004.jsp 接受客户提交信息的长度: -1 ...获取头文件中指定头名字的全部值的一个枚举: JSESSIONID=7278C051AADA7370A6DB7492CDD13984

    Httpd.conf文件中关于WebLogic的设定参数

    在 WebLogic 发生故障切换(failover)时,如果缓存已满,则可能会导致第一个请求失败,而第二个请求成功。需要注意的是,当 `FileCaching` 设置为 `ON` 时,POST 数据可能会被缓存,即使实际未写入缓存。因此,在...

    用java客户端程序模拟校园网网页认证

    认证成功后,服务器通常会返回一个Set-Cookie头,包含会话标识。我们需要捕获并保存这个Cookie,以便后续请求使用: ```java Map, List&lt;String&gt;&gt; headers = conn.getHeaderFields(); List&lt;String&gt; cookies = ...

Global site tag (gtag.js) - Google Analytics