我知道有很多方法使用java-ee設計web應用程序,但似乎對我最有意義的方法是模型2或mvc,我們將代碼和設計分隔成servlet和jsp頁面。適當的模型2設計
基於我所做的研究,正確的方法是通過一個servlet訪問一個頁面,然後將用戶指向正確的方向,但我很難將這個想法包裹在我的腦海中,所以請告訴如果這個真實世界的例子讓我感覺實際的模型2。
說我有一個網站,主頁是登錄。所以這裏用戶會去www.mysite.com/Login(其中Login是servlet的名稱)。這個servlet可能是這個樣子:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
if(request.getParameter("username") != null && request.getParameter("password") != null){
User user = new User();
user.setUsername(request.getParameter("username"));
try {
user.setPassword(com.portraitcreationsnc.services.EncryptionService.getInstance().encrypt(request.getParameter("password")));
} catch (Exception e) {
e.printStackTrace();
}
try {
if(!user.userExist(user)){ //No Match.
String errMessage = "You have entered an invalid Username/Password combination."; //Error Message
request.setAttribute("message", errMessage);
request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
System.out.println("Login Error");
} else {
//Match found.
session.setAttribute("user", user);
System.out.println("User Login Successful");
pageForward(request, response);
}
} catch (SQLException e) {
throw new ServletException("DB error ", e);
}
}else{
if(session.getAttribute("user") == null){
request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
}else{
//User already logged in. Send to home.
response.sendRedirect("Welcome");
}
}
}
private void pageForward(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.sendRedirect("Welcome");
}
主要這裏的想法是,在servlet負載最初並檢查它是否具有requestParameters的。如果不是這樣,它重定向到的login.jsp這可能看起來像:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org /TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
</head>
<body>
<h3>Simple Login</h3>
<form action="LoginAuth" method="post">
Username <input type="text" name="username">
Password <input type="password" name="password">
<button type="submit">Login</button>
</form>
<%
Object errMessage = request.getAttribute("message");
if(errMessage != null){
out.println(request.getAttribute("message"));
out.println("<br>");
}
%>
<br>
If you do not have a username, <a href="register.html">click here to register.</a>
</body>
</html>
這反過來將當表單提交,servlet將識別請求數據,並與檢查進行再次調用servlet用戶針對數據庫等等等等。
似乎有些後退不只是首先加載jsp,但在其他情況下,首先加載servlet更有意義。我所做的研究得出的結論是,對於模型2,您應該幾乎完全不會調用jsp頁面,而是將所有鏈接指向將用戶傳遞給jsp的servlet。我的設計是完成這個的正確方法嗎?
在一個偏離主題的筆記中,這是一個地方的很多代碼,相對於它實際做的相對較高的圈複雜度 - 很難測試和推理。 –