1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/src/
├── Controllers
│ ├── LoginServlet.java
│ ├── HomeServlet.java
│ ├── LogoutServlet.java
├── Models
│ ├── User.java
├── DALs
│ ├── UserDAO.java
├── Utils
│ ├── DBContext.java
/webapp/
├── WEB-INF/
│ ├── web.xml
├── views/
│ ├── pages
│ │ ├── login.jsp
│ │ ├── login-content.jsp
│ │ ├── home.jsp
│ │ ├── home-content.jsp
│ ├── layouts
│ │ ├── layout.jsp
(A) User.java (Models)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package Models;
public class User {
private String username;
private String password;
public User() {}
public User(String username, String password) {
this.username = username;
this.password = password;
}
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;
}
}
(B) UserDAO.java (DALs - Data Access Layer)
1
2
3
4
5
6
7
8
9
package DALs;
import Models.User;
public class UserDAO {
public boolean checkLogin(String username, String password) {
// ...
}
}
(C) Create LoginServlet.java (Controllers)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package Controllers;
import DALs.UserDAO;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("contentPage", "login_form_content.jsp");
request.getRequestDispatcher("/views/pages/login.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
UserDAO users = new UserDAO();
String uName = users.CheckUser(username, password);
if (uName != null) {
Cookie cookie1 = new Cookie("username", uName);
cookie1.setMaxAge(60 * 60); // 1 hour
response.addCookie(cookie1);
response.sendRedirect(request.getContextPath() + "/home");
} else {
request.setAttribute("loginError", "Username or password are failed!");
}
}
}
(D) LogoutServlet.java (Controllers)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package Controllers;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class LogoutServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if ("username".equals(c.getName()) || "id".equals(c.getName()) ||"gender".equals(c.getName())) {
c.setMaxAge(0);
response.addCookie(c);
}
}
}
response.sendRedirect(request.getContextPath() + "/login");
}
}
(E) HomeServlet.java (Controllers)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package Controllers;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class HomeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if ("username".equals(c.getName())) {
username = c.getValue();
break;
}
}
}
if (username == null) {
response.sendRedirect(request.getContextPath() + "/login");
return;
}
request.setAttribute("contentPage", "home_content.jsp");
request.setAttribute("username", username);
request.getRequestDispatcher("/views/pages/home.jsp").forward(request,response);
}
}
(F) login.jsp (Views)
1
2
3
<jsp:include page="../layouts/layout.jsp" >
<jsp:param name="pageTitle" value="Login - JSP Shop" />
</jsp:include>
(G) login_form_content.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<h2 class="mb-4">Login Form</h2>
<form action="${pageContext.request.contextPath}/login" method="post" class="col-md-4">
<div class="mb-3">
<label for="username" class="form-label">Username</label>
<input type="text" id="username" name="username" class="form-control" required>
</div>
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" id="password" name="password" class="form-control" required>
</div>
<button type="submit" class="btn btn-primary">Login</button>
</form>
(H) home.jsp (Views)
1
2
3
<jsp:include page="../layouts/layout.jsp" >
<jsp:param name="pageTitle" value="Home - JSP Shop" />
</jsp:include>
(I) home_content.jsp
1
2
3
4
5
<h2>Welcome, ${username} (Cookie Based)</h2>
<form action="${pageContext.request.contextPath}/logout" method="post">
<button type="submit" class="btn btn-outline-primary">Logout</button>
</form>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>Controllers.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Logout</servlet-name>
<servlet-class>Controllers.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Logout</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>HomeServlet</servlet-name>
<servlet-class>Controllers.HomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HomeServlet</servlet-name>
<url-pattern>/home</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>
login
</welcome-file>
</welcome-file-list>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/assets/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>