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

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

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

    RiKeR

    本博客停止更新,最新內(nèi)容請?jiān)L問--> http://blog.csdn.net/shuailee

    統(tǒng)計(jì)

    留言簿(3)

    積分與排名

    閱讀排行榜

    評論排行榜

    MyEclipse4.0GA+MySQL5.0+JDK5.0+Tomcat4.0+PowerDesigner12.0開發(fā)MVC項(xiàng)目

           1、新建項(xiàng)目prj,導(dǎo)入mysql-connector-java-5.0.7-bin.jar到相應(yīng)WebRoot下的WEB-INF\lib下,WebRoot下新建index.jsplist.jspcode as follows

    <%@ page contentType="text/html;charset=GBK"%>

    <html>

      <head> 

        <title></title> 

      </head> 

      <body>

      <h2 align="center">登錄界面</h2>

      <hr>

      <div align="center">

      <form action="LoginServlet" method="post">

        用戶名:<input type="text" name="userName"/><br>

        密碼:<input type="password" name="userPwd"/><br>

        <input type="submit" value="進(jìn)入系統(tǒng)"/>

        <input type="reset" value="重置"/>

      </form> 

      <font color="red">

      <%

        String result = (String)request.getAttribute("error");

        if(result != null) {

           if("NOUSER".equals(result)) {

               out.println("用戶不存在");

            } else {

               out.println("密碼不正確");     

              }

        }  

      %>

      </font>

      </div>

      </body>

    </html>

     

    list.jsp

    <%@ page contentType="text/html;charset=GBK" import="java.util.*,org.riker.news.data.*"%>

     

    <html>

      <head>

        <title></title>

        <jsp:useBean id = "news" scope = "page" class = "org.riker.news.logic.NewsLogicBean"/>

      </head>

      <body>

        <center>

        <%

           String username = (String)session.getAttribute("user");

           if(username != null) {

           }

        %>

        歡迎您進(jìn)入本系統(tǒng):<%=username%>

        <hr>

        <table border="1">

        <tr><td>序號</td><td>新聞標(biāo)題</td></tr>

        <%

           String str_curPage = request.getParameter("curPage");

           if(str_curPage!=null){

               news.setCurPage(Integer.parseInt(str_curPage));

           }

           List list = news.findAll();

           int allRows = news.getAllRows();

           int curPage = news.getCurPage();

           int rowPerPage = news.getRowPerPage();

           int allPage = news.getAllPages();

           for(int i=0; i<list.size(); i++) {

               NewsDataBean bean = (NewsDataBean)list.get(i);

        %>

           <tr><td><input type="radio" name="newsid"><%=(curPage-1)*rowPerPage+i+1%></td>

           <td><a href="detail.jsp?newid=<%=bean.getNewsid()%>"><%=bean.getNewstitle()%>(<%=bean.getNewsdate()%>)</td></tr>

        <%

           }

          

        %>

        </table>

        <%

           if(curPage!=1) {

        %>

           <a href="/news/main/list.jsp?curPage=1">首頁</a>

            <a href="/news/main/list.jsp?curPage=<%=curPage-1%>">上一頁</a>

        <%  }

        %>

        <%

           if(curPage!=allPage){

        %>

           <a href="/news/main/list.jsp?curPage=<%=curPage+1%>">下一頁</a>

            <a href="/news/main/list.jsp?curPage=<%=allPage%>">末頁</a>

        <%

            }

        %>

       

        </center>

        <hr>

        <input type="submit" name="operate" value="增加新聞">

        <input type="submit" name="operate" value="修改新聞">

        <input type="submit" name="operate" value="刪除新聞">

      </body>

    </html>

     

           2、org.riker.prj.comm包下建立DataSource.java,采用設(shè)計(jì)模式中的單子模式建立數(shù)據(jù)庫連接,用PowerDesigner12.0建表,并用MySQL Query Browser插入相關(guān)數(shù)據(jù),code as follows:

    package org.riker.news.comm;

     

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.SQLException;

     

    /**

     * 一個單子設(shè)計(jì)模式的數(shù)據(jù)庫連接

     * @author RiKeR

     */

     

    public class DataSource {

     

           private static Connection conn;

           private DataSource() {

                  try {

                         Class.forName("com.mysql.jdbc.Driver");

                         conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/news","root","root");

                  } catch (ClassNotFoundException e) {

                         e.printStackTrace();

                  } catch (SQLException e) {

                         e.printStackTrace();

                  }

           }

          

           public static Connection getConnection() {

                  if(conn == null) {

                         new DataSource();

                  }

                  return conn;

           }

          

           /**

           public static void main(String[] args) {

                  new DataSource();

                  System.out.println(conn);

           }

           */

     

    }

           3org.riker.prj.logic包下建立LoginLogicBean.java,本JavaBean用來驗(yàn)證登錄,code as follows

    package org.riker.news.logic;

     

    import java.sql.Connection;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import java.sql.Statement;

     

    import org.riker.news.comm.DataSource;

     

    public class LoginLogicBean {

          

           /**

            * 驗(yàn)證登錄的方法,如果用戶名和密碼都正確,則返回"OK"

            * 如果用戶名正確,密碼錯誤,則返回"PWD"

            * 如果用戶名不正確,則沒有必要判斷密碼,返回"NO USER"

            * @param userName

            * @param userPwd

            * @return

            */

     

           public String verify(String userName, String userPwd) {

                  String result = null;

                  Connection conn = null;

                  Statement st = null;

                  ResultSet rs = null;

                  conn = DataSource.getConnection();

                  try {

                         st = conn.createStatement();

                         rs = st.executeQuery("select password from user where username='" + userName + "' ");

                         if (rs.next()) {

                                if (userPwd.equals(rs.getString(1))) {

                                       result = "OK";

                                } else {

                                       result = "PWD";

                                }

                         } else {

                                result = "NOUSER";

                         }

                  } catch (Exception e) {

                  } finally {

                         try {

                                if(rs != null) rs.close();

                                if(st != null) st.close();

                                // if(conn != null) conn.close();

                         } catch (SQLException e) {

                                e.printStackTrace();

                         }

                  }

                 

                 

                  return result;

           }

          

           /**

           public static void main(String[] args) {

                  System.out.println(new LoginLogicBean().verify("RiKeR", "YuRi"));

           }

           */

     

    }

    4、接下來我們對MVC中的C,控制層進(jìn)行編碼設(shè)計(jì),新建org.riker.news.control包,

    建立ServletLoginServlet.java,典型的Servlet直接生成時(shí)可選擇相應(yīng)Getter&Setter方法

    package org.riker.news.control;

     

    import java.io.IOException;

    import java.io.PrintWriter;

     

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

     

    import org.riker.news.logic.LoginLogicBean;

     

    public class LoginServlet extends HttpServlet {

     

           /**

            * Constructor of the object.

            */

           public LoginServlet() {

                  super();

           }

     

           /**

            * Destruction of the servlet. <br>

            */

           public void destroy() {

                  super.destroy(); // Just puts "destroy" string in log

                  // Put your code here

           }

     

           /**

            * The doPost method of the servlet. <br>

            *

            * This method is called when a form has its tag value method equals to post.

            *

            * @param request the request send by the client to the server

            * @param response the response send by the server to the client

            * @throws ServletException if an error occurred

            * @throws IOException if an error occurred

            */

           public void doPost(HttpServletRequest request, HttpServletResponse response)

                         throws ServletException, IOException {

                  String userName = request.getParameter("userName");

                  String userPwd  = request.getParameter("userPwd");

                  LoginLogicBean loginBean = new LoginLogicBean();

                  String result = loginBean.verify(userName, userPwd);

                  if("OK".equals(result)) {

                         request.getSession().setAttribute("user", userName);

                         request.getRequestDispatcher("main/list.jsp").forward(request, response);

                  } else if("PWD".equals(result)) {

                         request.setAttribute("error", "PWD");

                         request.getRequestDispatcher("index.jsp").forward(request, response);

                  } else {

                         request.setAttribute("error", "NOUSER");

                         request.getRequestDispatcher("index.jsp").forward(request, response);

                  }

     

           }

     

           /**

            * Initialization of the servlet. <br>

            *

            * @throws ServletException if an error occure

            */

           public void init() throws ServletException {

                  // Put your code here

           }

     

    }

     

    è到此,本系統(tǒng)我們已經(jīng)開發(fā)出大體框架及模塊。接下來進(jìn)行細(xì)化:采用過濾器過濾和分頁技術(shù)完善本系統(tǒng),防止用戶直接從main目錄下登入etc

    1org.riker.news.comm寶下,建立SecurityFilter.java

    package org.riker.news.comm;

     

    import java.io.IOException;

     

    import javax.servlet.Filter;

    import javax.servlet.FilterChain;

    import javax.servlet.FilterConfig;

    import javax.servlet.ServletException;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

     

    public class SecurityFilter implements Filter {

     

           public void init(FilterConfig arg0) throws ServletException {

     

           }

     

           public void doFilter(ServletRequest req, ServletResponse resp,

                         FilterChain chain) throws IOException, ServletException {

                  HttpServletRequest request = (HttpServletRequest)req;

                  HttpServletResponse response = (HttpServletResponse)resp;

                  if(request.getSession().getAttribute("user") == null) {

                         response.sendRedirect(request.getContextPath() + "/index.jsp");

                  }

                  chain.doFilter(request, response);

           }

     

           public void destroy() {

     

           }

     

    }

     

    2、將list.jsp根據(jù)需求移到/main目錄下,建立org.riker.news.data包下的新聞數(shù)據(jù)Bean

    package org.riker.news.data;

     

    public class NewsDataBean {

           private String newsid;

           private String newstitle;

           private String newscontent;

           private String newscount;

           private String newsdate;

           public String getNewscotent() {

                  return newscontent;

           }

           public void setNewscontent(String newscontent) {

                  this.newscontent = newscontent;

           }

           public String getNewscount() {

                  return newscount;

           }

           public void setNewscount(String newscount) {

                  this.newscount = newscount;

           }

           public String getNewsdate() {

                  return newsdate;

           }

           public void setNewsdate(String newsdate) {

                  this.newsdate = newsdate;

           }

           public String getNewsid() {

                  return newsid;

           }

           public void setNewsid(String newsid) {

                  this.newsid = newsid;

           }

           public String getNewstitle() {

                  return newstitle;

           }

           public void setNewstitle(String newstitle) {

                  this.newstitle = newstitle;

           }

    }

    3、相應(yīng)的開發(fā)對新聞分頁的邏輯Bean,建立在org.riker.news.logicNewsLogicBean,這里的分頁“小算法”挺8

    package org.riker.news.logic;

     

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import java.sql.Statement;

    import java.util.ArrayList;

    import java.util.List;

     

    import org.riker.news.comm.DataSource;

    import org.riker.news.data.NewsDataBean;

     

    public class NewsLogicBean {

           private int allRows;

           private int curPage = 1;

           private int rowPerPage = 5;

           private int allPages;

     

           public List findAll() {

                  List list = new ArrayList();

                  Statement st = null;

                  ResultSet rs = null;

                  try {

                         st = DataSource.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

                         rs = st.executeQuery("select newsid, newstitle, newscontent, newscount, newsdate from news order by newsdate desc");

                         rs.last();

                         this.allRows = rs.getRow();

                         if(this.allRows%this.rowPerPage==0) {

                                this.allPages = this.allRows/this.rowPerPage;

                         } else {

                                this.allPages = this.allRows/this.rowPerPage + 1;

                         }

                         if(this.curPage == 1) {

                                rs.beforeFirst();

                         } else {

                                rs.absolute((this.curPage - 1) * this.rowPerPage);

                         }

                         int i = 0;

                         while(rs.next() && i < this.rowPerPage) {

                                NewsDataBean bean = new NewsDataBean();

                                bean.setNewsid(rs.getString(1));

                                bean.setNewstitle(rs.getString(2));

                                bean.setNewscontent(rs.getString(3));

                                bean.setNewscount(rs.getString(4));

                                bean.setNewsdate(rs.getString(5));

                                list.add(bean);

                                i++;

                         }

                  } catch (SQLException e) {

                         e.printStackTrace();

                  }

                  return list;

           }

          

           public static void main(String[] args) {

                  List list = new NewsLogicBean().findAll();

                  System.out.println(list.size());

           }

     

           public int getCurPage() {

                  return curPage;

           }

     

           public void setCurPage(int curPage) {

                  this.curPage = curPage;

           }

     

           public int getAllPages() {

                  return allPages;

           }

     

           public int getAllRows() {

                  return allRows;

           }

     

           public int getRowPerPage() {

                  return rowPerPage;

           }

    }

    至此第一階段算是開發(fā)完畢,明天再發(fā)相關(guān)后續(xù)。。。昨天早上4.005.00這段時(shí)間Debug得我相當(dāng)郁悶,氣得我都差點(diǎn)睡不著了。。。絕對路徑和JSP完結(jié)標(biāo)簽,還有就是session.getAttribute()、request.getAttribute()、和request.getSession().getAttribute(),這些地方我犯迷糊了,不過這也成為我的經(jīng)驗(yàn)教訓(xùn)了。

     

    posted on 2007-08-26 07:08 RiKeR 閱讀(504) 評論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 1000部拍拍拍18勿入免费视频下载| 亚洲性猛交XXXX| 亚洲熟妇无码八V在线播放| 污视频在线免费观看| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 亚洲av综合avav中文| 一级毛片aa高清免费观看| 国产免费人成在线视频| 亚洲性无码AV中文字幕| 91嫩草国产在线观看免费| 亚洲精品亚洲人成在线观看麻豆| 久久国产精品萌白酱免费| 亚洲精品国偷自产在线| 久久久久久久久久久免费精品| 亚洲午夜激情视频| 免费看内射乌克兰女| 四虎国产精品免费久久影院| 色噜噜的亚洲男人的天堂| 天天看片天天爽_免费播放| 一本天堂ⅴ无码亚洲道久久| 91香蕉视频免费| 亚洲日韩AV一区二区三区四区 | 在线免费观看韩国a视频| 亚洲综合偷自成人网第页色| 久久精品免费全国观看国产| 亚洲免费视频播放| 国产h视频在线观看免费| 激情综合亚洲色婷婷五月| 免费不卡视频一卡二卡| 亚洲av无码专区在线| 99视频在线精品免费观看6| 亚洲精品一二三区| 在线观看人成网站深夜免费| 亚洲人成电影网站色| 免费视频淫片aa毛片| 国产亚洲精品成人久久网站| 高清在线亚洲精品国产二区| 深夜福利在线视频免费| JLZZJLZZ亚洲乱熟无码| 国产又黄又爽又大的免费视频| 久久精品国产69国产精品亚洲|