关于动态生成WML文件的一个Java实例(4)

来源:互联网 发布:js字符串比较大小 编辑:程序博客网 时间:2024/05/20 08:42

控制类: 
WAP_PageStructure类为我们进行单条数据操作带来了方便,但是如果我们需要取得一个列表进行维护时,单靠这个类我们就无能为力了,因此我们创建了WAPSrv类,为我们进行其他一些操作提供方法。

package com.data.srv;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.sql.DataSource;

import com.data.bean.WAP_PageStructure;
import com.util.db.DBService;

/**
 * 
@author mayonglian
 *
 
*/

public class WAPSrv {

    
/**
     * 得到所有WAP页面组成List:WAP_PageStructure
     * 
@param dataSource 
     * 
@return 存放WAP_PageStructure对象的ArrayList
     * 
@throws SQLException 
     
*/

    
public static ArrayList getWAPPageList(DataSource dataSource) throws SQLException {
        ArrayList list 
= new ArrayList();
        DBService dbService  
= new DBService(dataSource);
        
try {
            String sql 
= "SELECT ID FROM WAP_PageStructure";
            dbService.prepareStatement(sql);
            dbService.executeQuery();
            
int id = 0;
            WAP_PageStructure page 
= null;
            
while (dbService.next()) {
                id 
= dbService.getInt("ID");
                page 
= new WAP_PageStructure(dataSource, id);
                page.checkExisted();
                list.add(page);
            }

        }
 finally {
            dbService.close();
        }
 
        
return list;
    }

    
    
/**
     * 得到是否为主页面组成的List:WAP_PageStructure
     * 
@param dataSource
     * 
@param isMain
     * 
@return 存放WAP_PageStructure对象的ArrayList
     * 
@throws SQLException
     
*/

    
public static ArrayList getWAPPageListByIsMain(DataSource dataSource, boolean isMain) throws SQLException {
        ArrayList list 
= new ArrayList();
        DBService dbService 
= new DBService(dataSource);
        
try {
            String qStr 
= "SELECT ID FROM WAP_PageStructure WHERE IsMain = ?";
            PreparedStatement pStmt 
= dbService.prepareStatement(qStr);
            pStmt.setBoolean(
1, isMain);
            dbService.executeQuery();
            
int id = 0;
            WAP_PageStructure page 
= null;
            
while (dbService.next()) {
                id 
= dbService.getInt("ID");
                page 
= new WAP_PageStructure(dataSource, id);
                page.checkExisted();
                list.add(page);
            }

        }
 finally {
            dbService.close();
        }

        
return list;
        
    }

    
    
/** 
     * 得到类型相同的List:WAP_PageStructure
     * 
@param dataSource
     * 
@param type
     * 
@return 存放WAP_PageStructure对象的ArrayList
     * 
@throws SQLException
     
*/

    
public static ArrayList getWAPPageListByType(DataSource dataSource, int type) throws SQLException {
        ArrayList list 
= new ArrayList();
        DBService dbService 
= new DBService(dataSource);
        
try {
            String qStr 
= "SELECT ID FROM WAP_PageStructure WHERE Type = ?";
            PreparedStatement pStmt 
= dbService.prepareStatement(qStr);
            pStmt.setInt(
1, type);
            dbService.executeQuery();
            
int id = 0;
            WAP_PageStructure page 
= null;
            
while (dbService.next()) {
                id 
= dbService.getInt("ID");
                page 
= new WAP_PageStructure(dataSource, id);
                page.checkExisted();
                list.add(page);
            }

        }
 finally {
            dbService.close();
        }

        
return list;        
    }
    
    
    
/** 
     * 得到子页面组成的List:WAP_PageStructure
     * 
@param dataSource
     * 
@param parentPage
     * 
@return 存放WAP_PageStructure对象的ArrayList
     * 
@throws SQLException
     
*/

    
public static ArrayList getWAPPageListByParentPage(DataSource dataSource, int parentPage) throws SQLException {
        ArrayList list 
= new ArrayList();
        DBService dbService 
= new DBService(dataSource);
        
try {
            String qStr 
= "SELECT ID FROM WAP_PageStructure WHERE ParentPage = ?";
            PreparedStatement pStmt 
= dbService.prepareStatement(qStr);
            pStmt.setInt(
1, parentPage);
            dbService.executeQuery();
            
int id = 0;
            WAP_PageStructure page 
= null;
            
while (dbService.next()) {
                id 
= dbService.getInt("ID");
                page 
= new WAP_PageStructure(dataSource, id);
                page.checkExisted();
                list.add(page);
            }

        }
 finally {
            dbService.close();
        }

        
return list;        
    }


    
/** 
     * 得到主页面相同的List:WAP_PageStructure
     * 
@param dataSource
     * 
@param mainPage
     * 
@return 存放WAP_PageStructure对象的ArrayList
     * 
@throws SQLException
     
*/

    
public static ArrayList getWAPPageListByMainPage(DataSource dataSource, int mainPage) throws SQLException {
        ArrayList list 
= new ArrayList();
        DBService dbService 
= new DBService(dataSource);
        
try {
            String qStr 
= "SELECT ID FROM WAP_PageStructure WHERE MainPage = ?";
            PreparedStatement pStmt 
= dbService.prepareStatement(qStr);
            pStmt.setInt(
1, mainPage);
            dbService.executeQuery();
            
int id = 0;
            WAP_PageStructure page 
= null;
            
while (dbService.next()) {
                id 
= dbService.getInt("ID");
                page 
= new WAP_PageStructure(dataSource, id);
                page.checkExisted();
                list.add(page);
            }

        }
 finally {
            dbService.close();
        }

        
return list;        
    }

    
    
/**
     * 
@param dataSource
     * 
@param mainPageID
     * 
@param path 
     * 
@throws SQLException
     * 
@throws IOException
     
*/

    
public static void createSinglePage(DataSource dataSource, int mainPageID, String path) throws SQLException, IOException {
        ArrayList pageList 
= getWAPPageListByMainPage(dataSource, mainPageID);
        WAP_PageStructure mainPage 
= new WAP_PageStructure(dataSource, mainPageID);
        mainPage.checkExisted();        
        StringBuffer sb 
= new StringBuffer();
        sb.append(
"<?xml version="1.0"  encoding="utf-8" ?>").append(" ");
        sb.append(
"<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">"
).append(
" ");
        sb.append(
"<wml>").append(" ");
        sb.append(
"<head>").append(" ");
        sb.append(
"<meta http-equiv="Cache-Control" content="max-age=0"/>").append(" ");
        sb.append(
"</head>").append(" ");
        sb.append(createCard(dataSource, mainPage, 
"#"));
        
        
for (int i=0; i<pageList.size(); i++{
            WAP_PageStructure temPage 
= (WAP_PageStructure)pageList.get(i);
            sb.append(createCard(dataSource, temPage, 
"#"));
        }

        
// 生成文件
        String fileName = path + mainPage.getURL() + ".wml"
        createFile(fileName, sb);
    }

    
    
private static String createCard(DataSource dataSource, WAP_PageStructure page, String sign) throws SQLException {
        StringBuffer sb 
= new StringBuffer();
        String postfix 
= (sign.equals("#")) ? "" : ".wml";
        sb.append(
"<card newcontext="false" ordered="true" id="").append(page.getURL()).append(
                
"" title="").append(page.getName()).append("">").append(" ");
        String topMsg 
= "顶部图片";
        
        String topImage 
= "<img alt=""+ topMsg
        
+"" src="120_20.gif" vspace="0" hspace="0" width="120" height="20" align="bottom"/>";
        String laciness 
= 
"<img alt="*" src="15_15.gif" vspace="0" hspace="0" width="15" height="15" align="bottom"/>";
        
// 如果是主页面,则显示logo
        if (page.isMain()) {
            sb.append(
"<p align="center" mode="nowrap">").append(" ");
            sb.append(topImage).append(
" ");
            sb.append(
"<br/>").append(" ");
            sb.append(
"</p>").append(" ");
        }

        
// 内容类型为列表 
        if (page.getType()==1{
            ArrayList pageList 
= getWAPPageListByParentPage(dataSource, page.getID());
            
for (int i=0; i<pageList.size(); i++{
                sb.append(
"<p align="center" mode="nowrap">");
                WAP_PageStructure temPage 
= (WAP_PageStructure)pageList.get(i);
                
switch (temPage.getShowType()) {
                    
case 1:
                        sb.append(laciness).append(
" ");
                        sb.append(
"<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
                                
"">").append(listNameFormat(temPage.getName(), 2)).append("</a>").append(" ");
                        sb.append(laciness).append(
" ");break;
                    
case 2:
                        sb.append(laciness).append(
" ");
                        sb.append(
"<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
                                
"">").append(listNameFormat(temPage.getName(), 1)).append("</a>").append(" ");
                        
break;
                    
case 3:
                        sb.append(
"<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
                                
"">").append(listNameFormat(temPage.getName(), 1)).append("</a>").append(" ");
                        sb.append(laciness).append(
" ");break;
                    
case 4:
                        sb.append(
"<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
                                
"">").append(listNameFormat(temPage.getName(), 0)).append("</a>").append(" ");
                        
break;
                }


                sb.append(
"</p>").append(" ");        
            }
            
        }
 else if (page.getType()==2{
            sb.append(
"<p align="left" mode="nowrap">");
            sb.append(contentFormat(page.getContent())).append(
" ");            
            sb.append(
"</p>").append(" ");    
        }

        sb.append(
"<br/>").append(" ");
        
if (page.getParentPage()!=0{
            String goBack 
= "返回上一页";
            sb.append(
"<a href="").append(sign).append(page.getParentURL()).append(postfix).append("">").append(
                    goBack).append(
"</a> ");
        }

        sb.append(
"</card>").append(" ");        
        
        
return sb.toString();
    }

    
    
/**
     * 
@param dataSource
     * 
@param mainPageID
     * 
@throws SQLException
     * 
@throws IOException
     
*/

    
public static void createMultiPage(DataSource dataSource, int mainPageID, String path) throws SQLException, IOException {
        ArrayList pageList 
= getWAPPageListByMainPage(dataSource, mainPageID);
        WAP_PageStructure mainPage 
= new WAP_PageStructure(dataSource, mainPageID);
        mainPage.checkExisted();
        
        StringBuffer sbHead 
= new StringBuffer();
        StringBuffer sb 
= new StringBuffer();
        sbHead.append(
"<?xml version="1.0"  encoding="utf-8" ?>").append(" ");
        sbHead.append(
"<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">").append(" ");
        sbHead.append(
"<wml>").append(" ");
        sbHead.append(
"<head>").append(" ");
        sbHead.append(
"<meta http-equiv="Cache-Control" content="max-age=0"/>").append(" ");
        sbHead.append(
"</head>").append(" ");
        sb.append(sbHead).append(createCard(dataSource, mainPage, 
""));
        String fileName 
= path + mainPage.getURL() + ".wml";     
        createFile(fileName, sb);
        
        
for (int i=0; i<pageList.size(); i++{
            WAP_PageStructure temPage 
= (WAP_PageStructure)pageList.get(i);
            StringBuffer strBuf 
= new StringBuffer();
            strBuf.append(sbHead).append(createCard(dataSource, temPage, 
""));
            fileName 
= path + temPage.getURL() + ".wml";
            createFile(fileName, strBuf);
        }

        
    }

    
    
/**
     * 
@param fileName
     * 
@param sb
     * 
@throws IOException
     
*/

    
public static void createFile(String fileName, StringBuffer sb) throws IOException {
        
// 生成文件
        
        File file 
= new File(fileName);
        
if (!file.exists()) {
            file.createNewFile();
        }

        FileOutputStream out 
= new FileOutputStream(file, false);
        
        out.write(sb.toString().getBytes(
"utf-8"));
        out.close();                
    }

    
    
/**
     * 
@param content
     * 
@return 格式化后的String
     
*/

    
public static String contentFormat(String content) {
        String lineSign 
= "<br/>";
        StringBuffer sbOfOut 
= new StringBuffer();
        String[] newContents 
= content.split(" ");
        
for (int i=0; i<newContents.length; i++{
            sbOfOut.append(
" ").append(newContents[i]).append(lineSign);
        }

        
return sbOfOut.toString();
    }

    
    
/**
     * 
@param name
     * 
@param photoSize
     * 
@return 格式化后的String
     
*/

    
public static String listNameFormat(String name, int photoSize) {
        String spaceSign 
= "&nbsp;&nbsp;";
        StringBuffer sbOfOut 
= new StringBuffer();
        
int length = WAP_PageStructure.LENGTH_NAME - photoSize;
        length 
-= name.length();
        
        sbOfOut.append(name);
        
        
for (int i=0; i<length; i++{
            sbOfOut.append(spaceSign);
        }

        
return sbOfOut.toString();
    }

}

        几个返回ArrayList类型的方法主要用于页面上的各种选择列表,这样就可以动态加载列表数据。由于WML使用无线上网机制,所以页面尽可能的不要太大,为此我们提供了两个方法生成文件,当文件组较小时,我们推荐使用createSinglePage(DataSource, int, String)方法,如果页面比较大我们推荐使用createMultiPage(DataSource, int, String)方法,生成多个文件。因为这两个方法的区别,在createCard(DataSource, WAP_PageStructure, String)方法中我们加入了前缀和后缀,以保证链接的正确。
        为了保证方法的效率我们使用StringBuffer提高字符串,文件生成时,我们采用的是FileOutputStream。
说明:
        在Windows平台时这个类不需要做任何改变,如果是别的平台,我们建议将其中的"顶部图片"和"返回上一页"两处中文文字,先转换成Unicode格式,然后再读取,以免出现乱码。
中文转换成Unicode方法如下:

    public static String toUnicode(String src) {
        
// set up a StringBuffer with capacity of 6 * length of src
        StringBuffer sb = new StringBuffer(src.length()*6);

        
for (int i = 0; i < src.length(); i++{
            
char c = src.charAt(i);
            
if (c < 0xff)
                sb.append(c);
            
else
                sb.append(
"/u" + Integer.toHexString((int) c));
        }


        
return sb.toString();
    }
Unicode转换成中文方法如下:
    public static String fromUnicode(String src) {
        StringBuffer sb 
= new StringBuffer(src.length());

        
for (int i = 0; i < src.length(); i++{
            
char c = src.charAt(i);
            
if (c == '/' && src.charAt(i + 1== 'u'{
                String ustr 
= src.substring(i + 2, i + 6);
                
char uc = (char) Integer.parseInt(ustr, 16);
                sb.append(uc);
                i 
+= 5;
            }
 else
                sb.append(c);
        }


        
return sb.toString();
    }
原创粉丝点击