??xml version="1.0" encoding="utf-8" standalone="yes"?>成人免费一区二区三区视频网站,国产精品入口久久,欧美成人精品二区三区99精品http://www.aygfsteel.com/balajinima/category/26951.htmlzh-cnTue, 06 Nov 2007 22:41:51 GMTTue, 06 Nov 2007 22:41:51 GMT60DWR实例教程http://www.aygfsteel.com/balajinima/articles/158568.html李云?/dc:creator>李云?/author>Tue, 06 Nov 2007 07:31:00 GMThttp://www.aygfsteel.com/balajinima/articles/158568.htmlhttp://www.aygfsteel.com/balajinima/comments/158568.htmlhttp://www.aygfsteel.com/balajinima/articles/158568.html#Feedback0http://www.aygfsteel.com/balajinima/comments/commentRss/158568.htmlhttp://www.aygfsteel.com/balajinima/services/trackbacks/158568.html
以上摘自open-openQ它通过反射Q将java译成javascriptQ然后利用回调机ӞL实现了javascript调用Java代码?br />
其大概开发过E如下:
1.~写业务代码Q该代码是和dwr无关的?br />2.认业务代码中哪些类、哪些方法是要由javascript直接讉K的?br />3.~写dwrlgQ对步骤2的方法进行封装?br />4.配置dwrlg到dwr.xml文g中,如果有必要,配置convertQ进行java和javascriptcd互{?br />5.通过反射机制Qdwr步?的类转换成javascript代码Q提供给前台面调用?br />5.~写|页Q调用步?的javascript中的相关ҎQ间接调用服务器端的相关cȝҎQ,执行业务逻辑Q将执行l果利用回调函数q回?br />6.在回调函CQ得到执行结果后Q可以l编写业务逻辑的相关javascript代码?br />
下面以用h册的例子Q来说明其用。(注意Q本ơ例子只是用于演C,说明DWR的用,c设计ƈ不是最优的Q?br />
1.先介l下相关的Javac?br />
  User: 用户c,
  public class User {
//登陆IDQ主键唯一
private String id;
//姓名
private String name;
//口o
private String password;
//电子邮g
private String email;
        
//以下包含getXXX和setXXXҎ
.......
  }

  UserDAOQ实现User的数据库讉KQ这里作Z个演C,~写试代码
  public class UserDAO {
    //存放保存的数?br />    private static Map dataMap = new HashMap();

    //持久用户
    public boolean save(User user) {
      if (dataMap.containsKey(user.getId()))
        return false;
      System.out.println("下面开始保存用?);
      System.out.println("idQ?+user.getId());
      System.out.println("passwordQ?+user.getPassword());
      System.out.println("nameQ?+user.getName());
      System.out.println("emailQ?+user.getEmail());
      dataMap.put(user.getId(), user);
      System.out.println("用户保存l束");
      return true;
    }

    //查找用户
    public User find(String id) {
      return (User)dataMap.get(id);
    }
}

  DWRUserAccessQDWRlgQ提供给javascript讉K的?br />
  public class DWRUserAccess {

      UserDAO userDAO = new UserDAO();

      public boolean save(User user) {
        return userDAO.save(user);
      }

      public User find(String id) {
        return userDAO.find(id);
      }
  }
  

  下面说明下程序执行的程

  1.用户在页面上输入相关注册信息Qid、name、password、emailQ点几Z提交”按?br />  2.javascript代码开始执行,Ҏ用户填写相关信息Q通过dwr提供的DWRUserAccess.js里save的方法,调用服务器端的DWRUserAccesscsaveҎQ将注册信息保存?br />  3.通过DWRUserAccess.jsp里的findҎQ调用服务器端DWRUserAccessc里的findҎQ执行用户信息查找?br />
  注意Q在以上的执行过E中QDWRUserAccess是供DWR调用的,是DWRlgQ因此需要将DWRUserAccessc配|到dwr中?br />
  接下来讲解本ơdwr试环境的配|?br />
  1.新徏一个webappQ命名ؓtestApp
  2.dwr.jar拯到testApp的WEB-INF的lib目录?br />  3.~译上面的UserQUserDAOQDWRUserAccessc,攑ֈclasses目录?br />  4.在web.xml中配|servlet,适配路径到dwr目录?如下所C?br />    <servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <display-name>DWR Servlet</display-name>
    <description>Direct Web Remoter Servlet</description>
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>scriptCompressed</param-name>
      <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>

  以上的配|可以拦截testApp下所有指向dwr的请求,关于q个拦截器,我们会在后面介绍?br />
  5.WEB-INF下新Z个dwr.xml文gQ内容如下:
  < xml version="1.0" encoding="UTF-8" >
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">

<dwr>
  <allow>
<create creator="new" javascript="DWRUserAccess">
      <param name="class" value="test.DWRUserAccess"/>
    </create>
<convert converter="bean" match="test.User"/>
  </allow>
</dwr>

  q里我们把DWRUserAccess配置Cdwr中,create元素中,creater="new"表示每调用一ơDWRUserAccessӞ需要new一个这Lc;javascript="DWRUserAccess"Q表C提供给前台面调用的javascirpt文g是DWRUserAccess.js?br />
  convert元素用于数据cd转换Q即javacdjavascript之间怺转换Q因为和前台交换的是User对象Q因此需要对此用bean转换Q我们将在后面介l这个类?br />
  4.~写试的HTML面 test.html
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>DWR试</TITLE>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<script src="/oblog312/dwr/engine.js"></script>
<script src="/oblog312/dwr/util.js"></script>
<script src="/oblog312/dwr/interface/DWRUserAccess.js"></script>
</HEAD>
<BODY>
<B>用户注册</B><br>
------------------------------------------------
<Br>
<form name="regForm">
登陆IDQ?lt;input type="text" name="id"><br>
口  oQ?lt;input type="password" name="password"><br>
姓  名Q?lt;input type="text" name="name"><br>
电子邮gQ?lt;input type="text" name="email"><br>
<input type="button" name="submitBtn" value="提交" onclick="OnSave()"><br>
    </form>

<br>
<br><B>用户查询</B><br>
------------------------------------------------
<Br>
<form name="queryForm">
登陆IDQ?lt;input type="text" name="id"><br>
<input type="button" name="submitBtn" value="提交" onclick="OnFind()"><br>
</form>
<br>
</BODY>
</HTML>
<SCRIPT LANGUAGE="JavaScript">
<!--
function saveFun(data) {
if (data) {
  alert("注册成功Q?);
} else {
  alert("登陆ID已经存在Q?);
}
}

function OnSave() {
var userMap = {};
userMap.id = regForm.id.value;
userMap.password = regForm.password.value;
userMap.name = regForm.name.value;
userMap.email = regForm.email.value;
DWRUserAccess.save(userMap, saveFun);
}

function findFun(data) {
if (data == null) {
  alert("无法扑ֈ用户Q?+queryForm.id.value);
  return;
}

alert("扑ֈ用户QnidQ?+data.id+"QnpasswordQ?+data.password+"QnnameQ?+data.name+"QnemailQ?+data.email);

}

function OnFind() {
DWRUserAccess.find(queryForm.id.value, findFun);
}
//-->
</SCRIPT>


以下寚w面的javascriptq行解释

<script src="/oblog312/dwr/engine.js"></script>
<script src="/oblog312/dwr/util.js"></script>
q两个是dwr提供的,用户可以不必兛_Q只需要导入即?br />
<script src="/oblog312/dwr/interface/DWRUserAccess.js"></script>
是我们编写的DWRUserAccessc,ldwr反射后,生成的javascript代码Q它和DWRUserAccess.java是对应的Q供用户调用Q实际上我们是通过q个js文g去调用服务器端的DWRUserAccesscȝ?br />
<SCRIPT LANGUAGE="JavaScript">
<!--
function saveFun(data) {
if (data) {
  alert("注册成功Q?);
} else {
  alert("用户名已l存在!");
}
}

function OnSave() {
var userMap = {};
userMap.id = regForm.id.value;
userMap.password = regForm.password.value;
userMap.name = regForm.name.value;
userMap.email = regForm.email.value;
DWRUserAccess.save(userMap, saveFun);
}

function findFun(data) {
if (data == null) {
  alert("无法扑ֈ用户Q?+queryForm.id.value);
  return;
}

alert("扑ֈ用户QnidQ?+data.id+"QnpasswordQ?+data.password+"QnnameQ?+data.name+"QnemailQ?+data.email);

}

function OnFind() {
DWRUserAccess.find(queryForm.id.value, findFun);
}
//-->
</SCRIPT>

q段javascirpt代码Q我们来看下OnSave函数Q首先它构造一个mapQ将表单数据都设|到map中,然后调用DWRUserAccess.save(userMap, saveFun)Q执行save操作。大家可以注意到Q服务器端的DWRUserAccess中的saveҎ是这LQboolean save(User user)Q其参数是一个User对象Q返回一个boolean|而客L的方法是q样的:save(userMap,saveFun)Q第一个参数userMap是javascirpt中的map对象Q在q里相当于服务器端的User对象Q在服务器端执行Ӟ会通过convert转换成User对象Q,前面我们提到dwr是利用回调函数来q回执行l果的,W二个参数saveFunx一个回调函数。在函数function saveFun(data)中,data是执行结果,q里是一个bool|非常单的Q我们通过判断data是否为真Q可以知道用户名是否重复Q用h否注册成功?br />
看一下OnFind查找函数Q执行结果在回调函数findFun(data)中,因ؓ服务器端q回的是一个User对象Q通过convertQ将会{换成javascript的一个map对象Q?br />于是在findFun中,通过data.id、data.name、data.password、data.email我们可以L的访问到q个User对象?br />

好了配置完毕Q启动服务器Q在目录中打入localhost/testApp/test.html?br />
1.在“用h册”表单中Qid框中输入adminQpassword中输?23456Qname中输入chenbugQemail中输入chenbug@zj.comQ点L交按钮,弹出对话框:“注册成功”,在服务器后台可以看到信息如下Q?br />
下面开始保存用?br />idQadmin
passwordQ?23456
nameQchenbug
emailQchenbug@zj.com
用户保存l束

再次点击提交按钮Q弹出对话框“登陆ID已经存在”?br />
2.在“用h询”对话框中,输入登陆ID为adminQ点L交按钮,提示扑ֈ用户Qƈ昄相关信息Q输入admin123Q点L交按钮,提示无法扑ֈ用户?br />
xQ测试结束?br />

后箋Q?br />1。拦截器 uk.ltd.getahead.dwr.DWRServlet
该类拦截所有指向dwr目录下的hQƈ调用Processor的handlerҎq行处理Q在uk.ltd.getahead.dwr.impl.DefaultProcessor下,我们可以看到详细的处理过E?br />if (pathInfo.length() == 0 ||
            pathInfo.equals(HtmlConstants.PATH_ROOT) ||
            pathInfo.equals(req.getContextPath()))
        {
            resp.sendRedirect(req.getContextPath() + servletPath + HtmlConstants.FILE_INDEX);
        }
        else if (pathInfo.startsWith(HtmlConstants.FILE_INDEX))
        {
            index.handle(req, resp);
        }
        else if (pathInfo.startsWith(HtmlConstants.PATH_TEST))
        {
            test.handle(req, resp);
        }
        else if (pathInfo.startsWith(HtmlConstants.PATH_INTERFACE))
        {
            iface.handle(req, resp);
        }
        else if (pathInfo.startsWith(HtmlConstants.PATH_EXEC))
        {
            exec.handle(req, resp);
        }
        else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_ENGINE))
        {
            file.doFile(req, resp, HtmlConstants.FILE_ENGINE, HtmlConstants.MIME_JS);
        }
        else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_UTIL))
        {
            file.doFile(req, resp, HtmlConstants.FILE_UTIL, HtmlConstants.MIME_JS);
        }
        else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_DEPRECATED))
        {
            file.doFile(req, resp, HtmlConstants.FILE_DEPRECATED, HtmlConstants.MIME_JS);
        }
        else
        {
            log.warn("Page not found (" + pathInfo + "). In debug/test mode try viewing /[WEB-APP]/dwr/"); //$NON-NLS-1$ //$NON-NLS-2$
            resp.sendError(HttpServletResponse.SC_NOT_FOUND);
        }

通过判断requesth的servlet路径Q进行处理,大家可以自己d看,q里不详l讨论?br />

2.bean转换器,<convert converter="bean" match="test.User"/>
dwr.jar解压~,在\径ukltdgetaheaddwr下可以看到dwr.xmlQ这里配|了pȝ默认的一些{换器Q?br /><converter id="bean" class="uk.ltd.getahead.dwr.convert.BeanConverter"/>x刚才用到Usercȝ转换器,q入代码我们来看看它是如何在javascript和java间进行{换的?br />
打开BeanConverter代码Q定位到函数

public Object convertInbound(Class paramType, InboundVariable iv, InboundContext inctx) throws ConversionException

xjavascript对象转换成java对象的,其中
paramType即ClasscdQ在上面的例子中是test.UserQ?br />InboundVariable ivQ是传入的|通过iv.getValue可以得到传入的javascriptg
InboundContext inctxQ是入口参数上下文,用于保存转换的后java对象?br />
因ؓ前台传入的是一个javascript的mapcdQ而map肯定是以{开始和以}l束的,于是在这个函C开始进行了判断
if (!value.startsWith(ConversionConstants.INBOUND_MAP_START))
        {
            throw new IllegalArgumentException(Messages.getString("BeanConverter.MissingOpener", ConversionConstants.INBOUND_MAP_START)); //$NON-NLS-1$
        }

        if (!value.endsWith(ConversionConstants.INBOUND_MAP_END))
        {
            throw new IllegalArgumentException(Messages.getString("BeanConverter.MissingCloser", ConversionConstants.INBOUND_MAP_START)); //$NON-NLS-1$
        }

javascript中,map里各个项是用逗号q接的,如var userMap = {id:'admin',password:'123456',name:'chenbug',email:'chenbug@zj.com'};而每个项的键值对是用冒号q接的,
在convertInbound函数的接下来的处理中Q即是通过分析map字串Q通过paramType构造java实例Q即Userc)Q然后通过反射Q将q些键值对讄到java实例中,q返回?br />q样完成了javascript到java的{换?br />

另一个函?br />public String convertOutbound(Object data, String varname, OutboundContext outctx) throws ConversionException

xjava对象转换为javascript对象Q其实是声明和赋D句)?br />Object data Q是待{换的java对象
String varnameQ是javascript中的该对象的变量?br />OutboundContext outctxQ传出参C下文Q用于保存{换后的javascript?br />
StringBuffer buffer = new StringBuffer();
        buffer.append("var "); //$NON-NLS-1$
        buffer.append(varname);
        buffer.append("={};"); //$NON-NLS-1$
q里声明了mapcd的变量?br />
即下来来的代码即是通过反射q行变量赋|如下
  buffer.append(varname);
                    buffer.append('.');
                    buffer.append(name);
                    buffer.append('=');
                    buffer.append(nested.getAssignCode());
                    buffer.append(';');
大家可以自己d看更多的代码?br />
3.dwr本n提供了一个测试环境,大家在配|完后,可以在IE中输入地址http://localhost/testApp/dwr/index.htmlQ看到配|的各DWRlgQƈq行相关试?img src ="http://www.aygfsteel.com/balajinima/aggbug/158568.html" width = "1" height = "1" />

]]>
写dwr demo的时候蟩出session error的解?/title><link>http://www.aygfsteel.com/balajinima/articles/157478.html</link><dc:creator>李云?/dc:creator><author>李云?/author><pubDate>Thu, 01 Nov 2007 06:06:00 GMT</pubDate><guid>http://www.aygfsteel.com/balajinima/articles/157478.html</guid><wfw:comment>http://www.aygfsteel.com/balajinima/comments/157478.html</wfw:comment><comments>http://www.aygfsteel.com/balajinima/articles/157478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/balajinima/comments/commentRss/157478.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/balajinima/services/trackbacks/157478.html</trackback:ping><description><![CDATA[ <p>dwr写demo的时候遇到的一个问?跛_session error<br />问题描述:<br />前台面跛_session error的对话框<br />而控制台则输?<br />2007-5-29 11:58:53 org.directwebremoting.util.CommonsLoggingOutput error<br />严重: A request has been denied as a potential CSRF attack.<br />的错误信?<br />h被拒l因为可能存在csrf(cross-site request forgeries,跨站h伪?d.<br />也就是说面URL可能被跨站了的服务所调用.<br />例如:自己面的一个图?可能被其他站直接通过[img]....[/img]来引?<br /><br />面则显C?/p> <p>解决Ҏ:<br />在web.xml配置文g?.<br />dwr的配|?br /></p> <div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"> <div> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">servlet</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />  </span> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">servlet-name</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000">dwr-invoker</span> <span style="COLOR: #0000ff"></</span> <span style="COLOR: #800000">servlet-name</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />  </span> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">servlet-class</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000">org.directwebremoting.servlet.DwrServlet</span> <span style="COLOR: #0000ff"></</span> <span style="COLOR: #800000">servlet-class</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />  </span> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">init-param</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />   </span> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">param-name</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000">debug</span> <span style="COLOR: #0000ff"></</span> <span style="COLOR: #800000">param-name</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />   </span> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">param-value</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000">true</span> <span style="COLOR: #0000ff"></</span> <span style="COLOR: #800000">param-value</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />  </span> <span style="COLOR: #0000ff"></</span> <span style="COLOR: #800000">init-param</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />  </span> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">init-param</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000">   <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />            </span> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">param-name</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000">crossDomainSessionSecurity</span> <span style="COLOR: #0000ff"></</span> <span style="COLOR: #800000">param-name</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000">   <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />            </span> <span style="COLOR: #0000ff"><</span> <span style="COLOR: #800000">param-value</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000">false</span> <span style="COLOR: #0000ff"></</span> <span style="COLOR: #800000">param-value</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000">   <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span> <span style="COLOR: #0000ff"></</span> <span style="COLOR: #800000">init-param</span> <span style="COLOR: #0000ff">></span> <span style="COLOR: #000000"> <br /> <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #0000ff"></</span> <span style="COLOR: #800000">servlet</span> <span style="COLOR: #0000ff">></span> </div> </div> <p> <br />加入corssDomainSessionSecurityq个配置选项..q个参数是在dwr版本2.0才有?默认gؓtrue,也就?/p> <p>止其他域发送请?<br />corssDomainSessionSecurity:讄成false能够从其他域q行h.注意q样做会在安全性上有一些冒?</p> <img src ="http://www.aygfsteel.com/balajinima/aggbug/157478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/balajinima/" target="_blank">李云?/a> 2007-11-01 14:06 <a href="http://www.aygfsteel.com/balajinima/articles/157478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͽ</a>| <a href="http://" target="_blank">廪</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">㽭ʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǡ</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ij</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">մ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ĩ</a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ػ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ұ</a>| <a href="http://" target="_blank">ֻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">̨ʡ</a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˷</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>