yooli88

          2006年4月1日 #

          java 字符串解析 轉至csdn的afgasdg

          StringTokenizer tokenizer = new StringTokenizer(number, ",");
                 
          boolean bool = true;
                 
          while (tokenizer.hasMoreTokens()) {
                     
          try {
                          Double.valueOf(tokenizer.nextToken());
                      }
          catch (Exception e) {
                          bool
          = false;
                      }
                  }
          //將字符串轉化為數組的方法
          int gv[];
            
          int i = 0;
             StringTokenizer tokenizer
          = new StringTokenizer(goodsVolume, ",, ");
                   gv
          = new int[tokenizer.countTokens()];//動態的決定數組的長度
               while (tokenizer.hasMoreTokens()) {
                  String d
          = tokenizer.nextToken();
                  gv[i]
          = Integer.valueOf(d);//將字符串轉換為整型
                  i++;
              }

          //字符串解析
              private String[] stringAnalytical(String str, String divisionChar) {
                  String string[];
                
          int i = 0;
                  StringTokenizer tokenizer
          = new StringTokenizer(str, divisionChar);
                  string
          = new String[tokenizer.countTokens()];// 動態的決定數組的長度
                   while (tokenizer.hasMoreTokens()) {
                      string[i]
          = new String();
                      string[i]
          = tokenizer.nextToken();
                      i
          ++;
                  }
                 
          return string;// 返回字符串數組
              }

          int countTokens()
                    計算在生成異常之前可以調用此 tokenizer 的 nextToken 方法的次數。
          boolean hasMoreElements()
                    返回與 hasMoreTokens 方法相同的值。
          boolean hasMoreTokens()
                    測試此 tokenizer 的字符串中是否還有更多的可用標記。
          Object nextElement()
                    除了其聲明返回值是 Object 而不是 String 之外,它返回與 nextToken 方法相同的值。
          String nextToken()
                    返回此 string tokenizer 的下一個標記。
          String nextToken(String delim)
                    返回此 string tokenizer 的字符串中的下一個標記。




          public class StringAnalytical {

             
          // 字符串解析,將字符串轉根據分割符換成字符串數組
              private String[] stringAnalytical(String string, char c) {
                 
          int i = 0;
                 
          int count = 0;

                 
          if (string.indexOf(c) == -1)
                     
          return new String[] { string };// 如果不含分割符則返回字符本身
                  char[] cs = string.toCharArray();
                 
          int length = cs.length;
                 
          for (i = 1; i < length - 1; i++) {// 過濾掉第一個和最后一個是分隔符的情況
                      if (cs[i] == c) {
                          count
          ++;// 得到分隔符的個數
                      }
                  }
                  String[] strArray
          = new String[count + 1];
                 
          int k = 0, j = 0;
                  String str
          = string;
                 
          if ((k = str.indexOf(c)) == 0)// 去掉第一個字符是分隔符的情況
                      str = str.substring(k + 1);
                 
          if (str.indexOf(c) == -1)// 檢測是否含分隔符,如果不含則返回字符串
                      return new String[] { str };
                 
          while ((k = str.indexOf(c)) != -1) {// 字符串含分割符的時候
                      strArray[j++] = str.substring(0, k);
                      str
          = str.substring(k + 1);
                     
          if ((k = str.indexOf(c)) == -1 && str.length() > 0)
                          strArray[j
          ++] = str.substring(0);
                  }
                 
          return strArray;
              }

             
          public void printString(String[] s) {
                  System.out.println(
          "*********************************");
                 
          for (String str : s)
                      System.out.println(str);
              }

             
          public static void main(String[] args) {
                  String[] str
          = null;
                  StringAnalytical string
          = new StringAnalytical();
                  str
          = string.stringAnalytical("1aaa", '@');
                  string.printString(str);
                  str
          = string.stringAnalytical("2aaa@", '@');
                  string.printString(str);
                  str
          = string.stringAnalytical("@3aaa", '@');
                  string.printString(str);
                  str
          = string.stringAnalytical("4aaa@bbb", '@');
                  string.printString(str);
                  str
          = string.stringAnalytical("@5aaa@bbb", '@');
                  string.printString(str);
                  str
          = string.stringAnalytical("6aaa@bbb@", '@');
                  string.printString(str);
                  str
          = string.stringAnalytical("@7aaa@", '@');
                  string.printString(str);
                  str
          = string.stringAnalytical("@8aaa@bbb@", '@');
                  string.printString(str);
                  str
          = string.stringAnalytical("@9aaa@bbb@ccc", '@');
                  string.printString(str);
                  str
          = string.stringAnalytical("@10aaa@bbb@ccc@eee", '@');
                  string.printString(str);
              }
          }

          posted @ 2011-04-06 18:54 迷茫在java的世界里 閱讀(364) | 評論 (0)編輯 收藏

          java日期處理bean 轉至csdn的afgasdg

               摘要: import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.regex.Pattern; import o...  閱讀全文

          posted @ 2011-04-06 18:52 迷茫在java的世界里 閱讀(207) | 評論 (0)編輯 收藏

          從 csdn看到的一些很有用的代碼 灰常感謝afgasdg了 轉帖請注明afgasdg

          java訪問xml文件
          Java code

          import java.io.*;
          import javax.xml.parsers.DocumentBuilder;
          import javax.xml.parsers.DocumentBuilderFactory;
          import org.w3c.dom.Document;
          import org.w3c.dom.Element;
          import org.w3c.dom.Node;
          import org.w3c.dom.NodeList;

          public class xmljava
          {

          public static void main(String args[])
              {   
                    Element element
          =null;
                    File f
          =new File("a.xml");
                    DocumentBuilder db
          =null;        //documentBuilder為抽象不能直接實例化(將XML文件轉換為DOM文件)
                    DocumentBuilderFactory dbf=null;
               
          try{
                  
                    dbf
          = DocumentBuilderFactory.newInstance(); //返回documentBuilderFactory對象  
                    db =dbf.newDocumentBuilder();//返回db對象用documentBuilderFatory對象獲得返回documentBuildr對象

                    Document dt
          = db.parse(f); //得到一個DOM并返回給document對象
                    element = dt.getDocumentElement();//得到一個elment根元素
                   
                    System.out.println(
          "根元素:"+element.getNodeName()); //獲得根節點

                  NodeList childNodes
          =element.getChildNodes() ;    // 獲得根元素下的子節點
             
               
          for (int i = 0; i < childNodes.getLength(); i++)     // 遍歷這些子節點

             {      
                 Node node1
          = childNodes.item(i); // childNodes.item(i); 獲得每個對應位置i的結點

              
          if ("Account".equals(node1.getNodeName()))
                {
                                 
          // 如果節點的名稱為"Account",則輸出Account元素屬性type
                System.out.println("\r\n找到一篇賬號. 所屬區域: "   + node1.getAttributes().getNamedItem        ("type").getNodeValue() + ". ");
                NodeList nodeDetail
          = node1.getChildNodes();   // 獲得<Accounts>下的節點
                for (int j = 0; j < nodeDetail.getLength(); j++)
                 {  
          // 遍歷<Accounts>下的節點
                    Node detail = nodeDetail.item(j);    // 獲得<Accounts>元素每一個節點
                      if ("code".equals(detail.getNodeName()))   // 輸出code
                      System.out.println("卡號: " + detail.getTextContent());
                      
          else if ("pass".equals(detail.getNodeName())) // 輸出pass
                          System.out.println("密碼: " + detail.getTextContent());
                      
          else if ("name".equals(detail.getNodeName())) // 輸出name
                          System.out.println("姓名: " + detail.getTextContent());
                      
          else if ("money".equals(detail.getNodeName())) // 輸出money
                           System.out.println("余額: "+ detail.getTextContent());
               
                  }
                }

              }
          }

          catch(Exception e){System.out.println(e);}
             
          }
          }


          XML code
          <?xml version="1.0" encoding="gbk"?> <Accounts> <Account type="by0003"> <code>100001</code> <pass>123</pass> <name>李四</name> <money>1000000.00</money> </Account> <Account type="hz0001"> <code>100002</code> <pass>123</pass> <name>張三</name> <money>1000.00</money> </Account> </Accounts>

          posted @ 2011-04-06 18:49 迷茫在java的世界里 閱讀(190) | 評論 (0)編輯 收藏

          [轉帖]在數組里隨機取不重復的數

          方法沒有確認
          import java.util.*;
          public class Lottery {

              public static void main(String[] args) {
                  int[] data1 = {3, 5, 6, 8, 9, 15, 18, 24, 27, 30, 32};
                  Random r = new Random();
                  int irdm = 0;
                  for(int i = 0; i < 7; i ++) {
                      irdm = r.nextInt(11 - i);
                      System.out.println(data1[irdm]);
                      for(int j = irdm; j < 11 - i - 1; j ++) {
                          data1[j] = data1[j + 1];
                      }
                  }
              }
          }
          方法沒有確認不知道是否可行public class AAAAA {
                  public static void main(String[] args) {

                          int i = 0;
                          int j = 0;
                          int[] temp = new int[20];
                          for (j = 0; j < temp.length; j++) {
                                  temp[j] = Math.random() * 100  + 1;
                                  System.out.print(temp[j] + ",";
                          }
                          
                          HashSet hh = new HashSet();
                          while (hh.size() < 7) {
                                  int aa = (int) (Math.random() * 100 + 1);
                                  hh.add(aa);
                          }
                          System.out.println(hh.size());
                          Iterator ii = hh.iterator();
                          while (ii.hasNext()) {
                                  System.out.print(ii.next() + ",";
                          }
                  }

          }

          java從指定數組中取不重復的7個隨機數

          如何用java從指定數組中取不重復的7個隨機數,以下是我寫的代碼,但是是有重復的,哪位大俠賜教一下如何使用Random類的種子,幫我實現不重復的隨機數。。。
          import java.util.*;
          public class Lottery {

              public static void main(String[] args)
              {
                  int[] data1 = {3,5,6,8,9,15,18,24,27,30,32};
                  Random   r=new   Random();
                  StringBuffer   str1=new   StringBuffer();
                  for(int   i=0;i<6;i++)
                  {
                  str1.append(data1[r.nextInt(11)]);
                   }
                   System.out.println(str1);
             }
          }

          posted @ 2011-01-31 16:57 迷茫在java的世界里 閱讀(447) | 評論 (0)編輯 收藏

          字符排序 很好用的代碼

           char []a={'v','f',',','e','f'};
                  Arrays.sort(a);
                 
          for(char b:a)
                  {
                      System.out.println(b);
                  }

          posted @ 2008-04-24 12:20 迷茫在java的世界里 閱讀(143) | 評論 (0)編輯 收藏

          MVNForumGlobal

          /*
           * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/MVNForumGlobal.java,v 1.17 2005/01/18 11:52:08 minhnn Exp $
           * $Author: minhnn $
           * $Revision: 1.17 $
           * $Date: 2005/01/18 11:52:08 $
           *
           * ====================================================================
           *
           * Copyright (C) 2002-2005 by MyVietnam.net
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * as published by the Free Software Foundation; either version 2
           * of the License, or any later version.
           *
           * All copyright notices regarding mvnForum MUST remain intact
           * in the scripts and in the outputted HTML.
           * The "powered by" text/logo with a link back to
           * http://www.mvnForum.com and http://www.MyVietnam.net in the
           * footer of the pages MUST remain visible when the pages
           * are viewed on the internet or intranet.
           *
           * This program is distributed in the hope that it will be useful,
           * but WITHOUT ANY WARRANTY; without even the implied warranty of
           * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
           * GNU General Public License for more details.
           *
           * You should have received a copy of the GNU General Public License
           * along with this program; if not, write to the Free Software
           * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
           *
           * Support can be obtained from support forums at:
           * http://www.mvnForum.com/mvnforum/index
           *
           * Correspondence and Marketing Questions can be sent to:
           * info@MyVietnam.net
           *
           * @author: Minh Nguyen  minhnn@MyVietnam.net
           * @author: Mai  Nguyen  mai.nh@MyVietnam.net
           */
          package com.mvnforum;

          public class MVNForumGlobal {

              private MVNForumGlobal() {
              }

          /*************************************************************************
           * NOTE: below constants can be changed for each build,
           *       these constant MUST NOT break the compatibility
           *************************************************************************/
              public final static String IMAGE_DIR                 = "/mvnplugin/mvnforum/images";

              public final static String EMOTION_DIR               = "/mvnplugin/mvnforum/images/emotion/";

              public final static String CSS_FULLPATH              = "/mvnplugin/mvnforum/css/style.css";

              public final static String LOGO_FULLPATH             = "/mvnplugin/mvnforum/images/logo.gif";

              // Note that we cannot put / at the end because getRealPath will remove it in Tomcat 4.1.7 :((
              public final static String UPLOADED_AVATAR_DIR       = "/mvnplugin/mvnforum/upload/memberavatars";

              public final static String UPLOADED_COMPANY_DIR      = "/mvnplugin/mvnforum/upload/company";

              public final static String COMPANY_DEFAULT_CSS_PATH  = "/mvnplugin/mvnforum/upload/company/style.css";

              public final static String COMPANY_DEFAULT_LOGO_PATH = "/mvnplugin/mvnforum/upload/company/logo.gif";

              public final static String RESOURCE_BUNDLE_NAME      = "mvnForum_i18n";

              /** value to control the flood prevention. Note value from 0 to 999 is belong to mvnCore */
              public final static Integer FLOOD_ID_NEW_POST       = new Integer(1000);
              public final static Integer FLOOD_ID_NEW_MEMBER     = new Integer(1001);
              public final static Integer FLOOD_ID_LOGIN          = new Integer(1002);
              public final static Integer FLOOD_ID_NEW_MESSAGE    = new Integer(1003);

              /** The maximum length of the email in database */
              public final static int MAX_MEMBER_EMAIL_LENGTH = 60;

              /** The maximum length of the member login name in database */
              public final static int MAX_MEMBER_LOGIN_LENGTH = 30;

              public final static String TEMPLATE_SENDACTIVATECODE_PREFIX  = "sendactivemailtemplate";
              public final static String TEMPLATE_SENDACTIVATECODE_SUBJECT = "sendactivemailtemplate-subject.ftl";
              public final static String TEMPLATE_SENDACTIVATECODE_BODY    = "sendactivemailtemplate-body.ftl";

              public final static String TEMPLATE_FORGOTPASSWORD_PREFIX    = "forgotpasswordtemplate";
              public final static String TEMPLATE_FORGOTPASSWORD_SUBJECT   = "forgotpasswordtemplate-subject.ftl";
              public final static String TEMPLATE_FORGOTPASSWORD_BODY      = "forgotpasswordtemplate-body.ftl";

              public final static String TEMPLATE_WATCHMAIL_PREFIX         = "watchmailtemplate";
              public final static String TEMPLATE_WATCHMAIL_SUBJECT        = "watchmailtemplate-subject.ftl";
              public final static String TEMPLATE_WATCHMAIL_BODY           = "watchmailtemplate-body.ftl";

              // Constant for Company module
              public final static String COMPANY_GROUP_FREFIX              = "CompanyGroup: ";
          }

          posted @ 2007-09-11 11:33 迷茫在java的世界里 閱讀(235) | 評論 (0)編輯 收藏

          MVNForumFactoryConfig

          /*
           * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/MVNForumFactoryConfig.java,v 1.12 2005/01/18 11:52:08 minhnn Exp $
           * $Author: minhnn $
           * $Revision: 1.12 $
           * $Date: 2005/01/18 11:52:08 $
           *
           * ====================================================================
           *
           * Copyright (C) 2002-2005 by MyVietnam.net
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * as published by the Free Software Foundation; either version 2
           * of the License, or any later version.
           *
           * All copyright notices regarding mvnForum MUST remain intact
           * in the scripts and in the outputted HTML.
           * The "powered by" text/logo with a link back to
           * http://www.mvnForum.com and http://www.MyVietnam.net in the
           * footer of the pages MUST remain visible when the pages
           * are viewed on the internet or intranet.
           *
           * This program is distributed in the hope that it will be useful,
           * but WITHOUT ANY WARRANTY; without even the implied warranty of
           * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
           * GNU General Public License for more details.
           *
           * You should have received a copy of the GNU General Public License
           * along with this program; if not, write to the Free Software
           * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
           *
           * Support can be obtained from support forums at:
           * http://www.mvnForum.com/mvnforum/index
           *
           * Correspondence and Marketing Questions can be sent to:
           * info@MyVietnam.net
           *
           * @author: Luis Miguel Hernanz <luish@germinus.com>
           * @author: Minh Nguyen  minhnn@MyVietnam.net
           */
          package com.mvnforum;

          import java.io.File;

          import net.myvietnam.mvncore.configuration.DOM4JConfiguration;
          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;
          import net.myvietnam.mvncore.util.FileUtil;

          /**
           * Class that loads and makes accesible the factory configuration.
           *
           * @author <a href="luish@germinus.com">Luis Miguel Hernanz</a>
           * @version $Revision: 1.12 $
           */
          public class MVNForumFactoryConfig {

              private static Log log = LogFactory.getLog(MVNForumFactoryConfig.class);

              private static final String OPTION_FILE_NAME     = "mvnforum.xml";

              private static String authenticatorClassName     = null;
              private static String memberManagerClassName     = "com.mvnforum.db.jdbc.MemberDAOImplJDBC";
              private static String onlineUserFactoryClassName = "com.mvnforum.auth.OnlineUserFactoryImpl";
              private static String requestProcessorClassName  = "com.mvnforum.RequestProcessorDefault";
              private static String luceneAnalyzerClassName    = "org.apache.lucene.analysis.standard.StandardAnalyzer";

              public static String getMemberManagerClassName() {
                  return memberManagerClassName;
              }

              public static String getOnlineUserFactoryClassName() {
                  return onlineUserFactoryClassName;
              }

              public static String getAuthenticatorClassName() {
                  return authenticatorClassName;
              }

              public static String getRequestProcessorClassName() {
                  return requestProcessorClassName;
              }

              public static String getLuceneAnalyzerClassName() {
                  return luceneAnalyzerClassName;
              }

              static {
                  try {
                      String strPathName      = FileUtil.getServletClassesPath();
                      String configFilename   = strPathName + OPTION_FILE_NAME;
                      DOM4JConfiguration conf = new DOM4JConfiguration(new File(configFilename));

                      memberManagerClassName     = conf.getString("mvnforumfactoryconfig.member_implementation", memberManagerClassName);
                      onlineUserFactoryClassName = conf.getString("mvnforumfactoryconfig.onlineuser_implementation", onlineUserFactoryClassName);
                      authenticatorClassName     = conf.getString("mvnforumfactoryconfig.authenticator_implementation", authenticatorClassName);
                      requestProcessorClassName  = conf.getString("mvnforumfactoryconfig.requestprocessor_implementation", requestProcessorClassName);
                      luceneAnalyzerClassName    = conf.getString("mvnforumfactoryconfig.lucene_analyzer_implementation", luceneAnalyzerClassName);
                  } catch (Exception e) {
                      log.error("Error loading the factory properties", e);
                  }
              }
          }

          posted @ 2007-09-11 11:32 迷茫在java的世界里 閱讀(219) | 評論 (0)編輯 收藏

          MVNForumContextListener

          /*
           * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/MVNForumContextListener.java,v 1.6 2005/01/18 11:52:08 minhnn Exp $
           * $Author: minhnn $
           * $Revision: 1.6 $
           * $Date: 2005/01/18 11:52:08 $
           *
           * ====================================================================
           *
           * Copyright (C) 2002-2005 by MyVietnam.net
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * as published by the Free Software Foundation; either version 2
           * of the License, or any later version.
           *
           * All copyright notices regarding mvnForum MUST remain intact
           * in the scripts and in the outputted HTML.
           * The "powered by" text/logo with a link back to
           * http://www.mvnForum.com and http://www.MyVietnam.net in the
           * footer of the pages MUST remain visible when the pages
           * are viewed on the internet or intranet.
           *
           * This program is distributed in the hope that it will be useful,
           * but WITHOUT ANY WARRANTY; without even the implied warranty of
           * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
           * GNU General Public License for more details.
           *
           * You should have received a copy of the GNU General Public License
           * along with this program; if not, write to the Free Software
           * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
           *
           * Support can be obtained from support forums at:
           * http://www.mvnForum.com/mvnforum/index
           *
           * Correspondence and Marketing Questions can be sent to:
           * info@MyVietnam.net
           *
           * @author: Minh Nguyen  minhnn@MyVietnam.net
           * @author: Mai  Nguyen  mai.nh@MyVietnam.net
           */
          package com.mvnforum;

          import java.sql.Timestamp;

          import javax.servlet.*;

          import net.myvietnam.mvncore.util.DateUtil;
          import net.myvietnam.mvncore.util.FileUtil;
          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;

          public class MVNForumContextListener implements ServletContextListener {

              private static Log log = LogFactory.getLog(MVNForumContextListener.class);

              private static MVNForumContextListener instance;

              private Timestamp startTimestamp;

              /**
               * The servlet context with which we are associated.
               */
              private ServletContext context = null;

              public MVNForumContextListener() {
                  instance = this;
              }


              /**
               * Notification that the web application is ready to process requests.
               *
               * @param event ServletContextEvent
               */
              public void contextInitialized(ServletContextEvent event) {
                  log.debug("contextInitialized");

                  this.context = event.getServletContext();

                  String realPath = context.getRealPath("/WEB-INF/classes");// Add '/' before WEB-INF to fix the Oracle 10G bug
                  FileUtil.setServletClassesPath(realPath);
                  startTimestamp = DateUtil.getCurrentGMTTimestamp();
              }


              /**
               * Notification that the servlet context is about to be shut down.
               *
               * @param event ServletContextEvent
               */
              public void contextDestroyed(ServletContextEvent event) {
                  log.debug("contextDestroyed");

                  this.context = null;
                  instance = null;
              }

              // below are add on method

              public static MVNForumContextListener getInstance() {
                  return instance;
              }

              public Timestamp getStartTimestamp() {
                  return startTimestamp;
              }

          }

          posted @ 2007-09-11 11:32 迷茫在java的世界里 閱讀(204) | 評論 (0)編輯 收藏

          MVNForumConstant

          /*
           * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/MVNForumConstant.java,v 1.8 2005/01/18 11:52:08 minhnn Exp $
           * $Author: minhnn $
           * $Revision: 1.8 $
           * $Date: 2005/01/18 11:52:08 $
           *
           * ====================================================================
           *
           * Copyright (C) 2002-2005 by MyVietnam.net
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * as published by the Free Software Foundation; either version 2
           * of the License, or any later version.
           *
           * All copyright notices regarding mvnForum MUST remain intact
           * in the scripts and in the outputted HTML.
           * The "powered by" text/logo with a link back to
           * http://www.mvnForum.com and http://www.MyVietnam.net in the
           * footer of the pages MUST remain visible when the pages
           * are viewed on the internet or intranet.
           *
           * This program is distributed in the hope that it will be useful,
           * but WITHOUT ANY WARRANTY; without even the implied warranty of
           * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
           * GNU General Public License for more details.
           *
           * You should have received a copy of the GNU General Public License
           * along with this program; if not, write to the Free Software
           * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
           *
           * Support can be obtained from support forums at:
           * http://www.mvnForum.com/mvnforum/index
           *
           * Correspondence and Marketing Questions can be sent to:
           * info@MyVietnam.net
           *
           * @author: Minh Nguyen  minhnn@MyVietnam.net
           * @author: Mai  Nguyen  mai.nh@MyVietnam.net
           * @author: Igor Manic   imanic@users.sourceforge.net
           */
          package com.mvnforum;

          public final class MVNForumConstant {

              /** Cannot instantiate. */
              private MVNForumConstant() {
              }

          /*************************************************************************
           * NOTE: below constants MUST NOT be changed IN ALL CASES,
           *       or it will break the compatibility
           *************************************************************************/

              /** Guest/anonymous site visitor. */
              public static final int MEMBER_ID_OF_GUEST             = 0;
              /** System administrator. */
              public static final int MEMBER_ID_OF_ADMIN             = 1;
              /**
               * The highest reserved MemberID.
               * All IDs from 0 through this value should not be used for "regular" members.
               */
              public static final int LAST_RESERVED_MEMBER_ID        = 1;
              /* IMPORTANT: When we have a group without group owner, GroupOwnerID is set to 0.
               * Similiar is for other IDs in the database - 0 means there is no reference.
               * Also, the other reason why MemberID=0 should not be used for Guest is
               * that DBMS could refuse to insert a record with 0 in that field, since it's
               * marked as non-null autoincrement primary key.
               */

              /** Unused GroupID. */
              public static final int GROUP_ID_UNUSED0               = 0;
              /**
               * Unused GroupID. In the previous versions of mvnForum it was used for some
               * special purposes, but should not be used anymore.
               */
              public static final int GROUP_ID_OF_GUEST              = 1;
              /** "Registered Members" virtual group. All members are listed in this group. */
              public static final int GROUP_ID_OF_REGISTERED_MEMBERS = 2;
              /**
               * The highest reserved GroupID.
               * All IDs from 0 through this value should not be used for "regular" groups.
               */
              public static final int LAST_RESERVED_GROUP_ID         = 2;

              /** "Inbox" message folder created by default for each member. */
              public static final String MESSAGE_FOLDER_INBOX        = "Inbox";
              /** "Sent" message folder created by default for each member. */
              public static final String MESSAGE_FOLDER_SENT         = "Sent";
              /** "Draft" message folder created by default for each member. */
              public static final String MESSAGE_FOLDER_DRAFT        = "Draft";
              /** "Trash" message folder created by default for each member. */
              public static final String MESSAGE_FOLDER_TRASH        = "Trash";

              public static final String dtdschemaDecl="<!DOCTYPE mvnforum SYSTEM \"http://www.mvnforum.com/dtd/mvnforum_1_0_rc2.dtd\">";

              public static final String VN_TYPER_MODE = "mvnforum.vntypermode";
          }

          posted @ 2007-09-11 11:31 迷茫在java的世界里 閱讀(199) | 評論 (0)編輯 收藏

          MVNForumConfig

               摘要: /*  * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/MVNForumConfig.java,v 1.75 2005/01/29 19:29:26 minhnn Exp $  * $Author: minhnn $  * $Revision: 1.75 $  * $Date: 2005/...  閱讀全文

          posted @ 2007-09-11 11:31 迷茫在java的世界里 閱讀(527) | 評論 (0)編輯 收藏

          ManagerFactory

          /*
           * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/ManagerFactory.java,v 1.6 2005/01/18 11:52:08 minhnn Exp $
           * $Author: minhnn $
           * $Revision: 1.6 $
           * $Date: 2005/01/18 11:52:08 $
           *
           * ====================================================================
           *
           * Copyright (C) 2002-2005 by MyVietnam.net
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * as published by the Free Software Foundation; either version 2
           * of the License, or any later version.
           *
           * All copyright notices regarding mvnForum MUST remain intact
           * in the scripts and in the outputted HTML.
           * The "powered by" text/logo with a link back to
           * http://www.mvnForum.com and http://www.MyVietnam.net in the
           * footer of the pages MUST remain visible when the pages
           * are viewed on the internet or intranet.
           *
           * This program is distributed in the hope that it will be useful,
           * but WITHOUT ANY WARRANTY; without even the implied warranty of
           * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
           * GNU General Public License for more details.
           *
           * You should have received a copy of the GNU General Public License
           * along with this program; if not, write to the Free Software
           * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
           *
           * Support can be obtained from support forums at:
           * http://www.mvnForum.com/mvnforum/index
           *
           * Correspondence and Marketing Questions can be sent to:
           * info@MyVietnam.net
           *
           * @author: Luis Miguel Hernanz <luish@germinus.com>
           * @author: Minh Nguyen  minhnn@MyVietnam.net
           */
          package com.mvnforum;

          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;
          import com.mvnforum.auth.Authenticator;
          import com.mvnforum.auth.OnlineUserFactory;

          /**
           * Instance that returns the right implementation for the different
           * parts of the mvnforum system.
           *
           * @author <a href="luish@germinus.com">Luis Miguel Hernanz</a>
           * @version $Revision: 1.6 $
           */
          // @todo : split this class to new class DAOFactory
          public class ManagerFactory {

              private static Log log = LogFactory.getLog(ManagerFactory.class);

              /**
               * Creates a new <code>ManagerFactory</code> instance.
               */
              protected ManagerFactory() {}

              private static OnlineUserFactory onlineUserFactory = null;
              private static Authenticator authenticator = null;
              private static RequestProcessor requestProcessor = null;

              public static synchronized OnlineUserFactory getOnlineUserFactory() {
                  if (onlineUserFactory == null) {
                      try {
                          Class c = Class.forName(MVNForumFactoryConfig.getOnlineUserFactoryClassName());
                          onlineUserFactory = (OnlineUserFactory) c.newInstance();
                          log.info("onlineUserFactory = " + onlineUserFactory);
                      } catch (Exception e) {
                          log.error("Error returning the online user factory.", e);
                          throw new RuntimeException(e.getMessage());
                      }
                  }
                  return onlineUserFactory;
              }

              public static synchronized Authenticator getAuthenticator() {
                  try {
                      String authenticatorClass = MVNForumFactoryConfig.getAuthenticatorClassName();
                      if ((null != authenticatorClass) && !authenticatorClass.trim().equals("")) {
                          log.debug("Using the authenticator: " + authenticatorClass);
                          if (authenticator == null) {
                              Class c = Class.forName(authenticatorClass);
                              authenticator = (Authenticator) c.newInstance();
                              log.info("authenticator = " + authenticator);
                          }
                          return authenticator;
                      }
                  } catch (Exception e){
                      log.error("Error getting the authentication object", e);
                  }
                  return null;
              }

              public static synchronized RequestProcessor getRequestProcessor() {
                  if (requestProcessor == null) {
                      try {
                          Class c = Class.forName(MVNForumFactoryConfig.getRequestProcessorClassName());
                          requestProcessor = (RequestProcessor) c.newInstance();
                          log.info("requestProcessor = " + requestProcessor);
                      } catch (Exception e) {
                          // This should never happen
                          log.error("Error returning the requestProcessor.", e);
                          throw new RuntimeException(e.getMessage());
                      }
                  }
                  return requestProcessor;
              }
          }

          posted @ 2007-09-11 11:30 迷茫在java的世界里 閱讀(160) | 評論 (0)編輯 收藏

          URLMap

          /*
           * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/URLMap.java,v 1.3 2005/01/18 11:52:08 minhnn Exp $
           * $Author: minhnn $
           * $Revision: 1.3 $
           * $Date: 2005/01/18 11:52:08 $
           *
           * ====================================================================
           *
           * Copyright (C) 2002-2005 by MyVietnam.net
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * as published by the Free Software Foundation; either version 2
           * of the License, or any later version.
           *
           * All copyright notices regarding mvnForum MUST remain intact
           * in the scripts and in the outputted HTML.
           * The "powered by" text/logo with a link back to
           * http://www.mvnForum.com and http://www.MyVietnam.net in the
           * footer of the pages MUST remain visible when the pages
           * are viewed on the internet or intranet.
           *
           * This program is distributed in the hope that it will be useful,
           * but WITHOUT ANY WARRANTY; without even the implied warranty of
           * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
           * GNU General Public License for more details.
           *
           * You should have received a copy of the GNU General Public License
           * along with this program; if not, write to the Free Software
           * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
           *
           * Support can be obtained from support forums at:
           * http://www.mvnForum.com/mvnforum/index
           *
           * Correspondence and Marketing Questions can be sent to:
           * info@MyVietnam.net
           *
           * @author: Minh Nguyen  minhnn@MyVietnam.net
           * @author: Mai  Nguyen  mai.nh@MyVietnam.net
           */
          package com.mvnforum;

          public class URLMap {
              private String response = null;

              public URLMap() {
              }

              public void setResponse(String newvalue) {
                  response = newvalue;
              }

              public String getResponse() {
                  return response;
              }
          }

          posted @ 2007-09-11 11:29 迷茫在java的世界里 閱讀(175) | 評論 (0)編輯 收藏

          RequestProcessorDefault

          /*
           * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/RequestProcessorDefault.java,v 1.3 2005/01/18 11:52:08 minhnn Exp $
           * $Author: minhnn $
           * $Revision: 1.3 $
           * $Date: 2005/01/18 11:52:08 $
           *
           * ====================================================================
           *
           * Copyright (C) 2002-2005 by MyVietnam.net
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * as published by the Free Software Foundation; either version 2
           * of the License, or any later version.
           *
           * All copyright notices regarding mvnForum MUST remain intact
           * in the scripts and in the outputted HTML.
           * The "powered by" text/logo with a link back to
           * http://www.mvnForum.com and http://www.MyVietnam.net in the
           * footer of the pages MUST remain visible when the pages
           * are viewed on the internet or intranet.
           *
           * This program is distributed in the hope that it will be useful,
           * but WITHOUT ANY WARRANTY; without even the implied warranty of
           * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
           * GNU General Public License for more details.
           *
           * You should have received a copy of the GNU General Public License
           * along with this program; if not, write to the Free Software
           * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
           *
           * Support can be obtained from support forums at:
           * http://www.mvnForum.com/mvnforum/index
           *
           * Correspondence and Marketing Questions can be sent to:
           * info@MyVietnam.net
           *
           * @author: Luis Miguel Hernanz <luish@germinus.com>
           * @author: Minh Nguyen  minhnn@MyVietnam.net
           */
          package com.mvnforum;

          import java.io.UnsupportedEncodingException;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;

          /**
           * Empty implementation of the RequestProcessor interface.
           *
           * @author <a href="luish@germinus.com">Luis Miguel Hernanz</a>
           * @version $Revision: 1.3 $
           */
          public class RequestProcessorDefault implements RequestProcessor {

              private static Log log = LogFactory.getLog(RequestProcessorDefault.class);

              /**
               * This is the first method called in the request processing. This
               * method returns always <code>null</code>.
               *
               * @param request a <code>HttpServletRequest</code> value
               * @param response a <code>HttpServletResponse</code> value
               */
              public String preLogin(HttpServletRequest request, HttpServletResponse response) {
                  try {
                      request.setCharacterEncoding("utf-8");
                  } catch (UnsupportedEncodingException e){
                      log.warn("Error setting the character encoding from the request", e);
                  }
                  return null;
              }

              /**
               * The method receives the user request just before the
               * authentication has been checked. This method always returns
               * <code>null</code>.
               *
               * @param request a <code>HttpServletRequest</code> value
               * @param response a <code>HttpServletResponse</code> value
               */
              public String preProcess(HttpServletRequest request, HttpServletResponse response) {
                  return null;
              }

              /**
               * This method is called just before the call to the final request
               * dispatcher forward. This method always returns
               * <code>responseURI</code>.
               *
               * @param request a <code>HttpServletRequest</code> value
               * @param response a <code>HttpServletResponse</code> value
               * @param responseURI the path to which the control will be
               * forwarded after this method has finished.
               */
              public String postProcess(HttpServletRequest request, HttpServletResponse response, String responseURI) {
                  return responseURI;
              }
          }

          posted @ 2007-09-11 11:29 迷茫在java的世界里 閱讀(112) | 評論 (0)編輯 收藏

          RequestProcessor

          /*
           * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/RequestProcessor.java,v 1.3 2005/01/18 11:52:08 minhnn Exp $
           * $Author: minhnn $
           * $Revision: 1.3 $
           * $Date: 2005/01/18 11:52:08 $
           *
           * ====================================================================
           *
           * Copyright (C) 2002-2005 by MyVietnam.net
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * as published by the Free Software Foundation; either version 2
           * of the License, or any later version.
           *
           * All copyright notices regarding mvnForum MUST remain intact
           * in the scripts and in the outputted HTML.
           * The "powered by" text/logo with a link back to
           * http://www.mvnForum.com and http://www.MyVietnam.net in the
           * footer of the pages MUST remain visible when the pages
           * are viewed on the internet or intranet.
           *
           * This program is distributed in the hope that it will be useful,
           * but WITHOUT ANY WARRANTY; without even the implied warranty of
           * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
           * GNU General Public License for more details.
           *
           * You should have received a copy of the GNU General Public License
           * along with this program; if not, write to the Free Software
           * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
           *
           * Support can be obtained from support forums at:
           * http://www.mvnForum.com/mvnforum/index
           *
           * Correspondence and Marketing Questions can be sent to:
           * info@MyVietnam.net
           *
           * @author: Luis Miguel Hernanz <luish@germinus.com>
           * @author: Minh Nguyen  minhnn@MyVietnam.net
           */
          package com.mvnforum;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          /**
           * Interface to hook additional preprocessing to the user request.
           * This interface is meatn as extension points to ease the integration
           * of the forum system with external systems.
           *
           * @author <a href="luish@germinus.com">Luis Miguel Hernanz</a>
           * @version $Revision: 1.3 $
           */
          public interface RequestProcessor {

              /**
               * This is the first method called in the request processing.
               *
               * @param request a <code>HttpServletRequest</code> value
               * @param response a <code>HttpServletResponse</code> value
               * @return the new responseURI to redirect to. The control will be
               * forwarded to this page (if responseURI is an jsp). No furher
               * processing will take place.
               */
              public String preLogin(HttpServletRequest request, HttpServletResponse response);

              /**
               * The method receives teh user request just before the
               * authentication has been checked.
               *
               * @param request a <code>HttpServletRequest</code> value
               * @param response a <code>HttpServletResponse</code> value
               * @return the new responseURI to redirect to.
               */
              public String preProcess(HttpServletRequest request, HttpServletResponse response);

              /**
               * This method is called just before the call to the final request
               * dispatcher forward.
               *
               * @param request a <code>HttpServletRequest</code> value
               * @param response a <code>HttpServletResponse</code> value
               * @param responseURI the path to which the control will be
               * forwarded after this method has finished.
               * @return the new responseURI to redirect to.
               */
              public String postProcess(HttpServletRequest request, HttpServletResponse response, String responseURI);

          }

          posted @ 2007-09-11 11:28 迷茫在java的世界里 閱讀(129) | 評論 (0)編輯 收藏

          MyUtil

          /*
           * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/MyUtil.java,v 1.30 2005/01/29 11:58:09 minhnn Exp $
           * $Author: minhnn $
           * $Revision: 1.30 $
           * $Date: 2005/01/29 11:58:09 $
           *
           * ====================================================================
           *
           * Copyright (C) 2002-2005 by MyVietnam.net
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * as published by the Free Software Foundation; either version 2
           * of the License, or any later version.
           *
           * All copyright notices regarding mvnForum MUST remain intact
           * in the scripts and in the outputted HTML.
           * The "powered by" text/logo with a link back to
           * http://www.mvnForum.com and http://www.MyVietnam.net in the
           * footer of the pages MUST remain visible when the pages
           * are viewed on the internet or intranet.
           *
           * This program is distributed in the hope that it will be useful,
           * but WITHOUT ANY WARRANTY; without even the implied warranty of
           * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
           * GNU General Public License for more details.
           *
           * You should have received a copy of the GNU General Public License
           * along with this program; if not, write to the Free Software
           * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
           *
           * Support can be obtained from support forums at:
           * http://www.mvnForum.com/mvnforum/index
           *
           * Correspondence and Marketing Questions can be sent to:
           * info@MyVietnam.net
           *
           * @author: Minh Nguyen  minhnn@MyVietnam.net
           * @author: Mai  Nguyen  mai.nh@MyVietnam.net
           */
          package com.mvnforum;

          import java.awt.image.BufferedImage;
          import java.io.*;
          import java.util.*;

          import javax.servlet.ServletContext;
          import javax.servlet.http.*;

          import com.mvnforum.auth.*;
          import com.mvnforum.common.PrivateMessageUtil;
          import com.mvnforum.db.*;
          import com.mvnforum.search.member.MemberIndexer;
          import com.sun.image.codec.jpeg.JPEGCodec;
          import com.sun.image.codec.jpeg.JPEGImageEncoder;
          import net.myvietnam.mvncore.MVNCoreInfo;
          import net.myvietnam.mvncore.exception.*;
          import net.myvietnam.mvncore.filter.*;
          import net.myvietnam.mvncore.util.*;
          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;

          public class MyUtil {

              private static Log log = LogFactory.getLog(MyUtil.class);

              private static RankCache rankCache = RankCache.getInstance();

              public static String filter(String input, boolean enableHTML, boolean enableEmotion,
                                          boolean enableMVNCode, boolean enableNewLine, boolean enableURL) {
                  String output = input;

                  if (enableHTML) {
                      output = EnableHtmlTagFilter.filter(output);
                  } else {
                      output = DisableHtmlTagFilter.filter(output);
                  }

                  if (enableEmotion) {
                      output = EnableEmotionFilter.filter(output, ParamUtil.getContextPath() + MVNForumGlobal.EMOTION_DIR);
                  }

                  if (enableMVNCode) {
                      output = EnableMVNCodeFilter.filter(output);
                  }

                  if (enableNewLine) {
                      output = HtmlNewLineFilter.filter(output);
                  }

                  if (enableURL) {
                      output = URLFilter.filter(output);
                  }
                  return output;
              }

              public static String getMemberTitle(int postCount) {
                  String title = "";
                  try {
                      ArrayList rankBeans = rankCache.getBeans();
                      for (int i = 0; i < rankBeans.size(); i++) {
                          RankBean rankBean = (RankBean)rankBeans.get(i);
                          if (rankBean.getRankMinPosts() <= postCount) {
                              title = EnableMVNCodeFilter.filter(rankBean.getRankTitle());
                          } else {
                              break;
                          }
                      }//for
                  } catch (Exception ex) {
                      log.error("Exception in getMemberTitile", ex);
                  }
                  return title;
              }

              public static String getForumIconName(long lastLogon, long lastPost) {
                  String forumIcon = null;
                  if (lastLogon > lastPost) {// no new post
                      forumIcon = "f_norm_no.gif";
                  } else {// new post
                      forumIcon = "f_norm_new.gif";
                  }
                  return forumIcon;
              }

              public static String getThreadIconName(long lastLogon, long lastPost, int postCount) {
                  String threadIcon = null;
                  if (postCount < MVNForumConfig.getHotTopicThreshold()) {//not hot topic
                      if (lastLogon > lastPost) {// no new post
                          threadIcon = "f_norm_no.gif";
                      } else {// new post
                          threadIcon = "f_norm_new.gif";
                      }
                  } else {// hot topic
                      if (lastLogon > lastPost) {// no new post
                          threadIcon = "f_hot_no.gif";
                      } else {// new post
                          threadIcon = "f_hot_new.gif";
                      }
                  }
                  return threadIcon;
              }

              public static String getThreadStatusName(Locale locale, int threadStatus) {
                  String result = null;
                  switch (threadStatus) {
                  case ThreadBean.THREAD_STATUS_DEFAULT:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.thread.status.normal");
                      break;
                  case ThreadBean.THREAD_STATUS_DISABLED:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.thread.status.disabled");
                      break;
                  case ThreadBean.THREAD_STATUS_LOCKED:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.thread.status.locked");
                      break;
                  case ThreadBean.THREAD_STATUS_CLOSED:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.thread.status.closed");
                      break;
                  default:
                      //throw new AssertionException("Cannot find matching thread status.");
                  }
                  return result;
              }

              public static String getThreadTypeName(Locale locale, int threadType) {
                  String result = "Unknown";
                  switch (threadType) {
                  case ThreadBean.THREAD_TYPE_DEFAULT:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.thread.type.normal_thread");
                      break;
                  case ThreadBean.THREAD_TYPE_STICKY:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.thread.type.sticky_thread");
                      break;
                  case ThreadBean.THREAD_TYPE_FORUM_ANNOUNCEMENT:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.thread.type.announcement_thread");
                      break;
                  case ThreadBean.THREAD_TYPE_GLOBAL_ANNOUNCEMENT:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.thread.type.global_announcement_thread");
                      break;
                  default:
                      //throw new AssertionException("Cannot find matching thread type.");
                  }
                  return result;
              }

              public static String getForumStatusName(Locale locale, int forumStatus) {
                  String result = null;
                  switch (forumStatus) {
                  case ForumBean.FORUM_STATUS_DEFAULT:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.forum.status.normal");
                      break;
                  case ForumBean.FORUM_STATUS_DISABLED:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.forum.status.disabled");
                      break;
                  case ForumBean.FORUM_STATUS_LOCKED:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.forum.status.locked");
                      break;
                  case ForumBean.FORUM_STATUS_CLOSED:
                      result = MVNForumResourceBundle.getString(locale, "mvnforum.common.forum.status.closed");
                      break;
                  default:
                      //throw new AssertionException("Cannot find matching forum status.");
                  }
                  return result;
              }

              public static boolean canViewAnyForumInCategory(int categoryID, MVNForumPermission permission) {
                  try {
                      Collection forumBeans = ForumCache.getInstance().getBeans();
                      for (Iterator iter = forumBeans.iterator(); iter.hasNext(); ) {
                          ForumBean forumBean = (ForumBean)iter.next();
                          if (forumBean.getCategoryID() == categoryID) {
                              if (canViewForum(forumBean, permission)) {
                                  return true;
                              }
                          }
                      }
                  } catch (DatabaseException ex) {
                      log.error("Cannot load the data in table Forum", ex);
                  }
                  return false;
              }

              public static boolean canViewForum(ForumBean forumBean, MVNForumPermission permission) {
                  if (permission.canReadPost(forumBean.getForumID()) &&
                      (forumBean.getForumStatus() != ForumBean.FORUM_STATUS_DISABLED) ) {
                      return true;
                  }
                  return false;
              }

              public static int getViewablePosts(Collection forumBeans, MVNForumPermission permission) {
                  int count = 0;
                  for (Iterator iter = forumBeans.iterator(); iter.hasNext(); ) {
                      ForumBean forumBean = (ForumBean)iter.next();
                      if (canViewForum(forumBean, permission)) {
                          count += forumBean.getForumPostCount();
                      }
                  }
                  return count;
              }

              public static int getViewableThreads(Collection forumBeans, MVNForumPermission permission) {
                  int count = 0;
                  for (Iterator iter = forumBeans.iterator(); iter.hasNext(); ) {
                      ForumBean forumBean = (ForumBean)iter.next();
                      if (canViewForum(forumBean, permission)) {
                          count += forumBean.getForumThreadCount();
                      }
                  }
                  return count;
              }

              public static int getViewableForums(Collection forumBeans, MVNForumPermission permission) {
                  int count = 0;
                  for (Iterator iter = forumBeans.iterator(); iter.hasNext(); ) {
                      ForumBean forumBean = (ForumBean)iter.next();
                      if (canViewForum(forumBean, permission)) {
                          count++;
                      }
                  }
                  return count;
              }

              public static int getViewableCategories(Collection categoryBeans, MVNForumPermission permission) {
                  int count = 0;
                  for (Iterator iter = categoryBeans.iterator(); iter.hasNext(); ) {
                      CategoryBean categoryBean = (CategoryBean)iter.next();
                      if (canViewAnyForumInCategory(categoryBean.getCategoryID(), permission)) {
                          count++;
                      }
                  }
                  return count;
              }

              /**
               * Get the String with a slash character '/' before the locale name
               * @param localeName the user's preferred locale
               * @return the String with a slash character '/' before the locale name if
               *         this locale is configed to support it. Otherwise,
               *         an empty String will be return
               */
              public static String getLocaleNameAndSlash(String localeName) {
                  if ( (localeName == null) || (localeName.length() == 0) ) {
                      return "";
                  }

                  String retValue = "";
                  String[] supportedLocales = MVNForumConfig.getSupportedLocaleNames();

                  if (supportedLocales == null) {
                      log.error("Assertion in MyUtil.getLocaleNameAndSlash. Please check your configuration.");
                      return "";
                  }

                  for (int i = 0; i < supportedLocales.length; i++) {
                      if (localeName.equals(supportedLocales[i])) {
                          retValue = "/" + localeName;
                          break;
                      }
                  }
                  return retValue;
              }

              public static String getCompanyCssPath(CompanyBean companyBean, String contextPath) {
                  String cssPath = null;
                  if (companyBean.getCompanyCss().length() > 0) {
                      cssPath = companyBean.getCompanyCss();
                  } else {
                      // use default company css
                      cssPath = MVNForumGlobal.COMPANY_DEFAULT_CSS_PATH;
                  }
                  return contextPath + cssPath;
              }

              public static String getCompanyLogoPath(CompanyBean companyBean, String contextPath) {
                  String logoPath = null;
                  if (companyBean.getCompanyLogo().length() > 0) {
                      logoPath = companyBean.getCompanyLogo();
                  } else {
                      // use default company logo
                      logoPath = MVNForumGlobal.COMPANY_DEFAULT_LOGO_PATH;
                  }
                  return contextPath + logoPath;
              }

              /**
               * Get the locale from locale name
               * @param localeName : in this format la_CO_VA, eg. en_US
               * @return the locale instance of the localeName
               */
              public static Locale getLocale(String localeName) {
                  // now, find out the 3 elements of a locale: language, country, variant
                  String[] localeElement = StringUtil.getStringArray(localeName, "_");
                  String language = "";
                  String country = "";
                  String variant = "";
                  if (localeElement.length >= 1) {
                      language = localeElement[0];
                  }
                  if (localeElement.length >= 2) {
                      country = localeElement[1];
                  }
                  if (localeElement.length >= 3) {
                      variant = localeElement[2];
                  }
                  return new Locale(language, country, variant);
              }

              public static void ensureCorrectCurrentPassword(HttpServletRequest request)
                  throws BadInputException, AssertionException, DatabaseException, AuthenticationException {

                  OnlineUser onlineUser = OnlineUserManager.getInstance().getOnlineUser(request);
                  OnlineUserFactory onlineUserFactory = ManagerFactory.getOnlineUserFactory();

                  try {
                      if (onlineUser.getAuthenticationType() == OnlineUser.AUTHENTICATION_TYPE_REALM) {
                          onlineUserFactory.ensureCorrectPassword(onlineUser.getMemberName(), OnlineUserManager.PASSWORD_OF_METHOD_REALM, true);
                      } else if (onlineUser.getAuthenticationType() == OnlineUser.AUTHENTICATION_TYPE_CUSTOMIZATION) {
                          if(MVNForumConfig.getEnablePasswordlessAuth()) {
                              // dont need password
                              onlineUserFactory.ensureCorrectPassword(onlineUser.getMemberName(), OnlineUserManager.PASSWORD_OF_METHOD_CUSTOMIZATION, true);
                          } else {
                              // must have password
                              // @todo: implement this case by using Authenticator
                              onlineUserFactory.ensureCorrectPassword(onlineUser.getMemberName(), OnlineUserManager.PASSWORD_OF_METHOD_CUSTOMIZATION, true);
                          }
                      } else {
                          //This user did not login by REALM or CUSTOMIZATION
                          String memberPassword = "";
                          String memberPasswordMD5 = ParamUtil.getParameter(request, "md5pw", false);
                          if (memberPasswordMD5.length() == 0 || (memberPasswordMD5.endsWith("==") == false)) {
                              // md5 is not valid, try to use unencoded password method
                              memberPassword = ParamUtil.getParameterPassword(request, "MemberCurrentMatkhau", 3, 0);
                          }

                          if (memberPassword.length() > 0) {
                              // that is we cannot find the md5 password
                              onlineUserFactory.ensureCorrectPassword(onlineUser.getMemberName(), memberPassword, false);
                          } else {
                              // have the md5, go ahead
                              onlineUserFactory.ensureCorrectPassword(onlineUser.getMemberName(), memberPasswordMD5, true);
                          }
                      }
                  } catch (AuthenticationException e) {
                      Locale locale = I18nUtil.getLocaleInRequest(request);
                      String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.wrong_password");
                      throw new BadInputException(localizedMessage);
                      //throw new BadInputException("You have typed the wrong password. Cannot proceed.");
                  }
              }

              public static void writeMvnForumImage(HttpServletRequest request, HttpServletResponse response) throws IOException {

                  BufferedImage image = MVNForumInfo.getImage();
                  OutputStream outputStream = null;
                  try {
                      outputStream = response.getOutputStream();
                      response.setContentType("image/jpeg");

                      JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream);
                      encoder.encode(image);

                      outputStream.flush();
                  } catch (IOException ex) {
                      throw ex;
                  } finally {
                      if (outputStream != null) {
                          try {
                              outputStream.close();
                          } catch (IOException ex) { }
                      }
                  }
              }

              public static void writeMvnCoreImage(HttpServletRequest request, HttpServletResponse response) throws IOException {

                  BufferedImage image = MVNCoreInfo.getImage();
                  OutputStream outputStream = null;
                  try {
                      outputStream = response.getOutputStream();
                      response.setContentType("image/jpeg");

                      JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream);
                      encoder.encode(image);

                      outputStream.flush();
                  } catch (IOException ex) {
                      throw ex;
                  } finally {
                      if (outputStream != null) {
                          try {
                              outputStream.close();
                          } catch (IOException ex) { }
                      }
                  }
              }

              public static void checkClassName(Locale locale, String className, boolean required) throws BadInputException {
                  if (required == false) {
                      if (className.length() == 0) return;
                  }

                  try {
                      Class.forName(className);
                  } catch (ClassNotFoundException ex) {
                      throw new BadInputException("Cannot load class: " + className);
                  }
              }

              public static void saveVNTyperMode(HttpServletRequest request, HttpServletResponse response) {
                  String vnTyperMode = ParamUtil.getParameter(request, "vnselector");
                  if (vnTyperMode.equals("VNI") || vnTyperMode.equals("TELEX") ||
                      vnTyperMode.equals("VIQR") || vnTyperMode.equals("NOVN")) {
                      Cookie typerModeCookie = new Cookie(MVNForumConstant.VN_TYPER_MODE, vnTyperMode);
                      typerModeCookie.setPath("/");
                      response.addCookie(typerModeCookie);
                  }
              }

              public static Hashtable checkMembers(String[] memberNames, Locale locale)
                  throws AssertionException, DatabaseException, BadInputException {

                  Hashtable memberMap = new Hashtable();
                  boolean isFailed = false;
                  StringBuffer missingNames = new StringBuffer(512);

                  for (int i = 0; i < memberNames.length; i++) {
                      int receivedMemberID = -1;
                      String memberName = memberNames[i];
                      StringUtil.checkGoodName(memberName);
                      try {
                          receivedMemberID = DAOFactory.getMemberDAO().getMemberIDFromMemberName(memberName);
                      } catch (ObjectNotFoundException ex) {
                          isFailed = true;
                          if (missingNames.length() > 0) {
                              missingNames.append(", ");
                          }
                          missingNames.append(memberName);
                          continue;
                      }
                      memberMap.put(new Integer(receivedMemberID), memberName);
                  } // end for

                  if (isFailed) { // the receivers does not exist.
                      String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.receivers_are_not_members", new Object[] {missingNames});
                      throw new BadInputException(localizedMessage);
                  }
                  return memberMap;
              }
          }

           

          posted @ 2007-09-11 11:27 迷茫在java的世界里 閱讀(275) | 評論 (0)編輯 收藏

          MVNForumResourceBundle

          /*
           * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/MVNForumResourceBundle.java,v 1.6 2005/01/18 11:52:08 minhnn Exp $
           * $Author: minhnn $
           * $Revision: 1.6 $
           * $Date: 2005/01/18 11:52:08 $
           *
           * ====================================================================
           *
           * Copyright (C) 2002-2005 by MyVietnam.net
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * as published by the Free Software Foundation; either version 2
           * of the License, or any later version.
           *
           * All copyright notices regarding mvnForum MUST remain intact
           * in the scripts and in the outputted HTML.
           * The "powered by" text/logo with a link back to
           * http://www.mvnForum.com and http://www.MyVietnam.net in the
           * footer of the pages MUST remain visible when the pages
           * are viewed on the internet or intranet.
           *
           * This program is distributed in the hope that it will be useful,
           * but WITHOUT ANY WARRANTY; without even the implied warranty of
           * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
           * GNU General Public License for more details.
           *
           * You should have received a copy of the GNU General Public License
           * along with this program; if not, write to the Free Software
           * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
           *
           * Support can be obtained from support forums at:
           * http://www.mvnForum.com/mvnforum/index
           *
           * Correspondence and Marketing Questions can be sent to:
           * info@MyVietnam.net
           *
           * @author: Minh Nguyen  minhnn@MyVietnam.net
           * @author: Pavel Av
           */
          package com.mvnforum;

          import java.util.Locale;
          import java.util.ResourceBundle;

          import net.myvietnam.mvncore.i18n.CacheResourceBundle;

          public class MVNForumResourceBundle {

              private static CacheResourceBundle cacheResourceBundle = new CacheResourceBundle(MVNForumGlobal.RESOURCE_BUNDLE_NAME);

              private MVNForumResourceBundle() {
              }

              public static ResourceBundle getResourceBundle(Locale locale) {
                  return cacheResourceBundle.getResourceBundle(locale);
              }

              public static String getString(Locale locale, String key) {
                  return cacheResourceBundle.getString(locale, key);
              }

              public static String getString(Locale locale, String key, Object[] args) {
                  return cacheResourceBundle.getString(locale, key, args);
              }
          }

          posted @ 2007-09-11 11:26 迷茫在java的世界里 閱讀(144) | 評論 (0)編輯 收藏

          MVNForumInfo

           

          /*
           * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/MVNForumInfo.java,v 1.36.2.2 2005/06/17 17:53:37 minhnn Exp $
           * $Author: minhnn $
           * $Revision: 1.36.2.2 $
           * $Date: 2005/06/17 17:53:37 $
           *
           * ====================================================================
           *
           * Copyright (C) 2002-2005 by MyVietnam.net
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * as published by the Free Software Foundation; either version 2
           * of the License, or any later version.
           *
           * All copyright notices regarding mvnForum MUST remain intact
           * in the scripts and in the outputted HTML.
           * The "powered by" text/logo with a link back to
           * http://www.mvnForum.com and http://www.MyVietnam.net in the
           * footer of the pages MUST remain visible when the pages
           * are viewed on the internet or intranet.
           *
           * This program is distributed in the hope that it will be useful,
           * but WITHOUT ANY WARRANTY; without even the implied warranty of
           * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
           * GNU General Public License for more details.
           *
           * You should have received a copy of the GNU General Public License
           * along with this program; if not, write to the Free Software
           * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
           *
           * Support can be obtained from support forums at:
           * http://www.mvnForum.com/mvnforum/index
           *
           * Correspondence and Marketing Questions can be sent to:
           * info@MyVietnam.net
           *
           * @author: Minh Nguyen  minhnn@MyVietnam.net
           * @author: Mai  Nguyen  mai.nh@MyVietnam.net
           */
          package com.mvnforum;

          import java.awt.*;
          import java.awt.image.BufferedImage;

          public class MVNForumInfo {

              private MVNForumInfo() {
              }

              private static String PRODUCT_NAME         = "mvnForum";

              private static String PRODUCT_DESC         = "mvnForum 1.0.0 RC4 Update 4";

              private static String PRODUCT_VERSION      = "1.0.0-RC4_04";

              private static String PRODUCT_RELEASE_DATE = "18 June 2005";

              private static String PRODUCT_HOMEPAGE     = "http://www.mvnForum.com";

              public static String getProductName() {
                  return PRODUCT_NAME;
              }

              public static String getProductDesc() {
                  return PRODUCT_DESC;
              }

              public static String getProductVersion() {
                  return PRODUCT_VERSION;
              }

              public static String getProductReleaseDate() {
                  return PRODUCT_RELEASE_DATE;
              }

              public static String getProductHomepage() {
                  return PRODUCT_HOMEPAGE;
              }

              public static BufferedImage getImage() {

                  String str = PRODUCT_VERSION + " on " + PRODUCT_RELEASE_DATE;
                  int IMAGE_WIDTH  = 250;
                  int IMAGE_HEIGHT = 30;

                  BufferedImage bufferedImage = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
                  Graphics2D g = bufferedImage.createGraphics();
                  g.setBackground(Color.blue);
                  g.setColor(Color.white);
                  g.draw3DRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, false);
                  FontMetrics fontMetrics = g.getFontMetrics();
                  int strWidth  = fontMetrics.stringWidth(str);
                  int strHeight = fontMetrics.getAscent() + fontMetrics.getDescent();
                  g.drawString(str, (IMAGE_WIDTH - strWidth) / 2, IMAGE_HEIGHT - ((IMAGE_HEIGHT - strHeight) / 2) - fontMetrics.getDescent());
                  g.dispose(); // free resource
                  return bufferedImage;
              }

          }

          posted @ 2007-09-11 11:22 迷茫在java的世界里| 編輯 收藏

          六章 復用類

                代碼的復用有兩種方法————1就是直接在新類中生成舊有的類的對象 (合成)2是創建一個新的類 這個類會全盤接受舊有的類 并且在不對舊有類修改的前提下 添加新的代碼(繼承)
                合成所使用的方法
                只要把對象的引用reference放到新的類里面就可以了。當primitive數據作為類的成員時候會自動初始化為零,對象的reference也會為null,這時候調用這個reference會拋出nullpoint異常。
             reference的初始化有以下三種方式:
             1 在定義對象的時候。這就意味著在調用構造函數之前,他們已經初始化完畢了。
             2在這個類的構造函數里。
             3在即將使用那個對象之前。如果碰到創建對象的代價很高,或者不是每次都需要創建對象的時候,這種做法就能降低程序的開銷。
                繼承所使用的方法
                繼承的時候 必須使用extends關鍵詞和基類的名字。之后新類就會自動獲得基類的全部成員和方法。繼承不會限定只能使用基類的方法。也可以往派生類里加入新的方法。
                基類的初始化
                當創建一個派生類的對象的時候,這個對象立門還有一個基類的對象。這個對象同基類自己創建的對象沒有任何的差別。只是從外面看來這個對象是被包裹在派生類的對象里面。
                基類的初始化只有一個方法能保證:調用基類的構造函數來進行初始化,只有這樣才能掌握怎樣才能正確地進行初始化的信息和權限。java會讓派生類的構造函數自動地調用基類的構造函數。
                帶參數的構造函數
                調用帶參數的構造函數必須使用super關鍵詞以及合適的參數明確調用基類的構造函數。
                確保進行妥善地清理
                一般情況下java會將需要清理的對象留給垃圾回收器去處理,它不會主動的進行清理。由于不知道垃圾回收器甚么時候啟動,也不知道會不會啟動,所有需要進行清理,就必須明確地寫一個專門干這件事情的方法,為了應付異常,還要將這個方法放入finally子句里面去。不要去調用finalize方法。
                用合成還是繼承
                一般來說,合成用于新類要使用舊類的功能,而不是其接口的場合,也就是說把對象嵌進去,用它來實現新類的功能,但用戶看到的是新類的接口,而不是嵌進去的對象的接口,因此在新類里嵌入private的舊類對象,有時為了讓用戶直接訪問新類的各個組成部分也可以嵌入public的舊類對象。通常都應該將基類的成員數據定義為privite類型。繼承表達的是一種“是(is-a)”關系,合成表達的是“有(has-a)”關系,對于一些需要對外部世界隱藏,但要對它的繼承類開放的基類 可以使用protected來定義那些開放的部分。最好的做法是,將數據成員設成private 的;你應該永遠保留修改底層實現的權利。然后用protected 權限的方法來控制繼承類的訪問權限。
                漸進式的開發
                繼承的優點之一就是,它支持漸進式的開發(incremental develop)。添加新的代碼的時候,不會給老代碼帶來bug;實際上新的bug 全都被圈在新代碼里。通過繼承已有的,已經能正常工作的類,然后再添加一些數據成員和方法(以及重新定義一些原有的方法),你可以不去修改那些可能還有人在用的老代碼,因而也就不會造成bug 了。一旦發現了bug,你就知道它肯定是在新代碼里。相比要去修改老代碼,新代碼會短很多,讀起來也更簡單。繼承實質上是在表達這樣一種關系:“新的類是一種舊的類”。
                上傳
                 繼承最重要的特征不在于它為新類提供了方法,而是它表達了新類同基類之間的關系。這種關系可以被歸納為一句話“新類就是一種原有的類。” (upcasting)”。上傳總是安全的,因為你是把一個較具體的類型轉換成較為一般的類型。也就是說派生類是基類的超集(superset)。它可能會有一些基類所沒有的方法,但是它最少要有基類的方法。在上傳過程中,類的接口只會減小,不會增大。這就是為什么編譯器會允許你不作任何明確的類型轉換或特殊表示就進行上傳的原因了。
                合成還是繼承,再探討
                在判斷該使用合成還是繼承的時候,有一個最簡單的辦法,就是問一下你是不是會把新類上傳給基類。如果你必須上傳,那么繼承就是必須的,如果不需要上傳,那么就該再看看是不是應該用繼承了。
                final 關鍵詞
                final 的三種用途:數據(data),方法(method)和類(class)。
          Final 的數據
                很多編程語言都有通知編譯器“這是段『常量(constant)』 數據”的手段。常量能用于下列兩種情況:
          1. 可以是“編譯時的常量(compile-time constant)”,這樣就再也不能改了。
          2. 也可以是運行時初始化的值,這個值你以后就不想再改了。
          如果是編譯時的常量,編譯器會把常量放到算式里面;這樣編譯的時候就能進行計算,因此也就降低了運行時的開銷。在Java 中這種常量必須是primitive 型的,而且要用final 關鍵詞表示。這種常量的賦值必須在定義的時候進行。
                 一個既是static 又是final 的數據成員會只占據一段內存,并且不可修改。
                當final 不是指primitive,而是用于對象的reference 的時候,意思就有點搞了。對primitive 來說,final 會將這個值定義成常量,但是對于對象的reference 而言,final 的意思則是這個reference 是常量。初始化的時候,一旦將reference 連到了某個對象,那么它就再也不能指別的對象了。但是這個對象本身是可以修改的;Java 沒有提供將某個對象作成常量的方法。(但是你可以自己寫一個類,這樣就能把類當做常量了。)這種局限性也體現在數組上,因為它也是一個對象。
                空白的final 數據 (Blank finals)
                Java 能讓你創建“空白的final 數據(blank finals)”,也就是說把數據成員聲明成final 的,但卻沒給初始化的值。碰到這種情況,你必須先進行初始化,再使用空白的final 數據成員,而且編譯器會強制你這么做。不過,空白的final 數據也提供了一種更為靈活的運用final 關鍵詞方法,比方說,現在對象里的final 數據就能在保持不變性的同時又有所不同了。
                你一定得為final 數據賦值,要么是在定義數據的時候用一個表達式賦值,要么是在構造函數里面進行賦值。為了確保final 數據在使用之前已經進行了初始化,這一要求是強制性的。
                Final 的參數
                Java 允許你在參數表中聲明參數是final 的,這樣參數也編程final了。也就是說,你不能在方法里讓參數reference 指向另一個對象了。
                Final 方法
          使用final 方法的目的有二。第一,為方法上“鎖”,禁止派生類進行修改。這是出于設計考慮。當你希望某個方法的功能,能在繼承過程中被保留下來,并且不被覆寫,就可以使用這個方法。
          第二個原因就是效率。如果方法是final 的,那么編譯器就會把調用轉換成“內聯的(inline)”。當編譯器看到要調用final 方法的時候,它就會(根據判斷)舍棄普通的,“插入方法調用代碼的”編譯機制(將參數壓入棧,然后跳去執行要調用的方法的代碼,再跳回來清空棧,再處理返回值),相反它會用方法本身的拷貝來代替方法的調用。當然如果方法很大,那么程序就會膨脹得很快,于是內聯也不會帶來什么性能的改善,因為這種改善相比程序處理所耗用的時間是微不足道的。Java 的設計者們暗示過,Java 的編譯器有這個功能,可以智能地判斷是不是應該將final 方法做成內聯的。不過,最好還是把效率問題留給編譯器和JVM去處理,而只把final 用于要明確地禁止覆寫的場合。
          final 和private
          private 方法都隱含有final 的意思。由于你不能訪問private 的方法,因此你也不能覆寫它。你可以給private 方法加一個final 修飾符,但是這樣做什么意義也沒有。這個問題有可能會造成混亂,因為即使你覆寫了一個private 方法(它隱含有final 的意思),看上去它還是可以運行的,而且編譯器也不會報錯。
                只有是基類接口里的東西才能被“覆寫”。也就是說,對象應該可以被上傳到基類,然后再調用同一個方法(這一點要到下一章才能講得更清楚。)如果方法是private 的,那它就不屬于基類的接口。它只能算是被類隱藏起來的,正好有著相同的名字的代碼。如果你在派生類里創建了同名的public 或protected,或package 權限的方法,那么它們同基類中可能同名的方法,沒有任何聯系。你并沒有覆寫那個方法,你只是創建了一個新的方法。由于private 方法是無法訪問的,實際上是看不見的,因此這么作除了會影響類的代碼結構,其它什么意義都沒有。
                Final 類
                把整個類都定義成final 的(把final 關鍵詞放到類的定義部分的前面)就等于在宣布,你不會去繼承這個類,你也不允許別人去繼承這個類。換言之,出于類的設計考慮,它再也不需要作修改了,或者從安全角度出發,你不希望它再生出子類。
                注意,final 類的數據可以是final 的,也可以不是final 的,這要由你來決定。無論類是不是final 的,這一條都適用于“將final 用于數據的”場合。但是,由于final 類禁止了繼承,覆寫方法已經不可能了,因此所有的方法都隱含地變成final 了。你可以為final 類的方法加一個final 修飾符,但是這一樣沒什么意義。
                小心使用final
                看來,設計類的時候將方法定義成final 的,會是一個很明智的決定。可能你會覺得沒人會要覆寫你的方法。有時確實是這樣。

          posted @ 2007-06-28 19:20 迷茫在java的世界里 閱讀(187) | 評論 (0)編輯 收藏

          第五章 隱藏實現

                本章主要是介紹如何對代碼進行封裝,并解釋為什么類庫中有些部分會被公之于眾,有些部分被隱藏的起來:類庫創建時保證在不影響類庫使用者代碼的前提下對類庫進行修改和改進,在對類庫進行修改的時候不能刪減現有方法,對于那些只有類內部實現有關的,不應該會使用的部分進行封裝,限制用戶使用這部分代碼,便于類庫創建者對類庫進行修改,這就是java提供的訪問控制符 access specifier ,public protected package private 
                使用import導入一個完整的類或類庫。package的名稱是獨一無二的 ,不要import兩個同名的類否則會引起沖突
                java的訪問控制符:類只能被定義public 或 package(默認的沒有定義訪問控制符的),而類內部數據成員和方法 被定義public的可以被任何類都能訪問,被定義protected的數據成員或方法只能被該類的子類訪問,定義package的數據成員或方法只能被同一目錄下的類訪問,private的成員或方法只能被類的內部數據成員或方法訪問。
                類的訪問權限:每個編譯單元只能有一個public類,只是為了保證每個編譯單元只能有一個公共接口,可以根據需要往這個編譯單元里添加package權限的類,public的類必須和這個編譯單元一樣的文件名      

          posted @ 2007-06-25 18:43 迷茫在java的世界里| 編輯 收藏

          Eclipse與插件(tomcatPlugin Lomboz easyStruts)安裝

          一、安裝準備?

          在進行安裝以前,你應該準備以下軟件:?

          ?軟件:J2se?
          ?版本:1.4.2_04?
          ?官方下載:http://java.sun.com/j2se/1.4.2/download.html?
          ?備注:?
          ??
          ?軟件:Tomcat?
          ?版本:5.0.19?
          ?官方下載:http://www.apache.org/dist/jakarta/?
          ?備注:?
          ??
          ?軟件:Struts?
          ?版本:1.1?
          ?官方下載:http://www.apache.org/dist/jakarta/struts/?
          ?備注:?
          ??
          ?軟件:Eclipse?
          ?版本:2.1.3?
          ?官方下載:http://www.eclipse.org/downloads/index.php?
          ?備注:目前eclipse最新版為eclipse3.0R1?

          ?軟件:EclipseLanguagePack?
          ?版本:2.1.2.1?
          ?官方下載:http://www.eclipse.org/downloads/index.php?
          ?備注:該版本只能漢化eclipse2.1.3及以下版本?

          ?軟件:TomcatPlugin?
          ?版本:2.2.1?
          ?官方下載:http://www.sysdeo.com/eclipse/tomcatPlugin.html?
          ?備注:該版本只能漢化eclipse2.1.3及以下版本?
          ??
          ?軟件:Lomboz?
          ?版本:2.1.3?
          ?官方下載:http://www.objectlearn.com/index.jsp?
          ?備注:該版本只能漢化eclipse2.1.3及以下版本?

          ?軟件:EasyStruts?
          ?版本:0.6.4?
          ?官方下載:http://sourceforge.net/projects/easystruts?
          ?備注:該版本只能漢化eclipse2.1.3及以下版本?
          ??

          以上軟件版本為安裝成功的版本,為了使您的安裝不至于出錯請遵照以上版本準本軟件。?

          hodesoft公司內部員工可以訪問\\192.168.0.23獲取?

          如果要找其他eclipse插件可以去下面這個站點?
          http://www.eclipse-plugins.info?
          ??

          二、JDK安裝?

          1.安裝J2SE-SDK到E:\j2sdk1.4.2?

          ???????部分目錄結構如下:?

          ??????????????E:\j2sdk1.4.2\in?

          ??????????????E:\j2sdk1.4.2\lib?

          ??????????????E:\j2sdk1.4.2\jre?

          ?????????????????????...?

          2.配置環境變量如下:?

          JAVA_HOME?=?E:\j2sdk1.4.2?

          ??????????????PATH?=?%JAVA_HOME%\in;.;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib;?

          ??????????????CLASSPATH?=?.;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib;?

          ??

          三、Tomcat安裝?

          1.解壓jakarta-tomcat-5.0.19.zip到E:\tomcat?

          ???????部分目錄結構如下:?

          ??????????????E:\tomcat\in?

          ??????????????E:\tomcat\conf?

          ??????????????E:\tomcat\webapps?

          ?????????????????????...?

          2.配置環境變量如下:?

          TOMCAT_HOME?=?E:\tomcat?

          ??

          四、Struts安裝?

          1.解壓jakarta-struts-1.1.zip到E:\jakarta-struts-1.1?

          ???????部分目錄結構如下:?

          ??????????????E:\jakarta-struts-1.1\lib?

          ??????????????E:\jakarta-struts-1.1\webapps?

          ?????????????????????...?

          五、Eclipse安裝?

          1.解壓eclipse-SDK-2.1.3-win32.zip到E:\eclipse213?

          ???????部分目錄結構如下:?

          ??????????????E:\eclipse213\features?

          ??????????????E:\eclipse213\plugins?

          ?????????????????????...?

          2.啟動Eclipse,看看安裝是否成功?

          ???????如果啟動不成功,請查看JRE是否安裝?

          3.啟動Eclipse,點擊菜單?windows->preferences?在左邊樹中點擊展開java,選擇Installed?JREs,?

          如果Installed?JREs如下則正確:?

          ?JRE?Type:Standard?VM?
          ?Name:j2sdk1.4.2?
          ?Location:E:\j2sdk1.4.2?


          六、Eclipse漢化?

          1.解壓eclipse2.1.2.1-SDK-win32-LanguagePackFeature.zip到E:\eclipse213下?

          ???????將目錄名eclipse2.1.2.1-SDK-win32-LanguagePackFeature改為eclipse2.1.2.1Language?

          部分目錄結構如下:?

          ??????????????E:\eclipse213\eclipse2.1.2.1Language\eclipse\features?

          ??????????????E:\eclipse213\eclipse2.1.2.1Language\eclipse\plugins?

          ?????????????????????...?

          2.在E:\eclipse213下新建文件夾links,使得文件夾links和文件夾eclipse2.1.2.1Language同級?

          3.在E:\eclipse213\links下新建文件,文件名任取,這里我們命名為language.link,打開此文件,?

          加入?path?=?E:\\eclipse213\\eclipse2.1.2.1Language?

          4.啟動Eclipse,看看漢化是否成功,如不成功請檢查language.link文件中配置信息path?=?

          E:\\eclipse213\\eclipse2.1.2.1Language和漢化文件夾eclipse2.1.2.1Language的安裝路徑是否一?

          致?

          ??

          七、TomcatPlugin安裝?

          1.解壓tomcatPluginV221.zip?

          2.將解壓目錄tomcatPluginV221下文件夾com.sysdeo.eclipse.tomcat_2.2.1復制到eclipse安裝目?

          錄中的plugins目錄中,即E:\eclipse213\plugins?

          3.啟動Eclipse?

          4.啟動后你將看到你的菜單上多了一個下拉項Tomcat,快捷欄里多了三個Tomcat的貓圖表,如?

          果沒有看到,請點擊?窗口->定制透視圖,展開樹結構中的“其它”,選擇“Tomcat”?

          5.點擊?窗口->首選項?

          ???????在左邊樹中點擊tomcat,設置tomcat?version為version?5.x?

          ??????????????????????????????????????????設置tomcat?version為version?5.x?

          ??????????????????????????????????????????設置tomcat-home為E:\tomcat?

          ??????????????????????????????????????????設置perspective?to?switch?when?tomcat?is?started為java?

          在左邊樹中點擊tomcat->JVM?setting,設置JRE為j2sdk1.4.2?

          點擊應用確定?

          6.點擊快捷按鈕“Start?Tomcat”來啟動Tomcat吧?

          ??

          八、Lomboz安裝?

          1.解壓lomboz.213.zip?

          2.將解壓目錄lomboz.213\plugins下文件夾com.objectlearn.jdt.j2ee和com.objectlearn.jdt.j2ee.editors?

          復制到eclipse安裝目錄中的plugins目錄中,即E:\eclipse213\plugins?

          3.啟動Eclipse?

          4.點擊?窗口->首選項?

          ???????在左邊樹中點擊lomboz,設置JDK?tools.jar位置為E:\?j2sdk1.4.2\lib\tools.jar?

          在左邊樹中點擊lomboz->server?definitions,設置Server?Type為Apache?Tomcat?v5.0.x?

          ????????????????????????????設置Application?Server?Directory為E:\tomcat?

          ????????????????????????????設置classpath?Variable?Name為TOMCAT_HOME?

          ????????????????????????????設置classpath?Variable為E:\tomcat?

          點擊應用確定?

          ??

          九、easyStruts安裝?

          1.解壓org.easystruts.eclipse_0.6.4.zip?

          2.將解壓目錄org.easystruts.eclipse_0.6.4下文件夾com.cross.easystruts.eclipse_0.6.4復制到eclipse?

          安裝目錄中的plugins目錄中,即E:\eclipse213\plugins?

          3.啟動Eclipse?

          4.點擊?窗口->首選項?

          ???????在左邊樹中點擊Easy?Struts,選擇struts1.1?

          ADD?JREs如下:?

          struts.jar-E:\jakarta-struts-1.1\lib\struts.jar?

          ADD?TLDs如下:?

          ?????????????????????struts-tiles.tld-E:\jakarta-struts-1.1\lib\struts-tiles.tld?

          ?????????????????????struts-template.tld-E:\jakarta-struts-1.1\lib\struts-template.tld?

          ?????????????????????struts-nested.tld-E:\jakarta-struts-1.1\lib\struts-nested.tld?

          ?????????????????????struts-logic.tld-E:\jakarta-struts-1.1\lib\struts-logic.tld?

          ?????????????????????struts-html.tld-E:\jakarta-struts-1.1\lib\struts-html.tld?

          ?????????????????????struts-bean.tld-E:\jakarta-struts-1.1\lib\struts-bean.tld?

          點擊應用確定?

          posted @ 2006-04-12 20:31 迷茫在java的世界里 閱讀(614) | 評論 (0)編輯 收藏

          技巧

          http://www.aygfsteel.com/nickey/

          posted @ 2006-04-12 19:57 迷茫在java的世界里 閱讀(163) | 評論 (0)編輯 收藏

          Java 開發者中外學習網站歸類

          Hibernate中文網站:http://www.hibernate.org.cn
          開源網站:http://www.open-open.com
          Java視線:http://www.javaeye.com
          csdn:http://www.csdn.net

          http://www.javaalmanac.com - Java開發者年鑒一書的在線版本. 要想快速查到某種Java技巧的用法及示例代碼, 這是一個不錯的去處.
          http://www.onjava.com - O'Reilly的Java網站. 每周都有新文章.
          http://java.sun.com - 官方的Java開發者網站 - 每周都有新文章發表.
          http://www.developer.com/java - 由Gamelan.com 維護的Java技術文章網站.
          http://www.java.net - Sun公司維護的一個Java社區網站.
          http://www.builder.com - Cnet的Builder.com網站 - 所有的技術文章, 以Java為主.
          http://www.ibm.com/developerworks/java - IBM的Developerworks技術網站; 這是其中的Java技術主頁.
          http://www.javaworld.com - 最早的一個Java站點. 每周更新Java技術文章.
          http://www.devx.com/java - DevX維護的一個Java技術文章網站.
          http://www.fawcette.com/javapro - JavaPro在線雜志網站.
          http://www.sys-con.com/java - Java Developers Journal的在線雜志網站.
          http://www.javadesktop.org - 位于Java.net的一個Java桌面技術社區網站.
          http://www.theserverside.com - 這是一個討論所有Java服務器端技術的網站.
          http://www.jars.com - 提供Java評論服務. 包括各種framework和應用程序.
          http://www.jguru.com - 一個非常棒的采用Q&A形式的Java技術資源社區.
          http://www.javaranch.com - 一個論壇,得到Java問題答案的地方,初學者的好去處。
          http://www.ibiblio.org/javafaq/javafaq.html - comp.lang.java的FAQ站點 - 收集了來自comp.lang.java新聞組的問題和答案的分類目錄.
          http://java.sun.com/docs/books/tutorial/ - 來自SUN公司的官方Java指南 - 對于了解幾乎所有的java技術特性非常有幫助.
          http://www.javablogs.com - 互聯網上最活躍的一個Java Blog網站.
          http://java.about.com/ - 來自About.com的Java新聞和技術文章網站.
          http://www.objectlearn.com/index.jsp

          http://www.open-open.com開源網

          中文網站
          http://www-900.ibm.com/developerWorks/cn/java/index.shtml
          http://diy.ccidnet.com/pub/article/c317_a71330_p1.html? 賽迪網J2EE專題
          http://www.javaresearch.org/??? Java研究組織
          http://www.jdon.com/?? J道-Java和J2EE解決之道
          http://community.csdn.net/expert/forum.asp?? CSDN技術社區

          http://www.javaeye.com?? Java視線

          1、spring in action Live中文文檔

          http://searchwebservices.techtarget.com.cn/wpsum/29/2217529.shtml?504

          2、Spring實戰

          http://searchwebservices.techtarget.com.cn/wpsum/75/2215575.shtml?2994

          3、Spring - Java/J2EE Application Framework

          spring in action Framework 開發參考手冊(中文版)

          http://www.jactiongroup.net/reference/html/index.html

          4、Introducing to spring in action Framework(中文修訂版)

          http://spring.jactiongroup.net/viewtopic.php?t=453

          5、spring in action Framework 介紹 (ppt培訓文檔)

          http://www.jactiongroup.net/doc/Introduction2open-sourceSpringframework4J2EE.ppt

          http://www.jactiongroup.net/doc/IntroductionToSpring.ppt

          6、Spring 中文社區

          http://spring.jactiongroup.net

          7、中國IT實驗室 spring in action 框架完全進階專題

          http://www.chinaitlab.com/www/techspecial/spring/


          本人再加一個啦:)~~
          http://www.springframework.org




          Eclipse及其插件介紹和下載
          0.Eclipse下載
          EMF,GEF - Graphical Editor Framework,UML2,VE - Visual Editor都在這里下載
          http://www.eclipse.org/downloads/index.php
          ?
          0.5.lomboz J2EE插件,開發JSP,EJB
          http://forge.objectweb.org/projects/lomboz
          1.MyEclipse J2EE開發插件,支持SERVLET/JSP/EJB/數據庫操縱等
          http://www.myeclipseide.com/
          ?
          2.Properties Editor? 編輯java的屬性文件,并可以自動存盤為Unicode格式
          http://propedit.sourceforge.jp/index_en.html
          ?
          3.Colorer Take? 為上百種類型的文件按語法著色
          http://colorer.sourceforge.net/
          ?
          4.XMLBuddy 編輯xml文件
          http://www.xmlbuddy.com/
          ?
          5.Code Folding? 加入多種代碼折疊功能(比eclipse自帶的更多)
          http://www.coffee-bytes.com/servlet/PlatformSupport
          ?
          6.Easy Explorer? 從eclipse中訪問選定文件、目錄所在的文件夾
          http://easystruts.sourceforge.net/
          ?
          7.Fat Jar 打包插件,可以方便的完成各種打包任務,可以包含外部的包等
          http://fjep.sourceforge.net/
          ?
          8.RegEx Test 測試正則表達式
          http://brosinski.com/stephan/archives/000028.php
          ?
          9.JasperAssistant 報表插件(強,要錢的)
          http://www.jasperassistant.com/
          ?
          10.Jigloo GUI Builder JAVA的GUI編輯插件
          http://cloudgarden.com/jigloo/
          ?
          11.Profiler 性能跟蹤、測量工具,能跟蹤、測量BS程序
          http://sourceforge.net/projects/eclipsecolorer/
          ?
          12.AdvanQas 提供對if/else等條件語句的提示和快捷幫助(自動更改結構等)
          http://eclipsecolorer.sourceforge.net/advanqas/index.html
          ?
          13.Log4E Log4j插件,提供各種和Log4j相關的任務,如為方法、類添加一個logger等
          http://log4e.jayefem.de/index.php/Main_Page
          ?
          14.VSSPlugin VSS插件
          http://sourceforge.net/projects/vssplugin
          ?
          15.Implementors 提供跳轉到一個方法的實現類,而不是接中的功能(實用!)
          http://eclipse-tools.sourceforge.net/implementors/
          ?
          16.Call Hierarchy 顯示一個方法的調用層次(被哪些方法調,調了哪些方法)
          http://eclipse-tools.sourceforge.net/call-hierarchy/index.html
          ?
          17.EclipseTidy 檢查和格式化HTML/XML文件
          http://eclipsetidy.sourceforge.net/
          ?
          18.Checkclipse 檢查代碼的風格、寫法是否符合規范
          http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm
          ?
          19.Hibernate Synchronizer Hibernate插件,自動映射等
          http://www.binamics.com/hibernatesync/
          ?
          20.VeloEclipse? Velocity插件
          http://propsorter.sourceforge.net/
          ?
          21.EditorList 方便的列出所有打開的Editor
          http://editorlist.sourceforge.net/
          ?
          22.MemoryManager 內存占用率的監視
          http://cloudgarden.com/memorymanager/
          ?
          23.swt-designer java的GUI插件
          http://www.swt-designer.com/
          ?
          24.TomcatPlugin 支持Tomcat插件
          http://www.sysdeo.com/eclipse/tomcatPlugin.html
          ?
          25.XML Viewer
          http://tabaquismo.freehosting.net/ignacio/eclipse/xmlview/index.html
          ?
          26.quantum 數據庫插件
          http://quantum.sourceforge.net/
          ?
          27.Dbedit 數據庫插件
          http://sourceforge.net/projects/dbedit
          ?
          28.clay.core 可視化的數據庫插件
          http://www.azzurri.jp/en/software/index.jsp
          http://www.azzurri.jp/eclipse/plugins
          ?
          29.hiberclipse hibernate插件
          http://hiberclipse.sourceforge.net/
          http://www.binamics.com/hibernatesync
          ?
          30.struts-console Struts插件
          http://www.jamesholmes.com/struts/console/
          ?
          31.easystruts Struts插件
          http://easystruts.sourceforge.net/
          ?
          32.veloedit Velocity插件
          http://veloedit.sourceforge.net/
          ?
          33.jalopy 代碼整理插件
          http://jalopy.sourceforge.net/
          ?
          34.JDepend 包關系分析
          http://andrei.gmxhome.de/jdepend4eclipse/links.html
          ?
          35.Spring IDE Spring插件
          http://springide-eclip.sourceforge.net/updatesite/
          ?
          36.doclipse 可以產生xdoclet 的代碼提示
          http://beust.com/doclipse/
          0.Eclipse下載
          EMF,GEF - Graphical Editor Framework,UML2,VE - Visual Editor都在這里下載
          http://www.eclipse.org/downloads/index.php

          posted @ 2006-04-12 19:29 迷茫在java的世界里 閱讀(248) | 評論 (0)編輯 收藏

          用Tomcat插件在Eclipse上搭建可跟蹤調試的J2EE WEB開發環境

          目標:
          1.管理J2EE工程:發布WEB程序,啟動/關閉服務器等
          2.編輯JSP/HTML/XML:有代碼提示,語法著色,錯誤提示等功能
          3.跟蹤調試JSP/SERVLET:可設置斷點,單步執行,變量/棧/線程跟蹤等
          ?
          (1).下載安裝Sysdeo Tomcat插件,用來管理tomcat服務器,提供斷點調試功能
          http://www.sysdeo.com/eclipse/tomcatPlugin.html
          SysdeoTomcat插件的安裝方法:
          使用 Eclipse 作為 Jakarta Tomcat 的開發環境 ----一種快速集成 Eclipse 和 Tomcat 的方法? Geoffrey R. Duck
          http://www-900.ibm.com/developerworks/cn/opensource/os-ectom/
          ?
          (2).下載安裝Lomboz插件,用來編輯JSP/HTML/XML等
          http://www.objectlearn.com
          Lomboz的安裝方法:
          *使用Eclipse開發Jsp 左錦
          http://www-900.ibm.com/developerWorks/cn/java/l-jsp-eclipse/index.shtml
          *使用Eclipse開發J2EE應用 ----集成Eclipse, Lomboz和JBoss 姜巍巍
          http://www-900.ibm.com/developerWorks/cn/java/l-eclipse-j2ee/index.shtml
          ?
          (3).快速指南
          1.New Project -> Tomcat Project

          2.輸入Project Name 下一步(不能建在已有的目錄里)

          3.輸入Context Name 就是web應用程序的名稱,決定訪問時的地址; 輸入Subdirectory to set as web application root(設置為web應用程序根目錄的目錄名),就是web目錄,可以輸入webapp(JBuilder默認的名稱),或其他的,如果不輸入的話,就直接建在Project目錄下.

          4.此時建立的目錄有:
          webapp/WEB-INF/src? 默認的源文件是放在WEB-INF目錄下(Tomcat Plugin的)
          work? 執行JSP時,編譯成的servlet源文件會放在此處(Tomcat Plugin的)
          bin?? eclipse默認的放置編譯后生成的classes文件
          src?? eclipse默認的源文件目錄
          webapp web應用程序的目錄

          5.以上的目錄都可以在project屬性里改,我一般喜歡把源文件放在src目錄下,而不是WEB-INF/src下,輸出到WEB-INF/classes目錄,而不是bin目錄.

          6.以上建好的web應用程序沒有web.xml,如果要自動建這個文件,那么可以執行一次lomboz的J2EE Module向導.

          7.運行tomcat(點擊tomcat插件在界面上新增的小貓圖標即可啟動/關閉tomcat,具體的安裝看上面的鏈接)
          ?
          8.編輯JSP/HTML等文件,按右鍵->Open with->JSP editor(紅色圖標那個).文件關聯可以在Window菜單->Preferences->Workbench->File Association里面設置.

          9.調試Servlet或struts的Action時,只要在程序的相應位置的行號上雙擊就可以設置一個斷點,刷新相應的頁面(即發出請求),程序就會在斷點的位置中斷.
          ????? 如果要調試JSP,稍微麻煩一點,因為它不能直接支持JSP的斷點調試.要先把那個頁面請求一次,再刷新eclipse里的左側目錄(右鍵->刷新),會發現work目錄下出現相應JSP文件的java源文件.打開這個源文件,在里面設置斷點即可.

          (轉移自2004年9月的一篇隨筆)

          posted @ 2006-04-12 04:01 迷茫在java的世界里 閱讀(635) | 評論 (0)編輯 收藏

          juint的內部機制解析

          http://testing.csai.cn/testtools/No299.pdf

          posted @ 2006-04-03 18:47 迷茫在java的世界里 閱讀(206) | 評論 (0)編輯 收藏

          4.1三講

          程序控制

          break 和continue語句
          break將控制傳給當前循環之后的語句
          continue將控制傳給下一次循環的語句

          posted @ 2006-04-01 18:49 迷茫在java的世界里 閱讀(226) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 霸州市| 德化县| 南丹县| 剑阁县| 威信县| 句容市| 洛川县| 北海市| 丰台区| 雷州市| 黎城县| 漠河县| 攀枝花市| 环江| 双江| 通化市| 霸州市| 保定市| 昌江| 鹤峰县| 青阳县| 于田县| 茶陵县| 临邑县| 柳林县| 田东县| 新疆| 土默特左旗| 汉阴县| 海伦市| 古蔺县| 疏附县| 辉南县| 西峡县| 曲阳县| 铁岭市| 上栗县| 天长市| 闽清县| 高平市| 舒兰市|