ケースのニーズ:
1. index.htmlのページを提供し、ページには、地方のドロップダウンリストを持っています
2.ページのロードがすべての州をロードするためのAJAXリクエストを送ります
地方の3 Aリストは変更されないまま、各時間後にページを更新するのRedisから取得されます
*注:使用が頻繁に発生していないいくつかのデータの変更をキャッシュするのRedis。
*データベースのデータが変更されると、我々はキャッシュを更新する必要があります。
*表の追加や削除は、データベース関連の操作を実行するために、我々はRedisのは、再び保存され、キャッシュされたデータ、クリアする必要が
対応するサービスCRUDメソッド、Redisのデータ削除に*を。
フロントページ:
<!DOCTYPE HTML > < HTML LANG = "EN" > < 頭> < メタのcharset = "UTF-8" > < タイトル>タイトル</ タイトル> < スクリプトSRC =「JS / jQueryの-3.3.1.min.js " > </ スクリプト> < スクリプト> $(関数(){ // AJAXリクエストを送信し、データがロードされるすべての州 $に.get(" provinceServlet " 、{}、機能(データ){ // [{ "ID":1、 "名前": "北京"}、{ "ID":2、 "名称": "上海"}、{ "ID":3 "名前": "广州"} 、{ "ID":4、 "名前": "陕西"}] // 1获取選択 するvar 州= $(" #province " )。 // 2.遍历JSON数组 $(データ).each(関数(){ // 3.创建<オプション> のvar オプション= " <オプション名= ' " + この.ID + " '> " + 本。名前+ " </オプション> " ; //4.的APPEND追加オプションの選択调用 province.append(オプション)。 }); }); });
</ スクリプト> </ ヘッド> < 身体> < 選択のid = "州" > < オプション> -请选择省份- </ オプション> </ 選択> </ ボディ> </ HTML >
provinceServlet:
@WebServlet( "/ provinceServlet" ) パブリック クラス ProvinceServletが延びているのHttpServletは{ 保護された ボイドのdoPost(HttpServletRequestのリクエスト、HttpServletResponseの応答)スローServletExceptionがは、IOException { / * // 1调用サービス查询 ProvinceServiceサービス=新しいProvinceServiceImplを(); 一覧<省>リスト= service.findAll(); 。// 2序列化リスト为JSON ObjectMapperマッパー=新しいObjectMapper(); ストリングJSON = mapper.writeValueAsString(リスト)。* / // 1.调用サービス查询 ProvinceServiceサービス= 新しいですProvinceServiceImpl(); ストリングJSON = service.findAllJson()。 System.out.println(JSON)。 // 3.响应结果 response.setContentType( "アプリケーション/ JSON;のcharset = UTF-8" )。 response.getWriter()書き込み(JSON)。 } 保護された ボイドのdoGet(HttpServletRequestのリクエスト、HttpServletResponseの応答)スローServletExceptionがは、IOException { この.doPost(要求、応答)。 } }
provinceServiceインタフェースとprovinceServiceImplコード:
パブリック インターフェースProvinceService { パブリックリスト<州> のfindAll(); 公共の文字列findAllJson(); }
================================================= ==================
パブリック クラス ProvinceServiceImpl 実装ProvinceService { // 声明DAO プライベート ProvinceDaoのDAO = 新しいProvinceDaoImpl(); @Override パブリックリスト<州> のfindAll(){ 戻りdao.findAll()。 } / ** 使用缓存のRedis * / @Override 公衆FindAllJson文字列(){ // 1 Redisのクエリデータが開始 // 1.1 Redisの取得クライアント接続 Jedis jedis = JedisPoolUtils.getJedis(); 文字列province_json = jedis.get( "州" ); // 2の分析データprovince_json NULLかどうか のiF(province_json == NULL || province_json.length()== 0 ){ // Redisのデータなし のSystem.out.println( "データなしでのRedis、データベースを照会..." ); // 2.1以下からのクエリデータ 一覧<省> PS = dao.findAll(); // JSONリストに2.2シーケンス ObjectMapperマッパーは= 新しい新しいですObjectMapper(); 試み{ province_json = mapper.writeValueAsString(PS); } キャッチ(JsonProcessingException E){ e.printStackTrace(); } // のRedisのに2.3 JSONデータ jedis.set( "州" 、province_json); / / 戻り接続 jedis.close(); } 他{ するSystem.out.println( "クエリキャッシュ内のRedisのデータ..." ); } 戻りprovince_json; } }
provinceDaoインタフェースとprovinceDaoImplコード:
パブリック インターフェースProvinceDao { パブリックリスト<州> のfindAll(); } ================================================= ========== パブリッククラス ProvinceDaoImplの実装ProvinceDao { // 1.声明成员变量jdbctemplement プライベート JdbcTemplateテンプレート= 新しいJdbcTemplate(JDBCUtils.getDataSource()); @Override 公共一覧<省> のfindAll(){ // 1.定义SQL 文字列のSQL = "SELECT * FROM州" 。 // 2.执行SQL 一覧<省>リスト= template.query(SQL、 新しい BeanPropertyRowMapper <省>(省。クラス)); 戻り値のリスト。 } }
JDBCUtils:
/ ** *ツールは、JDBC接続プールDurid使用 * / パブリック クラスJDBCUtils { プライベート 静的; DataSourceのDS 静的{ 試み{ // 1.負荷プロファイル のプロパティプロ= 新しい新しいプロパティ(); // 使用するクラスローダの負荷プロファイル、取得をバイトの入力ストリーム 。入力ストリームIS = JDBCUtils クラス .getClassLoader()getResourceAsStream( "druid.properties" ;) pro.load(IS); // 2.接続プールオブジェクトの初期化 DS = DruidDataSourceFactory.createDataSource(PRO)を; } キャッチ(IOExceptionをE){ e.printStackTrace(); } キャッチ(例外e){ e.printStackTrace(); } } / ** *接続プール・オブジェクトを取得 * / パブリック 静的データソースをgetDataSource(){ 戻りDSを; } / ** *取得接続された接続オブジェクト * / パブリック 静的接続のgetConnection()スローのSQLException { 戻り ds.getConnectionを(); } }
druid.propertiesとjedis.propertiesとSQLファイル:
プレゼンテーションインタフェース: