GVKun编程网logo

DWR2.0 引用 ScriptSession的一些介绍(dw如何引用js)

11

在本文中,我们将为您详细介绍DWR2.0引用ScriptSession的一些介绍的相关知识,并且为您解答关于dw如何引用js的疑问,此外,我们还会提供一些关于OpenSession和getCurren

在本文中,我们将为您详细介绍DWR2.0 引用 ScriptSession的一些介绍的相关知识,并且为您解答关于dw如何引用js的疑问,此外,我们还会提供一些关于 OpenSession 和getCurrentSession 的一些区别、bootstrap description dt wrap issue、c# – JavaScript – 如何在Javascript中将值设置为Session、Cas srpingsecurity 在setSession,容易session getSession取值的时候没有值的有用信息。

本文目录一览:

DWR2.0 引用 ScriptSession的一些介绍(dw如何引用js)

DWR2.0 引用 ScriptSession的一些介绍(dw如何引用js)

1 关于ScriptSession
ScriptSession不会与HttpSession同时创建
当我们访问一个页面的时候,如果是第一次访问,就会创建一个新的HttpSession,之后再访问的时候,就会保持当前的Session,即使是刷新,也能保持当前的HttpSession。
但是,ScriptSession不同,第一次访问,会创建一个ScriptSession,但是,如果你刷新,就会创建一个新的ScriptSession.


2 如何得到ScriptSession
在DWR中,我们可以通过WebContextFactory.get()来取得一个WebContext对象,进而通过WebContext的getScriptSession()取得ScriptSession对象。
但是要注意,在我们自定义的Servlet中,我们也可以通过WebContextFactory.get()来取得一个WebContext,但是这种方法却不能取得ScriptSession对象。因为,此WebContext对象其实不是通过DWR的上下文环境得到的,所以,就根本没有创建ScriptSession对象。
假设这种方式也能得到ScriptSession的话,那么我们实现“推”也就可以不局限在DWR的上下文环境中了,那么其灵活性就会大很多了。

所以,这就是我们不能在Servlet中实现推的原因。

3 关于刷新就创建一个新的ScriptSession问题
在我们需要推送的页面中,如果你刷新以下,那么就提交一个Http的request,此时,如果是第一次,那么就会创建一个httpSession对象,同时,请求由DwrServlet来处理后,就会创建一个ScriptSession.这个ScriptSession会和你的request请求的URI绑定放在一个由ScriptSessionManager维护的Map里面(这里面其实是一个URI对应的Set,在Set里面放置的是URI绑定的所有ScriptSession)。
当你刷新的时候,同样的一个HttpSession,却会创建一个新的ScriptSession,然后绑定到对应的URI上。

4 向所有的页面访问者推送
当我们想向所有的页面访问者推送的时候,我们只需要,取得所有的页面访问者,就可以“推”了。
如何取得所有的页面访问者?可以通过
//Collection pages = webContext.getScriptSessionsByPage("/SynMap/map/map.jsp");
来取得/SynMap/map/map.jsp的所有访问的ScriptSession
如何推送,
Util util = new Util(pages);
util.addFunctionCall("syningMap",new Double(x),new Double(y),new Integer(zoom));
通过此方法,就可以实现调用客户端的javascript函数,实现对客户端的操作。

5 在上面的推送中产生的问题
上面的方法已经可以实现向所有的访问者推送。但是问题是,在客户端,如果用户刷新一次或多次,那么,Collection里面可能就保存了很多的无用的ScriptSession,所以不仅仅会影响性能问题,更重要的是,可能就不能实现你想要的功能。

比如,你想取得当前再现的有效用户,那么你就需要知道那些ScriptSession是有效的。

6 如何管理有效的ScriptSession

由于上面的问题,我们就需要自己管理ScriptSession.其实,有效地HttpSession,就是那个和当前的HttpSession匹配的ScriptSession.
所以,我们就可以自己维护一个Map,在这个Map里面,我们定义key就是HttpSession的Id,其值就是ScriptSession对象。
在每一次页面载入的时候,都去注册此ScriptSession,那么就会把新的ScriptSession绑定到httpSession上面了。
// session and scriptSession map
Map sm = g.getSessions();
// hs is HttpSession
// ss is ScriptSession object
sm.put(hs.getId(),ss);

7 如何实现有效推送
通过上面的Map取得所有的有效ScriptSession集合
Collection pages = g.getSessions().values();
然后再推送,就可以了。

8 上面问题的新的解决方案 上面的技术问题和解决方案都是在DWR2.0的环境下遇到的。 昨天看了一下,即将正式发布的DWR3.0的文档,里面对AJAX Reverse技术增加了不少功能。 其中新加了一个象HttpSessionListener的东西,叫ScriptSessionListener 所以,我想,可以通过这个Listener实现上面的功能,也就是说,在监听到一个ScriptSession创建的时候,我们就直接判断,并把此ScriptSession绑定到httpSession上,就可以了。同样用上面的那个map来管理就可以了。 这个是我的思路,我还没有实践,如果你需要的话,可以自己去试一下。

<Hibernate> OpenSession 和getCurrentSession 的一些区别

OpenSession 和getCurrentSession 的一些区别

转载自:http://blog.csdn.net/fishrui/article/details/5285488

 

测试1:openSession在不开启事务的情况下执行操作

   Session session= SessionFactoryUtil.openSession();

     (1):session.get(UserInfo.class,14L);  //执行成功,得到数据

     (2):session.delete(new UserInfo(16L));  //执行成功 但数据库数据不变(符合逻辑) 

   session.close();

  

追溯了下源码发现:

     在不开启事务的情况下,session得到数据库连接是在执行查询语句的时候从连接池中获得。

     private PreparedStatement getPreparedStatement(
            final Connection conn,
            String sql,
            boolean scrollable,
            final boolean useGetGeneratedKeys,
            final String[] namedGeneratedKeys,
            final ScrollMode scrollMode,
            final boolean callable) ;在调用这个方法时传入了从连接池中拿到的连接。

      在执行完数据操作后调用

           afterOperation(boolean success);

     发现是非事务型的session直接调用

            connectionManager.aggressiveRelease(); 

     释放连接。

 

测试2:getCurrentSession()在不开启事务的情况下执行操作

     Session session= SessionFactoryUtil.getCurrentSession();

     (1):session.get(UserInfo.class,14L);   //抛出异常get is not valid without active transaction

     (2):session.delete(new UserInfo(16L));// 抛出异常get is not valid without active transaction 

     //session.close();  //线程绑定session会自动关闭

说明: 线程绑定session必须开启事务,此时的session已经加载了拦截器,在执行数据操作时必须在活动的事务范围中。

 

测试3:openSession在开启事务的情况下执行操作

    Session session= SessionFactoryUtil.openSession();

    session.getTransaction().begin(); 

     (1):session.get(UserInfo.class,14L);  //执行成功,得到数据

     (2):session.delete(new UserInfo(16L));  //执行成功 

   session.getTransaction().commit();

   session.close();  //如若配置hibernate.transaction.auto_close_session=true可省去

 

分析:

(a):session.getTransaction().begin()-->Transaction result = getTransaction()

-->result.begin()-->jdbcContext.connection()

         {

                if ( owner.isClosed() ) {
                       throw new SessionException( "Session is closed" );
                 }

                return connectionManager.getConnection();

         }

见到connectionManager有点熟悉了吧,这就是管理数据库连接的连接池.

(b):session.getTransaction().commit()-->connectionManager.aggressiveRelease() 释放连接。 

此时的数据库连接是在准备开启事务的时获得,事务提交的时候释放连接。

 

测试4:getCurrentSession()在开启事务的情况下执行操作

     Session session= SessionFactoryUtil.getCurrentSession();

     session.getTransaction().begin(); 

     (1):session.get(UserInfo.class,14L);        //执行成功

     (2):session.delete(new UserInfo(16L));   //执行成功 

     session.getTransaction().commit();

说明: 线程绑定session已经加载了拦截器,提交的时候释放连接关闭session。

 

 

 总结:

        (1)openSession()得到得session可以在显式开启事务的环境中使用,也可以在不开启事务的环境中使用(进行查询);getCurrentSession()必须在显式开启事务环境中使用。

        (2)openSession()是否显式开启事务决定了session得到连接的时机不同。不开启事务的情况下数据库连接是在创建Statement时获得。因此在配置二级缓存的情况get()对象时,如果二级缓存中有需要的对象时,不会占用数据库连接。相反开启事务的情况下,无论二级缓存中是否有对象,多会占用数据库连接。

        (3)getCurrentSession()总会占用数据库连接。       


bootstrap description dt wrap issue

bootstrap description dt wrap issue

总结

以上是小编为你收集整理的bootstrap description dt wrap issue全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

c# – JavaScript – 如何在Javascript中将值设置为Session

c# – JavaScript – 如何在Javascript中将值设置为Session

我想在Session中设置Dropdown选择的值.我在Code中完成了.但是对于某些条件,我必须在客户端自己做.我尝试了以下内容.但我还没解决.

<%session["Test"] = "Welcome Mamu";%>  
var session_value='<%=Session["Test"]%>';  
alert(session_value);

以上工作很好.请注意,我已分配静态值(欢迎Mamu).但对于Dynamatic,

var strTest=document.getElementById('DropDownList1').value;  
<%session["Test"] = "'+ strTest +'";%>

它在客户端工作正常.但是我的服务器端(Code Behind),Session [“Test”]值是’strTest’.

是否有任何其他方式为Session分配值?

解决方法@H_301_23@
无法通过javascript直接分配会话值.

我找到了其他方法.调用函数后面的代码并分配会话值.

Javascript功能:

function InitializeRequest(path) 
{
            // call server side method
            PageMethods.SetDownloadpath(path);
}


[System.Web.Services.WebMethod]
public static string SetDownloadpath(string strpath)
{
    Page objp = new Page();
    objp.Session["strDwnPath"] = strpath; 
    return strpath;
}

必须启用页面方法设置为true

< asp:ScriptManager EnablePageMethods =“true”ID =“MainSM”runat =“server”ScriptMode =“Release”LoadScriptsBeforeUI =“true”>< / asp:ScriptManager>

Cas srpingsecurity 在setSession,容易session getSession取值的时候没有值

Cas srpingsecurity 在setSession,容易session getSession取值的时候没有值

  Cas srpingsecurity 在setSession之后,容易session getSession取值的时候没有值。 spring security有什么地方会销毁session中的数据吗?看了一下,注销成功的时候有一个使session失效,但是使用的时候基本上没有点注销,web容器的web.xml setTimeout为3600 分钟! 就不知道web容器设置全局session过期时间,局部web.xml设置,与程序中设置session最大过期时间那个优先

今天关于DWR2.0 引用 ScriptSession的一些介绍dw如何引用js的分享就到这里,希望大家有所收获,若想了解更多关于 OpenSession 和getCurrentSession 的一些区别、bootstrap description dt wrap issue、c# – JavaScript – 如何在Javascript中将值设置为Session、Cas srpingsecurity 在setSession,容易session getSession取值的时候没有值等相关知识,可以在本站进行查询。

本文标签: