??xml version="1.0" encoding="utf-8" standalone="yes"?>中日韩美女免费视频网址在线观看,日韩精品中文字幕久久臀,亚洲丁香日韩http://www.aygfsteel.com/haogj/category/8077.htmlzh-cnFri, 02 Mar 2007 06:35:25 GMTFri, 02 Mar 2007 06:35:25 GMT60利用JSP 2.0开发Web应用E序http://www.aygfsteel.com/haogj/archive/2006/07/06/57046.htmlhaogjhaogjThu, 06 Jul 2006 14:44:00 GMThttp://www.aygfsteel.com/haogj/archive/2006/07/06/57046.htmlhttp://www.aygfsteel.com/haogj/comments/57046.htmlhttp://www.aygfsteel.com/haogj/archive/2006/07/06/57046.html#Feedback0http://www.aygfsteel.com/haogj/comments/commentRss/57046.htmlhttp://www.aygfsteel.com/haogj/services/trackbacks/57046.htmlhttp://www.phome.net/document/java/200504/java111245789013746.html

haogj 2006-07-06 22:44 发表评论
]]>
d解决 Tomcat 5 下文字ؕ码问?/title><link>http://www.aygfsteel.com/haogj/archive/2006/06/25/55017.html</link><dc:creator>haogj</dc:creator><author>haogj</author><pubDate>Sun, 25 Jun 2006 14:04:00 GMT</pubDate><guid>http://www.aygfsteel.com/haogj/archive/2006/06/25/55017.html</guid><wfw:comment>http://www.aygfsteel.com/haogj/comments/55017.html</wfw:comment><comments>http://www.aygfsteel.com/haogj/archive/2006/06/25/55017.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/haogj/comments/commentRss/55017.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/haogj/services/trackbacks/55017.html</trackback:ping><description><![CDATA[<P>使用 tomcat Ӟ怿大家都回遇到中文q的问题,具体表现为通过表单取得的中文数据ؓq?BR><BR><STRONG>一、初U解x?/STRONG><BR><BR>通过一番检索后Q许多h采用了如下办法,首先对取得字W串按照 iso8859-1 q行解码转换Q然后再按照 gb2312 q行~码Q最后得到正的内容。示例代码如下:<BR><BR>String  para = new String( request.getParameter("para").getBytes("iso8859-1"), "gb2312");<BR><BR>具体的原因是因ؓ国人在?tomcat 旉认?iso8859-1 q行~码造成的?BR><BR> 然而,在我们的 servlet ?jsp 面中有大量的参数需要进行传递,q样转换的话会带来大量的转换代码Q非怸ѝ?BR><BR><STRONG>二、入门解决Ҏ<BR></STRONG><BR>后来Q大家开始写一个过滤器Q在取得客户端传q来的参C前,通过qo器首先将取得的参数编码设定ؓ gb2312 Q然后就可以直接使用 getParameter 取得正确的参C。这个过滤器?tomcat 的示例代?<BR>jsp-examples 中有详细的用示?   其中qo器在 web.xml 中的讑֮如下Q示例中使用的是日文的编码,我们只要修改?gb2312 卛_<BR><BR>    <filter><BR>        <filter-name>Set Character Encoding</filter-name><BR>        <filter-class>filters.SetCharacterEncodingFilter</filter-class><BR>        <init-param><BR>            <param-name>encoding</param-name><BR>            <param-value><FONT style="BACKGROUND-COLOR: #ff0000">EUC_JP</FONT></param-value><BR>        </init-param><BR>    </filter><BR><BR>qo器的代码如下Q?BR>public class SetCharacterEncodingFilter implements Filter {</P> <P>    // ~码的字W串<BR>    protected String encoding = null;</P> <P>   // qo器的配置<BR>    protected FilterConfig filterConfig = null;</P> <P>   // 是否忽略客户端的~码<BR>    protected boolean ignore = true;</P> <P>   // 销毁过滤器<BR>    public void destroy() {</P> <P>        this.encoding = null;<BR>        this.filterConfig = null;</P> <P>    }</P> <P>   // qoҎ<BR>    public void doFilter(ServletRequest request, ServletResponse response,<BR>                         FilterChain chain)<BR>          throws IOException, ServletException {</P> <P>        // 如果使用qo器,忽略客户端的~码Q那么用通过qo器设定编?BR>        if (ignore || (request.getCharacterEncoding() == null)) {<BR>            String encoding = selectEncoding(request);<BR>            if (encoding != null)<BR>                request.setCharacterEncoding(encoding);<BR>        }</P> <P>        // 传送给下一个过滤器<BR>        chain.doFilter(request, response);</P> <P>    }</P> <P><BR>    // 初始化过滤器<BR>    public void init(FilterConfig filterConfig) throws ServletException {</P> <P>        this.filterConfig = filterConfig;<BR>        this.encoding = filterConfig.getInitParameter("encoding");<BR>        String value = filterConfig.getInitParameter("ignore");<BR>        if (value == null)<BR>            this.ignore = true;<BR>        else if (value.equalsIgnoreCase("true"))<BR>            this.ignore = true;<BR>        else if (value.equalsIgnoreCase("yes"))<BR>            this.ignore = true;<BR>        else<BR>            this.ignore = false;</P> <P>    }</P> <P>    // q回qo器设定的~码<BR>    protected String selectEncoding(ServletRequest request) {</P> <P>        return (this.encoding);</P> <P>    }<BR>}<BR><BR>然而在 tomcat5 中,即使用qo器,仍然可能取得qQ原因何在呢Q?BR><BR><STRONG>三、高U解x?/STRONG><BR><BR>q是因ؓQ?FONT face="Courier New">?tomcat4 ?tomcat5 中对参数的处理是不一LQ在 tomcat4 ?get ?post 的编码是一LQ所以只要在qo器中通过 request.setCharacterEncoding 讑֮一ơ就可以解决 get ?post 的问题。然而,?tomcat5 中,get ?post 的处理是分开q行?/FONT><BR><BR>?tomcat 5 中,Z解决~码问题Qtomcat 的作者作了很多努力,具体表现为在 tomcat 的配|文?server.xml 中对 Connector 元素增加了如下的配置参数Q专门用来对~码q行直接的配|?BR><BR><FONT face="Courier New"><EM><FONT style="BACKGROUND-COLOR: #ffa500">URIEncoding</FONT></EM>   用来讑֮通过 URI 传递的内容使用的编码,tomcat 用这里指定的~码对客L传送的内容q行~码?BR><BR>什么是 URI 呢?<BR>java doc 的说明中如下说明QURI 是统一资源<I>标识W?/I>Q?URL 是统一资源<I>定位W?/I>。因此,W统地说Q每?URL 都是 URIQ但不一定每?URI 都是 URL。这是因?URI q包括一个子c,即统一资源<I>名称</I> (URN)Q它命名资源但不指定如何定位资源?BR><BR>也就是说Q?FONT style="BACKGROUND-COLOR: #ffff00">我们通过 get Ҏ提交的参数实际上都是通过 uri 提交的,都由q个参数理</FONT>Q如果没有设定这个参敎ͼ?tomcat 用默认的 iso8859-1 对客L的内容进行编码?BR><BR><FONT style="BACKGROUND-COLOR: #ffa500">useBodyEncodingForURI</FONT> 使用?Body 一L~码来处?URI, q个讑֮是ؓ了与 tomcat4保持兼容Q原来在 tomcat4 ?tomcat5 中队参数的处理是不一LQ在 tomcat4 ?get ?post 的编码是一LQ所以只要在qo器中通过 request.setCharacterEncoding 讑֮一ơ就可以解决 get ?post 的问题。然而,?tomcat5 中,get ?post 的处理是分开q行的,?get 的处理通过 前面?URIEncoding q行处理Q对 post 的内容依焉过 request.setCharacterEncoding 处理Qؓ了保持兼容,有了这个设定?BR><BR><FONT style="BACKGROUND-COLOR: #ffff00">?useBodyEncodingForURI 讑֮为真后,可以通过 request.setCharacterEncoding 直接解决 get ?post 中的q问题</FONT>?BR><BR>q样Q我们可以通过?server.xml 中设?URIEncoding 来解?get Ҏ中的参数问题Q用过滤器来解?post Ҏ中的问题?BR><BR>或者也可以通过?server.xml 中设?useBodyEncodingForURI ?true Q配合过滤器来解决编码的问题?BR><BR>在这里,我强烈徏议在|站的创作过E中Q全E?utf-8 ~码来彻底解决ؕ码问题?BR><BR>具体操作如下Q?BR><FONT color=#008000>1、页面内容?utf-8 格式保存Q在面中加?<mete http-equiv="contentType" content="text/html;charst=utf-8"><BR><BR>2、服务器端的 server.xml 中设?useBodyEncodingForURI = true<BR><BR>3、用过滤器Q过滤器讑֮~码?utf-8</FONT><BR><BR><BR></FONT><BR></P><img src ="http://www.aygfsteel.com/haogj/aggbug/55017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/haogj/" target="_blank">haogj</a> 2006-06-25 22:04 <a href="http://www.aygfsteel.com/haogj/archive/2006/06/25/55017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>详细介绍在tomcat中配|数据源以及数据源的原理 http://www.aygfsteel.com/haogj/archive/2006/04/24/42893.htmlhaogjhaogjMon, 24 Apr 2006 13:21:00 GMThttp://www.aygfsteel.com/haogj/archive/2006/04/24/42893.htmlhttp://www.aygfsteel.com/haogj/comments/42893.htmlhttp://www.aygfsteel.com/haogj/archive/2006/04/24/42893.html#Feedback3http://www.aygfsteel.com/haogj/comments/commentRss/42893.htmlhttp://www.aygfsteel.com/haogj/services/trackbacks/42893.html
作?baggio785
日期Q?006-4-24
关键词:DataSource(数据?,Tomcat ,q接?/font>

前言


本文Ҏ实例详细介绍了如何在tomcat中配|数据源。网上此cL章很多,但是基本都是雷同的,而且对一些特D问题以及原理ƈ未详l阐qͼ所以想Ҏ自己的实际经验,q结合例子写一详l的文章?/font>
本文是偶的一些拙见,有不正确的地方请大家多多评论指正 ?/font>

开发环?/strong>

本文的环境:JDK1.4.2QTOMCAT5.0.28QOracle9i

JDBC?/font>

提到数据源,那就不能不说JDBC?span style="FONT-SIZE: 12pt">JDBC?/span>Java Database Connectivity的羃写。在java.sql包中提供?/span>JDBC APIQ定义了讉K数据库的接口和类。但?/span>JDBC API不能直接讉K数据库,必须依赖于数据库厂商提供?/span>JDBC驱动E序Q即JDBC DRIVER?/span>
Java.sql 中常用的接口和类如下Q?/span>
       Driver 接口?/span> DriverManager c?/span>
       Connection
       Statement
       PreparedSataement

       ResultSet

 

1     Driver 接口?/span> DriverManager c?/span>
       DriverManager
cȝ来徏立和数据库的q接以及理 JDBC 驱动E序Q常用方法如下:
Ҏ 描述
registerDriver(Driver driver) ?/span> DriverManager 中注?/span> JDBC 驱动E序
getConnection(String url,String user,String pwd) 建立和数据库的连接,q回 Connection 对象
setLoginTimeOut(int seconds) 讑֮{待数据库连接的最长时?/span>
setLogWriter(PrintWriter out) 讑֮输入数据库日至的 PrintWriter 对象
2     Connection
       Connection
代表和数据库的连接,其常用方法如下:
Ҏ 描述
getMetaData() q回数据库的 MetaData 数据?/span> MetaData 数据包含了数据库的相关信息,例如当前数据库连接的用户名、用的 JDBC 驱动E序、数据库允许的最大连接数、数据库的版本等{?/span>
createStatement() 创徏q返?/span> Statement 对象
PrepareStatement(String sql) 创徏q返?/span> prepareStatement 对象
3      Statement
       Statement
用来执行静?/span> sql 语句。例如,对于 insert ?/span> update ?/span> delete 语句Q调?/span> executeUpdate(String sql) ҎQ?/span> select 语句可以调用 executeQuery(String sql) ҎQ?/span> executeQuery(String sql) Ҏq回 ResultSet 对象?/span>
4      PrepareStatement
   PrepareStatement
用于执行动态的 sql 语句Q即允许 sql 语句中包含参数。用方法ؓQ?/span>
   String sql = “select col1 from tablename where col2=? And col3=??
   PrepareStatement perpStmt = conn.preparestatement(sql);
   perpStmt.setstring(1,col2Value);
      perpStmt.setFloat(2,col3Value);
      ResultSet rs = perpStmt.executeQuery();
5      ResultSet
ResultSet
用来表示 select 语句查询得到的记录集Q一?/span> StateMent 对象在同一时刻只能打开一?/span> ResultSet 对象。通过 ResultSet ?/span> getXXX() Ҏ来得到字D倹{?/span> ResultSet 提供?/span> getString() ?/span> getFloat() ?/span> getInt() {方法。可以通过字段的序h者字D늚名字来制定获取某个字D늚倹{例如:在上例中 getString(0),getString(col1) 都可以获得字D?/span> col1 的倹{?/span>
 
事务处理

在实际应用中Q我们会遇到同时提交多个
sql 语句Q这?/span> sql 语句要么全部成功Q要么全部失败,如果其中一条提交失败,则必L销整个事务。ؓ此, Connection cL供了 3 个控制事务的ҎQ?/span>
 
Ҏ 描述
setAutoCommit(boolen autoCommit) 讄是否自动提交事务Q默认ؓ自动提交 ?/span>
commit() 提交事务
rollback() 撤销事务
参考例子:
try{
conn.SetautoCommit(false);
stmt = conn.createstatement();
stmt.executeUpdate(“delete form table1 where col1=1?;
stmt.eecuteUpdate(“delete from table2 where col2=1?;
conn.comm.it();
}catch(Exception e){
       e.printStackTrace;
try{
              conn.rollback();
} catch(Exception e1){
       e1.printStackTrace;
}
}
通过一?/span> JSP 例子来访?/span> oracle 数据库:
<%@ page import=”java.util.*?gt;
<%@ page import=”java.sql.*?gt;
<%
try{
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
// 加蝲 oracle 驱动E序
Class.forName(“oracle.jdbc.driver.OracleDriver.?;
// 注册 oracle 驱动E序
DriverManager.regidterDriver(new oracle.jdbc.driver.OracleDriver());
// 建立数据库连?/span>
conn=DriverManager.getConnection(“jdbc:oracle:thin:@your db ip:your db port:sid?dbuser,dbpassword);
stmt = conn.createStatement();
rs = stmt.executeQuery(“select * from tablename?;
while(rs.next){
       out.print(rs.getstring(“colname?);
}
}catch(Exception e){
}
finally{
rs.close();
stmt.close();
conn.close();
}
%>

 
数据源简?/font>

JDBC2.0
提供?/span> javax.sql.DataSource 的接口,负责与数据库建立q接Q实际应用时不需要编写连接数据库代码Q直接从数据源获得数据库的连接?/span> Dataource 中事先徏立了多个数据库连接,q些数据库连接保持在数据库连接池中,当程序访问数据库Ӟ只需要从q接池从取出I闲的连接,讉K数据库结束,在将q些q接归还l连接池?/span>
DataSource 对象由容器( Tomcat Q提供,不能使用创徏实例的方法来生成 DataSource 对象Q要采用 JAVA ?/span> JNDI Q?/span> Java Nameing and Directory Interface Q?/span> java 命名和目录接口)来获?/span> DataSource 对象的引用。(另有一U说法:“其实从技术上来说Q数据源q接方式是不需要目录服务的Q我们同样可以通过序列化数据源对象直接讉K文gpȝ。这Ҏ需要明的。”感兴趣的朋友可以试试。) JNDI 是一U将对象和名字绑定的技术,对象工厂负责生出对象,q些对象都和唯一的名字相l定。程序中可以通过q个名字来获得对象的引用?/span> Tomcat ?/span> DataSource 作ؓ一U可配置?/span> JNDI 资源来处理,生成 DataSource 对象的工厂ؓ org.apache.comm.ons.dbcp.BasicDataSourceFactory ?/span>  

配置数据?/font>

配置数据源其实相当简单:
首先?/span> server.xml 中加?/span> <Resource> 元素Q打开 server.xml Q在 <Context> 中加入以下代码(?/span> oracle ZQ:
 
<Resource name="jdbc/ JNDI 名字 "
               auth="Container"
               type="javax.sql.DataSource"/>
 <ResourceParams name="jdbc/JNDI 名字 ">
    <parameter>
     <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>100</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>
 
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>
 
    <parameter>
     <name>username</name>
     <value> 用户?/span> </value>
    </parameter>
    <parameter>
     <name>password</name>
     <value> 密码 </value>
    </parameter>
 
    <parameter>
       <name>driverClassName</name>
       <value>oracle.jdbc.driver.OracleDriver</value>
    </parameter>
 
    <parameter>
      <name>url</name>
      <value>jdbc:oracle:thin:@ip: 端口 :sid </value>
    </parameter>
 </ResourceParams>
<Resource> 元素的属性如下:
属?/span> 描述
name 指定 Resource ?/span> JNDI 的名?/span>
auth 指定理 Resource ?/span> Manager Q由两个可选| Container ?/span> Application ?/span> Container 表示由容器来创徏和管?/span> Resource Q?/span> Application 表示?/span> WEB 应用来创建和理 Resource 。如果在 web application deployment descriptor 中?/span> <resource-ref> Q这个属性是必需的,如果使用 <resource-env-ref> Q这个属性是可选的?/span>
type 指定 Resource 所属的 java cd
<ResourceParams> 元素的属性如下:
属?/span> 描述
name 指定 ResourceParams ?/span> JNDI 的名字,必须?/span> Resource ?/span> name 保持一?/span>
factory 指定生成 DataSource 对象?/span> factory 的类?/span>
maxActive 指定数据库连接池中处于活动状态的数据库连接最大数目, 0 表示不受限制
maxIdle 指定数据库连接池?/span> 处于 I闲状态的数据库连接的最大数目, 0 表示不受限制
maxWait 指定数据库连接池中的数据库连接处于空闲状态的最长时_单位为毫U)Q超q这一事gQ将会抛出异常?/span> -1 表示可以无限期等待?/span>
username 指定q接数据库的用户?/span>
password 指定q接数据库的密码
driverClassName 指定q接数据库的 JDBC 驱动E序
url 指定q接数据库的 URL

其他文章说以上配|就OK了,对于web.xml的配|可有可无,其实不是q样子的?span style="FONT-SIZE: 12pt">如果?/span>web应用中访问了?/span>Servlet容器理的某?/span>JNDI ResourceQ则必须?/span>web.xml中声明对q个JNDI Resource的引用。表C源引用的元素?/span><resource-ref>,该元素加?/span><wepapp></ wepapp >中?br />

<resource-ref>
     <descryiption>DB Connection</descryiption>
<res-ref-name>jdbc/JNDI 名字 </ res-ref-name>
<res-type>javax.sql.DataSource </ res- type>
<res-auth>Container </ res- auth>
</resource-ref>

<resource-ref>
元素的属性如下:

属?/span> 描述
description Ҏ引用的资源的说明
res-ref-name 指定所引用资源?/span> JNDI 名字Q与 <Resource> 元素中的 name 属性保持一?/span>
res-type 指定所引用资源的类名字Q与 <Resource> 元素中的 type 属性保持一?/span>
res-auth 指定所引用资源?/span> Manager Q与 <Resource> 元素中的 auth 属性保持一?/span>

到这里,数据源就已经配置成功了。但是我在测试的时候除了一点小ȝQ主要原因是对DataSource的概忉|搞清楚。我是这么测试的Q写一个测试类Q然后在eclipse中进行junit试Q?/span> 捕获的异ؓQ?/span>
javax.naming.NoInitialContextException : Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initia l ?/span>
同样的代码在JSP文g中正常运行,后来M一些资料,l于扑ֈ了问题的所在了。原来DataSource是由容器QTOMCATQ提供的Q所以我的测试会抛出异常。ؓ了再ơ验证想法是否正,在jsp文g中import刚才抛出异常的类Q在q行q接数据库,l果一切正常?/span>
下面的例子是实际应用中?/span> DataSource Q在 jsp 文g中连?/span> oracle ?/span>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 </head>
<body>
<%
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource db = (DataSource)envContext.lookup("jdbc/javablogorl");
// javablogorl ?/span> <Resource> 元素?/span> name 属性的?/span>
Connection conn = db.getConnection( ); 
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM blog_systemadmin");
while(rs.next()){
       out.print(rs.getString("admin_name")+" ");
       out.print(rs.getString("admin_password")+"<br>");
}
rs.close();
stmt.close();
conn.close();
%> 
 </body>
</html>
 


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=674822



haogj 2006-04-24 21:21 发表评论
]]>
奇怪的 Java 日期http://www.aygfsteel.com/haogj/archive/2006/04/18/41746.htmlhaogjhaogjTue, 18 Apr 2006 13:04:00 GMThttp://www.aygfsteel.com/haogj/archive/2006/04/18/41746.htmlhttp://www.aygfsteel.com/haogj/comments/41746.htmlhttp://www.aygfsteel.com/haogj/archive/2006/04/18/41746.html#Feedback0http://www.aygfsteel.com/haogj/comments/commentRss/41746.htmlhttp://www.aygfsteel.com/haogj/services/trackbacks/41746.html  Calendar cal = Calendar.getInstance();
  cal.set(1999, 12, 31);
  System.out.println( cal.get(Calendar.YEAR) +"");

q三行代码的执行l果是什么?

?1999 吗?

但是它没有,l果?2000。是千年虫问题吗Q?br />
        事情比我们想象的q要p糕Q这是致命的 Date/Calendar 问题。在 Java 1.0 发布的时候,Q它唯一支持的日历计类是 Date cR由于这个类有许多的问题Q因此,?1.1 版的时候,Calendar c被d?Java 中,以纠?Date 的缺点,不幸的是Q问题更多了?br /> 
        我们习惯上将W一个月当作 1Q因?12  可以用来表示 12 月,不幸的是QDate 的月份表CZ 0 开始,因此 12 月将?11 来表C,而且 Calendar l箋延箋了这个错误。因此上面的代码月份设|ؓ?13 月,但是实际的月份只?12 个月Q代码应该抛Z个异常,通知我们发生了什么,他应该这么做Q可是,它没有,它直接认应该是下一个月Q也是 2000 q的 1 月。因此我们上面的代码输出l果?2000?br />
Date d = cal.getTime();
System.out.println( d.getDay());

再看q两行代码的l果是什么?

?31 ?

l果?1

        我们在前面将日期设ؓ?31 日,?cal.getTime() 中返回了一?Date cd的日期,q个日期也应该是 31 Qؓ什么是 1 呢?

        q是查一?JavaDoc 吧, Date.getDay q回的实际上是日期的星期敎ͼ也就是返回的l果是星期几Q而不是月份中的日期。这个g星期天开始计,从? 开始,因此Q打?1  表示 2000q?2?1日是星期一。注意一下吧Q?Calendar 的方?get( Calendar.DAY_OF_WEEK) 不知道ؓ什么返回的是基?1 开始的星期日期Q而不是基?0 开始的星期日期?br />
    以上内容取自 《Java 解惑?P144
       




haogj 2006-04-18 21:04 发表评论
]]>
վ֩ģ壺 | | | | ̫| ¯| ͤ| | ˮ| | | ˳| ͷ| | | | | | | | Ϸ| | ˮ| | ƽ| Ƕ| ˿| | | ̩| | | | ̨| | Ԫ| ˾| | ˫| ʡ| żҿ|