SSM戦闘(4,5)------カテゴリ管理、製品管理

カテゴリ管理

特徴:

ノードを取得します。

ノードを追加します。

名前を変更します

分類IDを取得

再帰サブノードID

 

 

インタフェース:

 

注意:

機能の動作前に1、のような安全性試験、実施する:(セッションを使用して)に記録するかどうかを、管理者権限(役割の値をチェックしてください);パラメータは空であり、利用者は、MD5暗号化されたパスワードを記録します。

2 セット<カテゴリ>:使用すると、ハッシュコードをオーバーライドするために収集、分類と同等に設定

 

学習目標

 

再帰クエリの子ノード

 

商品管理:

 

特徴:

 

フロント機能:製品の検索、製品の詳細情報の動的な順序付きリスト、ページング機能

バックオフィス機能:製品リスト、製品の検索、写真をアップロードし、リッチテキスト、製品情報、一番下の棚上からの商品、商品を増やし、商品の更新をアップロード

 

インタフェース:

 

フロントインターフェイス:1つのダイナミック製品の検索とソートリスト; 2製品の詳細; 

背景インターフェース:1製品のリスト; 2製品検索; 3枚のアップロード写真; 4つの製品の詳細; 5フレームアップと製品ダウン; 6つの新製品や製品を改造し、7枚のリッチテキストのアップロード写真

 

注意: 

1時、書き込み、ビジネスロジック、または他のパラメータのチェックが直接リターン経由でない場合、ビジネスロジックを記述するためにチェックし、チェックします

 

学習目標:

 

0 FTPサービスをドッキング

  1. MultipartFileアップロードしたファイルは、リリース後にプロジェクトのアップロードウェブアプリのディレクトリに到着し、その後、サーバーをftpにファイルをアップロードし、Web-appディレクトリには内部のファイルをアップロード削除

 

1つのSpringMVCファイルのアップロード:

  SpringMVCファイルのアップロード:1まず、ファイルをアップロードするために使用FileServiceImplを、作成FTPUtil 2は、FTPサーバーにアップロードを作成するために使用されて作成し、ウェブアプリのファイル削除の内側に3にアップロードします

パッケージcom.eshop.service.impl。

輸入com.eshop.service.IFileService。
輸入com.eshop.util.FTPUtil。
輸入com.google.common.collect.Lists。
輸入org.slf4j.Logger。
輸入org.slf4j.LoggerFactory; 
輸入org.springframework.stereotype.Service。
輸入org.springframework.web.multipart.MultipartFile。

インポートのjava.io.File; 
インポートにjava.io.IOException; 
輸入java.util.UUID。
@Service( "iFileService")
パブリッククラスFileServiceImplはIFileService {実装
    プライベート静的ロガーロガー= LoggerFactory.getLogger(FileServiceImpl.class)を、

    @Override 
    パブリック文字列アップロード(MultipartFileファイル、文字列のパス){ 
        //文件名
        File.getOriginalFilename fileNameに=文字列(); 
        //拡張子---- abc.jpg> JPG 
        文字列fileExtensionName = fileName.substring(fileName.lastIndexOf()+ 1 ""); 
        //ファイル名をアップロードする
        文字列uploadFileName UUID.randomUUID =()のtoString()+ + fileExtensionName ;. "" 
        logger.info( "アップロードファイルアップロードフォルダ名を開始する:{}、パスをアップロード:{}、新しいフォルダ名:{}"、ファイル名、パス、uploadFileName); 
        //何の裁判官このフォルダが作成されていないが存在しない
        ファイルFILEDIR =新しい新しいファイル(パス); 
        !IF(fileDir.exists()){ 
            //書き込み可能開くには、前のフォルダを作成しますが、権限は、Tomcatにオープンする権限防ぐない
            (trueに)fileDir.setWritableを、
            fileDir.mkdirs(); 
        } 
        //完全なファイル作成
        ファイルこのtargetFile =新しいファイル(パス、 uploadFileNameを)。
        {試し 
            ファイルを。transferTo(このtargetFile)。
            //ファイルアップロードが完了した

            上でFTPサーバTARGETFILEに//アップロードを
            FTPUtil.uploadFile(Lists.newArrayList(TARGETFILE)); 
            //アップロードした後、TARGETFILE削除
            targetFile.deleteを(); 
        }キャッチ(IOExceptionをE) { 
            logger.error(E "の異常ファイルをアップロード"); 
            戻りNULL; 
        } 
        targetFile.getNameを(返します); 
    } 
}

 

パッケージcom.eshop.util。

輸入org.apache.commons.net.ftp.FTPClient。
輸入org.slf4j.Logger。
輸入org.slf4j.LoggerFactory; 

インポートのjava.io.File; 
輸入java.io.FileInputStream; 
インポートにjava.io.IOException; 
輸入はjava.util.List; 

パブリッククラスFTPUtil { 
    プライベート静的ロガーロガー= LoggerFactory.getLogger(FTPUtil.class)。
    プライベート静的な文字列ftpIp = PropertiesUtil.getProperty( "ftp.server.ip"); 
    プライベート静的な文字列FTPUSER = PropertiesUtil.getProperty( "ftp.user"); 
    プライベート静的な文字列ftpPass = PropertiesUtil.getProperty( "ftp.pass"); 

    プライベート文字列IP; 
    プライベートint型ポート。
    プライベート文字列ユーザー;
    プライベート文字列のPWD;
    FTPClient ftpClientプライベート; 

    / ** 
     * 
     * @paramのIP 
     * @paramポートポート
     * @paramユーザー
     * @paramのPWD 
     * / 
    公共FTPUtil(文字列IP、ポート、INT、ユーザーの文字列、文字列のPWD){ 
        this.ip = IP; 
        このポート= .port; 
        =ユーザーthis.user; 
        this.pwd = PWD; 
    } 

    / ** 
     *静的メソッドアップロードされたファイルを開発
     * @paramのfileList 
     * @return 
     * / 
    パブリック静的ブールuploadFile(一覧<ファイル>のfileList) IOExceptionがスロー{  
        )fTPUtil ftpUtil =新しい新しいfTPUtil(ftpIp、21は、ftpPass FTPUSERあります。
        logger.info( "FTPサーバー接続の開始を"); 
        ブールftpUtil.uploadFile結果=( "IMG"、のfileList); 
        logger.info( "接続エンドサーバー、アップロード結果は:{}"、結果); 
        戻り値の結果; 
    } 

    / ** 
     *詳細な論理アップロードファイル
     * @param remotePathは、リモートパス:LinuxのFTPサーバーは、フォルダ内にある、あなたはその後、remotePathはを使用して、フォルダの下にこのフォルダにファイルをアップロードしたい場合は
     * @paramのfileList 
     * @return 
     * / 
    プライベートブールuploadFile(文字列remotePathは、リスト<ファイル>ファイルリスト)にIOException {スロー
        ;ブール= trueにアップロードされた
        のFileInputStream FIS =ヌル; 
        // ftpサーバ接続
        IF(ConnectServer(this.ip、this.port、this.user、this.pwd)){ 
            試み{ 
                //作業ディレクトリ切り替える
                ftpClient .changeWorkingDirectory(remotePathは)。
                //バッファ設定 
                ftpClient.setBufferSize(1024)。
                //エンコード設定
                ftpClient.setControlEncoding( "UTP- 8。"); 
                タイプバイナリファイルに//ファイルタイプ
                ftpClient.setFileTypeを(FTPClient.BINARY_FILE_TYPEする); 
                //スイッチ操作モード
                ftpClient.enterLocalPassiveMode() ; 
                / * FTPへのファイルのアップロードを開始!* / 
                (ファイルFileItem:のfileList)については{ 
                    FIS新しい新=のFileInputStream(FileItem); 
                    ftpClient.storeFile(fileItem.getName()、FIS); 
                } 
            }キャッチ(IOExceptionをE){ 
                logger.error( "異常なファイルをアップロード"、電子); 
                falseに=アップロードし; 
            } {最後に
                //关闭资源 
    公共ボイドSETIP(文字列IP){ 
                fis.closeを();
                ftpClient.disconnect(); 
            } 
        } 
        アップロードを返します。
    } 

    プライベートブールconnectServer(文字列IP、INTポート、文字列のユーザは、文字列PWD){ 
        ブールisSuccess = FALSE; 
        ftpClient =新しいFTPClient(); 
        してみてください{ 
            ftpClient.connect(IP、ポート)。
            isSuccess = ftpClient.login(ユーザ、PWD)。
        }キャッチ(IOExceptionを電子){ 
            logger.error( "连接FTP服务器异常"、E)。
        } 
        戻りisSuccess。
    } 

    パブリック文字列getIp(){ 
        戻りIP。
    } 
    公共INTのgetPort(){

        this.ip = IP; 
    } 

        戻りポートと 
    } 

    公共ボイドsetPort(INTポート){ 
        this.port =ポート。
    } 

    パブリック文字列のgetUser(){ 
        戻りユーザ。
    } 

    公共ボイドSETUSER(文字列ユーザ){ 
        this.user =ユーザー。
    } 

    パブリック文字列getPwd(){ 
        PWDを返します。
    } 

    公共ボイドSETPWD(文字列のPWD){ 
        this.pwd = PWD。
    } 

    公共FTPClient getFtpClient(){ 
        ftpClientを返します。
    } 

    公共ボイドsetFtpClient(FTPClient ftpClient){ 
        this.ftpClient = ftpClient。
    } 
}

 アプリケーション:

    ( "upload.doを")@RequestMapping 
    @ResponseBody 
    {(RequestParam(名前= "upload_name"、必要= false)をMultipartFileファイル、HttpServletRequestのリクエスト@ HttpSessionのセッション、)公共ServerResponceのアップロード
        ユーザーのユーザー=(ユーザー)session.getAttribute(constとして。現在の使用者); 
        (ユーザ== NULL)が{場合
            //强制用户登录
            ServerResponce.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode()、 "用户未登录、请登录")を返します。
        } 
        IF(iUserService.checkAdminRole(ユーザ).isSuccess()){ 
            //填充业务
            列パス=でrequest.getSession()のgetServletContext()getRealPath( "アップロード")。
            ストリングtargetFileName = iFileService.upload(ファイルパス)。
            文字列のURL = PropertiesUtil.getProperty( "ftp.server.http.prefix")+ targetFileName。

            地図FILEMAP = Maps.newHashMap(); 
            fileMap.put( "URI"、targetFileName)。
            fileMap.put( "URL"、URL); 
            ServerResponce.createBySuccess(FILEMAP)を返します。
        }他{ 
            ServerResponce.createByErrorMessage( "无权限操作")を返します。
        } 
    }

 

フローのプロパティ2は、設定ファイルを読み取ります。

com.eshop.utilパッケージ; 

インポートorg.apache.commons.lang3.StringUtils; 
インポートorg.slf4j.Logger; 
インポートorg.slf4j.LoggerFactory; 

インポートにjava.io.IOException; 
インポートjava.io.InputStreamReader; 
java.utilのインポートクラス.properties; 

publicクラスPropertiesUtil { 
    プライベート静的ロガーロガー= LoggerFactory.getLogger(PropertiesUtil.class); 

    プライベート静的プロパティプロパティ; 
    / *静的コードブロックが(一度のみ)通常のブロック構造よりも優れているコードのブロック* /より優れている
    静的{ 
        fileNameに=文字列"eshop.properties"; 
        プロパティ新しい新しい=プロパティ(); 
        試み{ 
            は、Properties.load(InputStreamReaderの新しい新しい(PropertiesUtil.class.getClassLoader()getResourceAsStream(filename)で、)。 "UTF-8");
        キャッチ}(IOExceptionをE){ 
            logger.error( "異常プロファイルリード"、E); 
        } 
    } 

    / ** 
     内部得*プロファイル値
     * @paramキー
     * @return 
     * / 
    パブリック静的な文字列のgetProperty(文字列キー){ 
        //トリム、キーを左スペースを避ける()スペースストリップ
        文字列値= Properties.getProperty(key.trim()); 
        IF(StringUtils.isBlank(値)){ 
            戻りNULL; 
        } 
        )(value.trim返します。
    } 

    公共の静的な文字列のgetProperty(文字列キー、文字列defaultVaule){ 
        //スペースが(トリム、キーを左避ける)スペースストリップ
        文字列値= properties.getProperty(key.trim() )。
        (StringUtils.isBlank(値))であれば{ 
            defaultVauleを返します。
        } 
        )(value.trim返します。
    } 
}

 

3抽象的なPOJO、BO、変換関係のVOオブジェクトとソリューション

4ジョダ時のクイックスタート

com.eshop.utilパッケージ; 

インポートorg.apache.commons.lang3.StringUtils; 
インポートorg.joda.time.DateTime; 
インポートorg.joda.time.format.DateTimeFormat; 
インポートorg.joda.time.format.DateTimeFormatter; 

インポートjava.util.Date; 

パブリッククラスDateTimeUtil { 
    //時間のJodaの時間の使用は、処理する
    //1.string - > 2.日付- >文字列
    プライベートSTANDARD_FORMAT静的な文字列=「MM-DD-YYYYのHH:MMを:SS「; 
    / ** 
     *受信イベント、時間列フォーマット手段フォーマット
     * @param dateTimeStr 
     * @param formatStrイベント形式
     * @return 
     * / 
    パブリック静的StrToDate日(dateTimeStrストリング、ストリングformatStr){
        DateTimeFormatterてDateTimeFormatter = DateTimeFormat.forPattern(formatStr)。
        日時のdateTime = dateTimeFormatter.parseDateTime(dateTimeStr)。
        dateTime.toDateを返します(); 
    } 

    公共の静的な文字列dateToStr(日付、文字列formatStr){ 
        IF(日付== NULL){ 
            StringUtils.EMPTYを返します。
        } 
        のDateTimeのdateTime =新しい日時(日付); 
        dateTime.toString(formatStr)を返します。
    } 

    / ** 
     *字符串装换时间格式、默认事件格式
     * @param dateTimeStr 
     * @return 
     * / 
    パブリック静的日付strToDate(文字列dateTimeStr){
        DateTimeFormatterてDateTimeFormatter = DateTimeFormat.forPattern(STANDARD_FORMAT)。
        日時のdateTime = dateTimeFormatter.parseDateTime(dateTimeStr)。
        dateTime.toDateを返します(); 
    } 

    公共の静的な文字列dateToStr(日付){ 
        IF(日付== NULL)が{ 
            StringUtils.EMPTYを返します。
        } 
        のDateTimeのdateTime =新しい日時(日付); 
        dateTime.toString(STANDARD_FORMAT)を返します。
    } 
}

 

 

5静的ブロック

静的コードブロック(一度だけ)は、通常のブロック構造よりも優れているコードブロックよりも優れています

 

6 MyBatisの-PageHelperページング及び動的順序づけ

7 MyBatisのリストメソッドのセットを横切ります

ここで、文の8 MyBatisの動的アセンブリ

 

おすすめ

転載: www.cnblogs.com/Lemonades/p/11418192.html