| 層次 | 技術實現 | 職責 |
|---|---|---|
| 視圖層 | JSP | 界面展示,HTML 渲染 |
| 模型層 | JavaBean | 數據封裝,業務邏輯/數據庫交互 |
| 控制層 | Servlet | 請求分發,流程控制,視圖跳轉 |
<% ... %>),導致代碼耦合度極高。
login.jsp - 登錄表單,提交到 /loginConf
<form action="../loginConf" method="post">
<table>
<tr><td>用戶名:</td><td><input name="uname"/></td></tr>
<tr><td>密碼:</td><td><input type="password" name="password"/></td></tr>
<tr><td colspan="2"><input type="submit" value="提交"/> <input type="reset" value="重置"/></td></tr>
</table>
</form>
login_success.jsp - 登錄成功頁,檢查 Session 防止直接訪問
<% if(session.getAttribute("login")!=null && session.getAttribute("login").equals("true")) { %>
<center><h2>登陸成功</h2></center>
<% } else { %>
<jsp:forward page="login.jsp"/>
<% } %>
login_failure.jsp - 失敗提示頁
LoginConf Servlet - 核心調度器
@WebServlet("/loginConf")
public class LoginConf extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 編碼設置
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
// 2. 獲取參數
String uname = request.getParameter("uname");
String password = request.getParameter("password");
// 3. 業務委派
LoginCheck lc = new LoginCheck();
HttpSession session = request.getSession();
if (lc.isLogin(uname, password)) {
session.setAttribute("login", "true");
request.getRequestDispatcher("MVC/login_success.jsp").forward(request, response);
} else {
request.getRequestDispatcher("MVC/login_failure.jsp").forward(request, response);
}
}
protected void doPost(...) { doGet(request, response); }
}
LoginCheck JavaBean - 業務邏輯封裝
public class LoginCheck {
public boolean isLogin(String uname, String password) {
// 實際項目中應調用 Service -> DAO 查詢數據庫
return "wei".equals(uname) && "123".equals(password);
}
}
<% %>。RequestDispatcher.forward() 保持請求域數據,地址欄不變。