JavaEE 设计模式
生活随笔
收集整理的這篇文章主要介紹了
JavaEE 设计模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
JDBC | 模板模式&策略模式 這兩天自己的機(jī)子出了怪現(xiàn)象,cmd窗口打不開,組策略編輯器打不開,但是有時(shí)可以打開,好象被人控制了一般,花十塊錢升級(jí)了一下病毒庫(金山毒霸),查了一天毒(一遍又一遍)...無病毒,最后還原了系統(tǒng),至今不知道什么原因...見鬼了...
拿登陸模擬程序?qū)崿F(xiàn)了如題兩個(gè)模式的應(yīng)用,用PreparedStatement防止了類似sql注入的不安全因素:
模板模式:
策略模式:
正是這些模式的引進(jìn),才讓我們對(duì)數(shù)據(jù)的持久化實(shí)現(xiàn)技術(shù)越來越傻瓜,hibernate是從這些基礎(chǔ)上發(fā)展過來的...
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生
拿登陸模擬程序?qū)崿F(xiàn)了如題兩個(gè)模式的應(yīng)用,用PreparedStatement防止了類似sql注入的不安全因素:
模板模式:
| package cn.zhd; import cn.zhd.*; import java.sql.*; import org.apache.log4j.*; //模板類 abstract class Jdbc_Template { ??? Connection cn=null; ??? PreparedStatement pstatm=null; ??? ResultSet rs=null; ??? Configuration config=null; ??? Logger log=Logger.getLogger(Jdbc_Template.class); ??? public void setConfig(Configuration config){ ??? ??? this.config=config; ??? } ??? public void execute(String user,String pass){ ??? ??? try{ ??? ??? ??? Class.forName(config.getValue("driver")); ??? ??? ??? ??? cn=DriverManager.getConnection(config.getValue("URL"),config.getValue("user"),config.getValue("pass"));??? ??? ??? ??? doExecute(pstatm,user,pass); ??? ??? }catch(Exception e){ ??? ??? ??? log.warn(e); ??? ??? ??? e.printStackTrace(); ??? ??? } ??? ??? finally{ ??? ??? ??? if(cn != null)??? { ??? ??? ??? ??? try{ ??? ??? ??? ??? ??? if(pstatm != null){ ??? ??? ??? ??? ??? ??? try{ ??? ??? ??? ??? ??? ??? ??? if(rs != null){ ??? ??? ??? ??? ??? ??? ??? ??? try{ ??? ??? ??? ??? ??? ??? ??? ??? ??? rs.close();??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? }catch(Exception e){ ??? ??? ??? ??? ??? ??? ??? ??? ??? log.warn(e); ??? ??? ??? ??? ??? ??? ??? ??? ??? e.printStackTrace(); ??? ??? ??? ??? ??? ??? ??? ??? } ??? ??? ??? ??? ??? ??? ??? } ??? ??? ??? ??? ??? ??? ??? pstatm.close(); ??? ??? ??? ??? ??? ??? }catch(Exception e){ ??? ??? ??? ??? ??? ??? ??? log.warn(e); ??? ??? ??? ??? ??? ??? ??? e.printStackTrace(); ??? ??? ??? ??? ??? ??? } ??? ??? ??? ??? ??? } ??? ??? ??? ??? ??? cn.close(); ??? ??? ??? ??? }catch(Exception ex){ ??? ??? ??? ??? ??? log.warn(ex); ??? ??? ??? ??? ??? ex.printStackTrace(); ??? ??? ??? ??? } ??? ??? ??? }??? ??? ??? ??? ??? ??? ??? } ??? } ??? ??? ??? abstract void doExecute(PreparedStatement pstatm,String user,String pass); ??? ??? } //繼承自模板 public class Jdbc_Template extends Jdbc_Template{ ??? ??? public void doExecute(PreparedStatement pstatm,String user,String pass){ ??? ??? boolean foo=false; ??? ??? if(cn==null){ ??? ??? ??? log.warn("connect is failure!"); ??? ??? ??? return; ??? ??? } ??? ??? String query="select * from login where user=? and pass=?"; ??? ??? try{ ??? ??? ??? pstatm=cn.prepareStatement(query); ??? ??? ??? pstatm.setString(1,user); ??? ??? ??? pstatm.setString(2,pass); ??? ??? ??? rs=pstatm.executeQuery(); ??? ??? ??? while(rs.next()){ ??? ??? ??? ??? ??? ??? foo=true; ??? ??? ??? ??? break; ??? ??? ??? } ??? ??? ??? if(foo){ ??? ??? ??? ??? ??? ??? ??? log.warn("welcome"+"? "+user); ??? ??? ??? } ??? ??? ??? else ??? ??? ??? ??? log.warn("failure!"); ??? ??? }catch(SQLException e){ ??? ??? ??? log.warn(e); ??? ??? ??? e.printStackTrace(); ??? ??? }??? ??? } ??? ??? public static void main(String []args){ ??? ??? Logger log=Logger.getLogger(JdbcTemplate.class); ??? ??? try{ ??? ??? ??? Configuration cfg=new Configuration("/JdbcDemo.properties"); ??? ??? ??? JdbcTemplate jm=new JdbcTemplate(); ??? ??? ??? jm.setConfig(cfg); //??? ??? ??? 用spring的話,上面的代碼就可以不寫了,直接用xml配置 ??? ??? ??? jm.execute("zz","123"); ??? ??? }catch(Exception e){ ??? ??? ??? log.warn(e); ??? ??? ??? e.printStackTrace(); ??? ??? } ??? } } |
策略模式:
| package cn.zhd; import java.io.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.log4j.Logger; interface MyPolicy{ ??? public void Login(Connection cn,PreparedStatement pstatm,Configuration config,String user,String pass); } //登陸算法1 class MyStrategy1 implements MyPolicy{ ??? public void Login(Connection cn,PreparedStatement pstatm,Configuration config,String user,String pass){ ??? ??? boolean foo=false; ??? ??? Logger log=Logger.getLogger(MyStrategy1.class);?? ?? ??? ??? try{ ??? ??? ??? String query=config.getValue("select1"); ??? ??? ??? pstatm=cn.prepareStatement(query); ??? ??? ??? pstatm.setString(1,user); ??? ??? ??? pstatm.setString(2,pass); ??? ??? ??? ResultSet rs=pstatm.executeQuery(); ??? ??? ??? while(rs.next()){ ??? ??? ??? ??? foo=true; ??? ??? ??? ??? break; ??? ??? ??? } ??? ??? ??? if(foo){ ??? ??? ??? ??? System.out.print("sdsdf"); ??? ??? ??? ??? log.warn("cheng gong denglu!"); ??? ??? ??? } ??? ??? ??? else ??? ??? ??? ??? log.warn("denglu shibai"); ??? ??? }catch(SQLException e){ ??? ??? ??? log.warn(e); ??? ??? } ??? } } //登陸算法2 class MyStrategy2 implements MyPolicy{ ??? public void Login(Connection cn,PreparedStatement pstatm,Configuration config,String user,String pass){ ??? ??? boolean foo_u=false; ??? ??? boolean foo_p=false; ??? ??? Logger log=Logger.getLogger(MyStrategy2.class); ??? ??? ??? ??? ??? ??? try{ ??? ??? ??? String query1=config.getValue("select2"); ??? ??? ??? String query2=config.getValue("select3"); ??? ??? ??? pstatm=cn.prepareStatement(query1); ??? ??? ??? ??? ??? ??? pstatm.setString(1,user); ??? ??? ??? ResultSet rs=pstatm.executeQuery();??? ??? ??? ??? while(rs.next()){ ??? ??? ??? ??? foo_u=true; ??? ??? ??? } ??? ??? ??? if(foo_u){ ??? ??? ??? ??? pstatm=cn.prepareStatement(query2); ??? ??? ??? ??? pstatm.setString(1,user); ??? ??? ??? ??? ResultSet rst=pstatm.executeQuery(); ??? ??? ??? ??? while(rst.next()){ ??? ??? ??? ??? ??? System.out.println(rst.getString("pass") + pass.toString()); ??? ??? ??? ??? ??? //caonima ??? ??? ??? ??? ??? if(rst.getString("pass").equals(pass.toString())){ ??? ??? ??? ??? ??? ??? foo_p=true; ??? ??? ??? ??? ??? ??? System.out.println(rst.toString()); ??? ??? ??? ??? ??? }??? ??? ??? ??? ??? } ??? ??? ??? } ??? ??? ??? if(foo_u && foo_p){ ??? ??? ??? ??? log.warn("weclome" +"? "+ user+"!"); ??? ??? ??? } ??? ??? ??? else if(foo_u==false){ ??? ??? ??? ??? log.warn("user"+"is"+"not"+"this"); ??? ??? ??? } ??? ??? ??? else if(foo_p==false) ??? ??? ??? ??? log.warn("pass"+"is"+"not"+"this"); ??? ??? ??? ??? ??? ??? }catch(SQLException e){ ??? ??? ??? log.warn(e); ??? ??? } ??? } } public class JdbcStrategy { ??? MyPolicy mp1=new MyStrategy1(); ??? MyPolicy mp2=new MyStrategy2(); ??? Connection cn=null; ??? PreparedStatement pstatm=null; ??? ResultSet rs=null; ??? Configuration config=null; ??? Logger log=Logger.getLogger(JdbcStrategy.class); ??? public void setConfig(Configuration config){ ??? ??? this.config=config; ??? } ??? public void executeLogin(String user,String pass){ ??? ??? try{ ??? ??? ??? Class.forName(config.getValue("driver")); ??? ??? ??? cn=DriverManager.getConnection(config.getValue("URL"),config.getValue("user"),config.getValue("pass")); ??? ??? ??? if(cn==null){ ??? ??? ??? ??? log.warn("connect is failure"); ??? ??? ??? ??? return; ??? ??? ??? } ??? //控制運(yùn)行時(shí)所選登陸算法??? ??? ??? //??? ??? mp1.Login(cn,pstatm,config,user,pass); ??? ??? ??? mp2.Login(cn,pstatm,config,user,pass); ??? ??? }catch(ClassNotFoundException e){ ??? ??? ??? log.warn(e); ??? ??? }catch(SQLException e){ ??? ??? ??? log.warn(e); ??? ??? } ??? ??? finally{ ??????????? if(cn != null)??? { ??????????????? try{ ??????????????????? if(pstatm != null){ ??????????????????????? try{ ??????????????????????????? if(rs != null){ ??????????????????????????????? try{ ??????????????????????????????????? rs.close();?????????????????????????????????? ??????????????????????????????? }catch(Exception e){ ??????????????????????????????????? log.warn(e); ??????????????????????????????????? e.printStackTrace(); ??????????????????????????????? } ??????????????????????????? } ??????????????????????????? pstatm.close(); ??????????????????????? }catch(Exception e){ ??????????????????????????? log.warn(e); ??????????????????????????? e.printStackTrace(); ??????????????????????? } ??????????????????? } ??????????????????? cn.close(); ??????????????? }catch(Exception ex){ ??????????????????? log.warn(ex); ??????????????????? ex.printStackTrace(); ??????????????? } ??????????? } ??? ??? }?? ??? } ??? public static void main(String[] args) { ??? ??? Logger log=Logger.getLogger(JdbcStrategy.class); ??????? try{ ??????????? Configuration cfg=new Configuration("/JdbcDemo.properties"); ??????????? JdbcStrategy js=new JdbcStrategy(); ??????????? js.setConfig(cfg); ??????????? js.executeLogin("zhd","223"); ??????? }catch(Exception e){ ??????????? log.warn(e); ??????????? e.printStackTrace(); ??????? } ??? } } |
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生
總結(jié)
以上是生活随笔為你收集整理的JavaEE 设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第五天下午
- 下一篇: AJAX的安全性及AJAX安全隐患