我知道有很多方法使用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。我的设计是完成这个的正确方法吗?
在一个偏离主题的笔记中,这是一个地方的很多代码,相对于它实际做的相对较高的圈复杂度 - 很难测试和推理。 –