<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java綠地(~ming~)

    Java 草地

    常用鏈接

    統計

    最新評論

    網上書店(jsp+servlet+javabean)

    網上書店(jsp+servlet+javabean)

    一.  過濾器的使用:

    1.     對中文字符的處理:(若采用mssql略簡單,mysql需設置為UTF-8,本項目數據庫采用gb2312)

    a. public class SetCharacterEncoding  implements Filter { //必須實現接口類的所有方法

    public SetCharacterEncoding() {  super(); } public void destroy() {     }

       public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)  throws IOException,ServletException{

        request.setCharacterEncoding("gb2312");chain.doFilter(request,response);    }

    public void init(FilterConfig filterConfig) throws ServletException {  } }

    b.除在請求與響應處理外,對數據庫的操作也進行過濾

    url="jdbc:mysql://127.0.0.1:3306/DB?useUnicode=true&characterEncoding=GB2312";

    c.也可以采取頁面函數進行字符編碼轉換:

    <%! public String convert(String s){ try{

    return new String(s.getBytes("ISO-8859-1"),"GB2312"); }

    catch(Exception e){return null;} } %>

    2.     對用戶權限的進行過濾,配置為:<url-pattern>/user/*</url-pattern> /表示項目全路徑

    public class UserFilter implements Filter {

    String PAGE="/bookshop/admin/admin1.jsp" ;  protected FilterConfig filterConfig;

        public void doFilter(ServletRequest req, ServletResponse res,

                FilterChain chain) throws IOException, ServletException {

            HttpServletRequest hreq=(HttpServletRequest)req;

            HttpServletResponse hres=(HttpServletResponse)res;//只有Http才有session

            HttpSession session=hreq.getSession();   String name="";

        try{ name=(String)session.getAttribute("name");

             if(name!=null){chain.doFilter(req, res);}else{hres.sendRedirect(PAGE);}}

        catch(Exception e){ e.printStackTrace();}   }

    public void destroy(){this.filterConfig=null;}

        public void init(FilterConfig config) throws ServletException {

          this.filterConfig=config; }}




    .CSS經典控制樣式:

    .button {BORDER-RIGHT: #9ac3d8 1px solid; BORDER-TOP: #cde7f4 1px solid; FONT-WEIGHT: normal; FONT-SIZE: 12px; BACKGROUND: #bedbea; BORDER-LEFT: #cde7f4 1px solid; COLOR: #0076c9; BORDER-BOTTOM: #9ac3d8 1px solid; FONT-STYLE: normal; FONT-FAMILY: 宋體, Arial, Helvetica, sans-serif; HEIGHT: 18px}

    .inputbox { BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; FONT-WEIGHT: normal; FONT-SIZE: 12px; BACKGROUND: #ffffff; BORDER-LEFT: #cccccc 1px solid; COLOR: #666680; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: 宋體, Courier, Helvetica, sans-serif }// <TABLE cellSpacing=2 cellPadding=0 align=center border=0>不同表格無縫

    .txt_db { FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #666680; LINE-HEIGHT: 23px; FONT-FAMILY: "宋體", "Courier", "Helvetica", "sans-serif"

    .tb_dotted { BORDER-RIGHT: #cccccc 1px dotted; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted }

    .top_tb_solid {BORDER-RIGHT: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; WIDTH: 768px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 25px; BACKGROUND-COLOR: #f2f2f2}




    二. 
    管理員模塊:

    1.如果沒有過濾器可以采用:<% String name=(String)session.getAttribute("name");

    try { if(!name.equals("admin")){response.sendRedirect("/project/page.jsp");  } }

       catch(Exception e){out.print("對不起,您不是管理員!");  }%>

    2.防止空值出現而使單獨頁面無法調試:(雖然可以用空判斷但是空也可能指向一個內存地址)

    <% String n=null; ResultSet  rs=null;

    n=request.getParameter("id");    rs=DBBean.executeQuery(sql);

        if(rs!=null && rs.next()){   } %>   <td> <%= rs.getInt("id") %></td>

     

    3.用Servlet對JDBC進行封裝 action=”/project/servlet?id=”//此處要寫滿全路徑

    public class UpdateServlet extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException { try{ String myid=request.getParameter("id");

    String sql="update table set title='"+title+"' "+"where id="+myid;

    Connection conn=DBContext.getInstance.getConnection();//得到一個連接

    Statement stmt=conn.createStatement();   int i=stmt.executeUpdate(sql);

    if(i>0){response.sendRedirect("/project/page.jsp");}}

    catch(Exception e){ e.printStackTrace();}   }

    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ doGet(req,res);   }  }


    4.實現表單自動提交功能: <script language=javascript>

    setInterval("document.表單名.submit()",10000000)</script> 



    .登陸模塊:

    1.     javasript對登陸控制

    <form name="form1" method="post" action="/project/servlet" onSubmit="return check()">

    <SCRIPT language=javascript>

    function check(){

    var emailreg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/;var pwdreg = /[a-z0-9]$/;

    if ((document.form1.name.value)=="")

    {window.alert ('用戶名不能為空');document.form1.name.focus();return false;}

    else if ((document.form1.name.value.length)<3){window.alert ('長度不能小于3 ');

    document.form1.name.focus();return false; }

    else if (form1.password.value!=form1.password1.value)

    {window.alert ('兩次輸入的密碼不一致');document.form1.pwd2.focus();return false;}

    else if ((!emailreg.test(document.form1.email.value))&&(document.form1.email.value!=''))

    {window.alert ('Email的格式不正確');document.form1.email.focus();return false;}

    else  return true; } </SCRIPT>



    2.注冊時間類型的處理:因為sql.Date( )必須有Long Date參數,a.如果是在sql插入系統時間則

    java.sql.Date date=new java.sql.Date(new java.util.Date().getTime());


    3.忽視大小寫:
    if(name.equalsIgnoreCase("admin")&&paw.equalsIgnoreCase("admin"))


    4.用戶判斷:
    <%  String sql=" select count(*)  from table where name like '"+name+"'  ";

      ResultSet rs=DBBean.executeQuery(sql);   rs.next( );

      int i=rs.getInt(1); if(i!=0)  { session.setAttribute("name",name); }    %>


    5.為防止<%=param%>初次調用顯示為null:

    <% String name=""; if(!session.isNew()){name=(String)session.getAttribute("name");

                        if(name==null)  name="";}   %>



    6.用include根據用戶顯示界面:

    <% String name1=null;name1=(String)session.getAttribute("name"); if(name1!=null){ %>

     <form  name="form1" class="inputbox" > 要顯示的內容:</form>  

      <% } if(name1= =null) {  %>

    <form action="forward.jsp" method="post" name="form1" class="inputbox"></form><% } %>



    .查詢模塊:
    <%  ResultSet rs=null; String idh=request.getParameter("text");

    String var=request.getParameter("select");   if(var.equals("按圖書編號查詢"))

           {  rs=DDBean.executeQuery("select * from book where id like '%"+idh+"%'"); }

    else if(var.equals("按圖書書名查詢"))

           { rs=DDBean.executeQuery("select * from book where title  like '%"+idh+"%'"); }

    if(rs!=null) { while(rs.next()){  %> 顯示內容:   <% }  }   %>



    .購物車:頁面用到:DBBean,ShoppingCart,BookDB,BookDetails四個javaBean

    1.添加,刪除和清空貨物:

    <% if(request.getParameter("Add")!=null){

            int id=Integer.parseInt(request.getParameter("Add"));//把得到的參數轉換

            BookDetails book=bookDB.getBookDetails(id);  cart.add(id,book);  }

       else if(request.getParameter("Remove")!=null){

            int id=Integer.parseInt(request.getParameter("Remove")); cart.remove(id); }

       else if(request.getParameter("Clear")!=null){  cart.clear();}  %>

    備注:若cart.add中的id是String類型:cart.add(new Integer(id).toString(),book);

    2.顯示購物車書目總數:您的購物車內有<%=cart.getNumberOfItems()%> 本書

       顯示購物車書目總價:總額;<%=cart.getTotal()%> 元


    3.迭代循環顯示出每本書:

    <% Iterator i=cart.getItems().iterator();   while(i.hasNext()){

       ShoppingCartItem item=(ShoppingCartItem)i.next();

       BookDetails book=(BookDetails)item.getItem();  %>

    <tr>

    <td><a href="showcart.jsp?Add=<%=book.getId()%>">添加</a> <%=item.getQuantity()%>/>

    <td><a href="cartbook.jsp?id=<%=book.getId()%>"><%=book.getTitle()%></a></td>

    <td align="center"><%=book.getPrice()%></td>

    <td><a href="showcart.jsp?Remove=<%=book.getId()%>">刪除</a></td>

    </tr> <% } %>   <p><a href="showcart.jsp?Clear=clear">清空購物車</a></p>

    4.對庫存的操作,可在顯示購物車的頁面顯示<%=saleAmount%>

      購物車對庫存的操作(付帳頁面): <& bookDB.buyBooks(cart);%>

    5.得到超鏈接當前的路徑:<%=request.getContextPath()%>/page.jsp

     

    BookDetails.java(書的詳細信息)

    public class BookDetails {

    private int  id=0;

    private String title=null;

    private String  name=null;

    private float price=0;

    private String description=null;

    private String saleAmount=null;

    public BookDetails( ){   }

    public BookDetails(int id, String title, String name, float price, String description,String  saleAmount)

    getter/setter( ){ }

    //有參構造方法供BookDB插入書籍

     

    ShoppingCartItem.java(將書封裝成一個類整體)

    public class ShoppingCartItem {

        Object item;    int quantity;

    public ShoppingCartItem(Object anItem) {

        item = anItem;  quantity = 1;   }

    //有參構造方法ShoppingCart調用封裝書成類

    public void incrementQuantity() { quantity++; }

    public void decrementQuantity() { quantity--; }

     

    public Object getItem( ) { return item;   }

    public int getQuantity( ) { return quantity; }}

    //這兩個getter供BookDB和ShoppingCart調用

     
     

     

     

     


     

    BookDB.java是數據庫與購物車頁面之間的紐帶

    public class BookDB {     

    public BookDetails getBookDetails(int id)throws Exception{Connection conn=null;//得到具體書

        PreparedStatement prepStmt=null;   ResultSet rs=null;

    try{conn=DBContext.getInstance.getConnection();

               String selectStatement="select * from book where id=?";

    prepStmt=conn.prepareStatement(selectStatement); prepStmt.setInt(1,id);

         rs=prepStmt.executeQuery(); if(rs.next()){

    BookDetails bd=new BookDetails(rs.getInt(1),rs.getString(2),rs.getString(3),

    rs.getFloat(4),rs.getString(5), rs.getString(6));

    prepStmt.close(); return bd;    }else {return null;}  }

    finally{rs.close(); conn.close(); prepStmt.close(); }  }

     

    public void buyBooks(ShoppingCart cart)throws Exception{Connection conn=null;//對庫存的操作

            Collection items=cart.getItems();   Iterator i=items.iterator();

    try{   conn=DBContext.getInstance.getConnection(); conn.setAutoCommit(false);    while(i.hasNext()){ ShoppingCartItem sci=(ShoppingCartItem)i.next();

        BookDetails bd=(BookDetails)sci.getItem(); int id=bd.getId();

        int quantity=sci.getQuantity(); buyBook(id,quantity,conn);}

    conn.commit();conn.setAutoCommit(true);}

    catch(Exception ex){conn.rollback();throw ex;} finally{conn.close();   }   }

     

    public void buyBook(int id,int quantity,Connection conn)throws Exception{//調用id和購買數量

    PreparedStatement prepStmt=null;ResultSet rs=null;

    try{ String selectStatement="select * from book where id=?";

            prepStmt=conn.prepareStatement(selectStatement); prepStmt.setInt(1,id);

             rs=prepStmt.executeQuery(); if(rs.next()){ prepStmt.close();

            String updateStatement="update book set saleAmount=saleAmount-?where id=? ";

        prepStmt=conn.prepareStatement(updateStatement);prepStmt.setInt(1, quantity);//第一個?

        prepStmt.setInt(2, id); prepStmt.executeUpdate();  prepStmt.close(); }  }

    finally{   rs.close();prepStmt.close();        }   }   }

     


    ShoppingCart.java(購物車的實現功能)

    public class ShoppingCart{ HashMap items=null; int numberOfItems=0;//調用多個Item只能用散列表

    public ShoppingCart() { items = new HashMap();  }//構造方法實例化一個散列表

     public synchronized void add(int id, BookDetails book) {   if(items.containsKey(id)) {

       ShoppingCartItem scitem = (ShoppingCartItem) items.get(id);//調用散列表的get方法取出對象

       scitem.incrementQuantity();  } else {

    ShoppingCartItem newItem =new ShoppingCartItem(book);  items.put(id,newItem);}

       numberOfItems++;  }//如果書存在了單種書+1,如果書不存在根據書的id存放在散列表里面

    public synchronized void remove(int id) {    if(items.containsKey(id)) {

       ShoppingCartItem scitem = (ShoppingCartItem) items.get(id); scitem.decrementQuantity();

       if(scitem.getQuantity() <= 0)items.remove(id);  numberOfItems--; }  }

    protected void finalize( ) throws Throwable { items.clear();  }//用于釋放內存

    public synchronized void clear() {items.clear(); numberOfItems = 0; }

    //getter方法:

    public synchronized Collection getItems( ) {return items.values(); }//values方法返回集合迭代

    public synchronized int getNumberOfItems( ) { return numberOfItems;  }

    public synchronized double getTotal( ) {    double amount = 0.0;

        for(Iterator i = getItems().iterator(); i.hasNext(); ) {

        ShoppingCartItem item = (ShoppingCartItem) i.next();//購物車的集合里面迭代Item書種的類

        BookDetails bookDetails = (BookDetails) item.getItem();//每個Item又調用具體書目的信息

        amount += item.getQuantity() * bookDetails.getPrice();    } return roundOff(amount); }

      private double roundOff(double x) {long val = Math.round(x*100); return val/100.0;  } }

    posted on 2007-07-10 20:34 mrklmxy 閱讀(5052) 評論(20)  編輯  收藏

    評論

    # re: 網上書店(jsp+servlet+javabean) 2007-09-24 13:25 ←OR→

    謝謝咯!!!!!!!!!!!謝謝咯!!!!!!!!!!!謝謝咯!!!!!!!!!!!謝謝咯!!!!!!!!!!!謝謝咯!!!!!!!!!!!  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean) 2008-01-27 18:08 xixi

    謝謝
      回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean) 2008-11-03 00:31 金秋家圓夢

    很好  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean) 2009-04-05 09:59 獨孤行

    既然使用了Servlet,為什么還在jsp頁面用<% %>這個呢,還不如直接
    jsp+javabean得了,完全沒體現出Jsp model2 mvc的強大  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean) 2009-04-28 14:15 momo

    你寫得真好,但我看不懂  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean) 2009-09-25 00:10 何同學

    這位朋友,可否麻煩您把網上書店(jsp+servlet+javabean)的完整源碼發一份給我:hezm66@163.com,多謝。  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean)[未登錄] 2010-05-15 10:39 yan

    能不能給我發一份完整的源代碼呀??多謝啦!!急用  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean)[未登錄] 2010-05-15 10:40 yan

    哦,我的郵箱dang_2008_@126.com.十分感謝  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean) 2010-08-26 23:34 mos

    能不能發一份完整源碼和數據庫啊 謝謝啊
    335952566@qq.com  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean) 2011-06-09 08:50 zpxia22

    能不能發一份完整源碼和數據庫啊 急用 謝謝謝謝 郵箱是1085883822@qq.com  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean) 2011-11-07 17:30 juan

    能不能發一份完整源碼和數據庫啊 急用 謝謝謝謝 郵箱是576114610@qq.com  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean) 2012-02-18 16:46 wangaor

    能不能給我發一份源代碼。謝謝了!wangaor@126.com  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean)[未登錄] 2012-03-11 05:22 kevin

    求大蝦發一份完整源代碼供詳細參考啊,萬分感謝了!!!kevinding0218@gmail.com  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean) 2012-05-13 12:43 mj

    能不能給我發一份完整的源代碼呀??多謝啦!!急用
    郵箱:mjtx.jianyang@qq.com  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean)[未登錄] 2012-10-21 16:21 123

    求源代碼 謝謝 ztq0701@163.com  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean)[未登錄] 2013-05-27 12:36 李強

    求源代碼991459629@qq.com  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean)[未登錄] 2013-06-05 17:50 sunny

    求源碼和數據庫~~~萬分感謝了 ~~~  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean)[未登錄] 2013-06-05 17:51 sunny

    求源碼和數據庫~~萬分感謝~~郵箱2267961672@qq.com  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean)[未登錄] 2014-10-22 11:18 默默

    可不可以給我發一份完整的網上書店的源代碼呀,急用  回復  更多評論   

    # re: 網上書店(jsp+servlet+javabean) 2014-12-25 20:40 11

    @juan
    能不能給一份源碼給我啊  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品福利网站| 亚洲伦另类中文字幕| 亚洲妇女无套内射精| 在线观看AV片永久免费| 亚洲第一区视频在线观看| 最近中文字幕高清免费中文字幕mv | 亚洲视频免费在线看| 亚洲激情黄色小说| 成人AV免费网址在线观看| 精品亚洲国产成人| 永久中文字幕免费视频网站| 亚洲精品国产首次亮相| 免费国产在线观看不卡| 国产亚洲精品91| 亚洲色婷婷六月亚洲婷婷6月| 免费人成黄页在线观看日本| 中文字幕亚洲第一在线| 日韩亚洲国产高清免费视频| 亚洲欧美日韩国产成人| 亚洲精品无码AV中文字幕电影网站| WWW国产成人免费观看视频| 亚洲av午夜成人片精品网站 | 成人AV免费网址在线观看| 久久久亚洲精华液精华液精华液| 男人的天堂亚洲一区二区三区| 亚洲国产成人精品无码区二本| 亚洲精品国产精品乱码不卡| 久久久久久成人毛片免费看| 亚洲av无码片区一区二区三区| 无码国模国产在线观看免费| 中文字幕版免费电影网站| 亚洲精品无码久久毛片波多野吉衣| 女人张开腿给人桶免费视频| 有色视频在线观看免费高清在线直播| 亚洲日韩aⅴ在线视频| 无码国产精品久久一区免费| 一道本不卡免费视频| 亚洲bt加勒比一区二区| 四虎成人免费影院网址| 中文字幕无线码中文字幕免费| 亚洲国产综合在线|