本實驗采用MVC設計模式,通過數(shù)據(jù)源和DAO對象訪問數(shù)據(jù)庫。其中JavaBeans實現(xiàn)模型,訪問數(shù)據(jù)庫,Servlet實現(xiàn)控制器,JSP頁面實現(xiàn)視圖。

功能要求" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網站運營 > Java Web實驗報告:MVC模式及其應用

Java Web實驗報告:MVC模式及其應用

時間:2023-10-06 18:00:01 | 來源:網站運營

時間:2023-10-06 18:00:01 來源:網站運營

Java Web實驗報告:MVC模式及其應用:注:本實驗代碼要根據(jù)實際做適當修改才能運行

本實驗采用MVC設計模式,通過數(shù)據(jù)源和DAO對象訪問數(shù)據(jù)庫。其中JavaBeans實現(xiàn)模型,訪問數(shù)據(jù)庫,Servlet實現(xiàn)控制器,JSP頁面實現(xiàn)視圖。

功能要求:實現(xiàn)注冊和登錄功能,登錄要求輸入驗證碼。實驗報告編寫請參考實驗項目“JDBC訪問數(shù)據(jù)庫”。

第一步:模型類設計

存放用戶信息的JavaBeans代碼User.java,存放在demo.JavaBeans包下:

package demo.JavaBeans;public class User { String username = null; String password = null; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}第二步:設計DAO對象 (統(tǒng)一放在deom.DAO包下)

(1) 設計DAO接口,DAO接口中定義了默認方法用于連接數(shù)據(jù)庫。

package demo.DAO;import java.sql.*;import javax.sql.DataSource;import javax.naming.*;public interface DAO { // 查找并返回數(shù)據(jù)源對象 public static DataSource getDataSource(){ DataSource dataSource = null; try { Context context = new InitialContext(); dataSource = (DataSource)context.lookup("java:comp/env/jdbc/DBLoginDS"); //上面的參數(shù)參照context.xml 配置屬性 name="jdbc/DBLoginDS" }catch(NamingException ne){ System.out.println("異常:"+ne); } return dataSource; } // 返回連接對象方法 public default Connection getConnection() throws DAOException { DataSource dataSource = getDataSource(); Connection conn = null; try{ conn = dataSource.getConnection(); }catch(SQLException sqle){ System.out.println("異常:"+sqle); } return conn; } }設計DAOException類是一個異常類,當DAO類中的方法發(fā)生運行時異常時拋出異常。

package demo.DAO;public class DAOException extends Exception{ private static final long serialVersionUID = 19192L; private String message; public DAOException() {} public DAOException(String message){ this.message = message; } public String getMessage(){ return message; } public void setMessage(String message) { this.message = message; } public String toString(){ return message; }}UserDAO類實現(xiàn)了DAO接口提供了對User對象的持久化的各種方法

package demo.DAO;import demo.JavaBeans.User;import java.util.*;import java.sql.*;import demo.JavaBeans.User;import java.util.logging.Level;import java.util.logging.Logger;public class UserDAO implements DAO { //addUser(User user)添加用戶 public boolean addUser(User user) throws DAOException { Connection conn = getConnection(); String sql = "INSERT INTO tb_user(username,password) VALUES(?,?)"; try { PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, user.getUsername()); pstmt.setString(2, user.getPassword()); pstmt.executeUpdate(); } catch (SQLException sqle) { System.out.println(sqle); return false; } try { conn.close(); } catch (SQLException ex) { Logger.getLogger(UserDAO.class.getName()).log(Level.SEVERE, null, ex); } return true; } /* find(User user) 在數(shù)據(jù)庫中查詢是否存在user的記錄, 存在返回true,否則返回false */ public boolean find(User user) throws DAOException { String sql = "SELECT * FROM tb_user WHERE username =? and password=?"; //User user = new User(); try ( Connection conn = getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, user.getUsername()); pstmt.setString(2, user.getPassword()); try (ResultSet rst = pstmt.executeQuery()) { if (rst.next()) { //user.setUsername(rst.getString("username")); //user.setPassword(rst.getString("password")); conn.close(); return true; } } } catch (SQLException se) { System.out.println(se); return false; } return false; }}第三步:視圖類設計 login.jsp+register.jsp實現(xiàn)登陸和注冊界面,并且分別實現(xiàn)了異常處理視圖。

login.jsp實現(xiàn)登陸界面

<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE html><html> <head> <title>登錄</title> <script> <%-- 這里是JavaScript --%><%-- html加載完畢后,立刻執(zhí)行--%>window.onload = function () { document.getElementById("img").onclick = function () { <%-- document.getElementById()會通過元素的id來獲取整個元素, 也就是說先獲取. "img" 元素, 然后.onclick(),點擊觸發(fā)一個事件,這個事件會執(zhí)行funciton()函數(shù)。 目的就是點擊id為img的這個頁面元素,就會觸發(fā)funciton函數(shù)。--%> this.src = "CheckcodeServlet?time" + new Date().getTime(); <%-- 疑問點 --> <%-- 增加時間戳來更換驗證碼圖片 --%> };}; </script> <script type="text/javascript"> function Check() { for(var i=0;i<document.form1.elements.length-1;i++) { if(document.form1.elements[i].value=="") { alert("不允許空!"); document.form1.elements[i].focus(); return false; } } return true; } </script><style> div{ color: red; }</style> </head> <body> <form action="LoginServlet" method="post" name="form1" onSubmit="return Check()"> <!--疑問點:return--> <table> <tr> <td>用戶名</td> <td><input type="text" name="username" size="25"></td> </tr> <tr> <td>密碼</td> <td><input type="text" name="password" size="25"></td> </tr> <tr> <td>驗證碼</td> <td><input type="text" name="checkcode" size="15"> <img id="img" src="CheckcodeServlet" alt="" size="10" align="center"> <!id為img的頁面元素,驗證碼圖像; (JavaScript:document.getElementById("img").onclick )> </td> </tr> <tr> <td><input type="submit" value="登錄"></td> <td>無賬號請<a href="regist.jsp">注冊</a></td> <!單擊打開注冊界面(JavaScript:function reg())> </tr> </table> </form> <%-- 用戶名或密碼錯誤 --%> <div>${requestScope.login_error}</div> <%-- 驗證碼錯誤 --%> <div>${requestScope.checkcode_error}</div> </body></html>register.jsp實現(xiàn)注冊界面。

<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE html><script type="text/javascript"> <%--檢查是否表單內容均已填寫 --%> function Check() { for(var i=0;i<document.form1.elements.length-1;i++) { if(document.form1.elements[i].value=="") { alert("不允許空!"); document.form1.elements[i].focus(); return false; } } return true; } </script><style> div{ color: red; }</style><html><head> <title>注冊</title></head><body><form action="RegistServlet" method="post" name="form1" onSubmit="return Check()"> <table> <tr> <td>用戶名</td> <td><input type="text" name="username"></td> </tr> <tr> <td>密&nbsp &nbsp碼</td> <td><input type="text" name="password"></td> </tr> </table> <p><input type="submit" value="確定注冊"> 有賬號請直接<a href="login.jsp">登錄</a></form><%-- 注冊成功 --%><div>${requestScope.regist_success}</div><%-- 用戶名被占有,注冊失敗 --%><div>${requestScope.regist_error}</div></body></html>success.jsp實現(xiàn)登陸成功界面

<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE html><html><head> <title>Title</title></head><body><%-- <h1>歡迎您${requestScope.user}</h1> --%> <h1>歡迎您<%=request.getSession().getAttribute("user")%></h1></body></html>STEP 4:控制器設計

(1) LoginServlet使用了DAO對象和持久化對象,實現(xiàn)了登陸界面的后臺處理功能。

package demo.Servlet;import demo.DAO.DAOException;import demo.DAO.UserDAO;import demo.JavaBeans.User;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;import javax.servlet.RequestDispatcher;@WebServlet("/LoginServlet")public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //設置字符編碼 request.setCharacterEncoding("utf-8"); //讀客戶端參數(shù) String username = request.getParameter("username");//讀用戶名 String password = request.getParameter("password");//讀口令 String checkcode = request.getParameter("checkcode");//獲取生成的驗證碼 // System.out.println(username+":"+password+":"+checkcode); HttpSession session = request.getSession(); String checkcode_session = (String) session.getAttribute("checkcode_session"); //防止驗證碼存儲 刪除Session中存儲的驗證碼 //checkcode-session來自CheckcodeServlet中的會話設置 session.removeAttribute("checkcode_session"); //判斷驗證碼是否正確,equalsIgnoreCase忽略大小寫的比較 if (checkcode_session != null && checkcode_session.equalsIgnoreCase(checkcode)) { //驗證碼正確 User user = new User(); user.setUsername(username); user.setPassword(password); boolean flag = false; UserDAO userdao = new UserDAO(); try { flag = userdao.find(user); } catch (DAOException ex) { System.out.println(ex); } if (flag) { //用戶名和口令正確,登錄成功 //儲用戶信息到會話:session session.setAttribute("user", username); //請求轉發(fā)到success.jsp(不能重定向) RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/success.jsp"); rd.forward(request, response); } else { //用戶名或口令錯誤,登錄失敗 //提示信息存儲到請求對象:request request.setAttribute("login_error", "用戶名或口令錯誤"); //請求轉發(fā)到登錄頁面login.jsp request.getRequestDispatcher("/login.jsp").forward(request, response); } } else { //驗證碼錯誤,提示信息到存儲請求對象:request request.setAttribute("checkcode_error", "驗證碼錯誤"); //請求轉發(fā)到登錄頁面 request.getRequestDispatcher("/login.jsp").forward(request, response); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // this.doPost(request, response); }}RegisterServlet使用了DAO對象和持久化對象,實現(xiàn)了注冊界面的后臺處理功能。

package demo.Servlet;import demo.DAO.*;import demo.JavaBeans.User;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/RegistServlet")public class RegistServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); //讀取用戶輸入的用戶名和口令 String username = request.getParameter("username"); String password = request.getParameter("password"); //實例化user對象 User user = new User(); user.setUsername(username); user.setPassword(password); boolean flag=false; try { flag = new UserDAO().addUser(user);//把user寫入數(shù)據(jù)庫(usernmae,password) } catch (DAOException ex) { System.out.println(ex); } if(flag) { request.setAttribute("regist_success","注冊成功"); //請求轉發(fā)regist.jsp request.getRequestDispatcher("/regist.jsp").forward(request,response); }else{ request.setAttribute("regist_error","用戶名被占用,注冊失敗"); //請求轉發(fā)regist.jsp request.getRequestDispatcher("/regist.jsp").forward(request,response); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); }}運行結果:

A、試運行register,jsp,實現(xiàn)賬號的注冊及登陸

在注冊操作下顯示注冊成功

B、打開數(shù)據(jù)庫,對數(shù)據(jù)庫進行查詢,檢查是否實質性地加入

C、運行l(wèi)ogin.jsp,進行賬號登陸

成功登陸。其他帳號同樣。

實驗總結:

通過本次實驗,我更加熟悉了MVC設計模型,其把軟件系統(tǒng)分為三個基本部分:模型(model)、視圖(view)、控制器(controller)。

同時,我還深刻理解了MVC模式,掌握JSP+Servlet+JavaBean

實現(xiàn)MVC的方法,以及JSP中數(shù)據(jù)庫的增刪查該操作。

關鍵詞:模式,實驗,報告

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉