wad-lab 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/index.js +3 -1
- package/package.json +1 -1
- package/templates/servlet-session-tracking/WEB-INF/LoginServlet.java +46 -0
- package/templates/servlet-session-tracking/WEB-INF/LogoutServlet.java +39 -0
- package/templates/servlet-session-tracking/WEB-INF/ProfileServlet.java +83 -0
- package/templates/servlet-session-tracking/WEB-INF/classes/LoginServlet.class +0 -0
- package/templates/servlet-session-tracking/WEB-INF/classes/LogoutServlet.class +0 -0
- package/templates/servlet-session-tracking/WEB-INF/classes/ProfileServlet.class +0 -0
- package/templates/servlet-session-tracking/WEB-INF/web.xml +38 -0
- package/templates/servlet-session-tracking/index.html +36 -0
- package/templates/servlet-voter-eligibility/WEB-INF/VoterServlet.java +46 -0
- package/templates/servlet-voter-eligibility/WEB-INF/classes/VoterServlet.class +0 -0
- package/templates/servlet-voter-eligibility/WEB-INF/web.xml +20 -0
- package/templates/servlet-voter-eligibility/index.html +18 -0
package/bin/index.js
CHANGED
|
@@ -28,7 +28,7 @@ function copyDirRecursive(src, dest) {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
const templates = [
|
|
31
|
-
{ name: 'all (Unpack All
|
|
31
|
+
{ name: 'all (Unpack All 42 Templates)', value: 'all' },
|
|
32
32
|
{ name: 'vue-basics (ref, reactive, computed, v-model)', value: 'vue-basics' },
|
|
33
33
|
{ name: 'vue-props-emits (Parent/Child Component Communication)', value: 'vue-props-emits' },
|
|
34
34
|
{ name: 'vue-router (Parent Layout & Nested Children)', value: 'vue-router' },
|
|
@@ -44,6 +44,8 @@ const templates = [
|
|
|
44
44
|
{ name: 'servlet-basic (Tomcat GET + POST)', value: 'servlet-basic' },
|
|
45
45
|
{ name: 'servlet-jdbc (Tomcat + MySQL JDBC)', value: 'servlet-jdbc' },
|
|
46
46
|
{ name: 'servlet-flow (HelloServlet with GET/POST)', value: 'servlet-flow' },
|
|
47
|
+
{ name: 'servlet-session-tracking (HttpSession, Cookies, Redirect, URL Rewriting)', value: 'servlet-session-tracking' },
|
|
48
|
+
{ name: 'servlet-voter-eligibility (Name & Age Voting Eligibility Check)', value: 'servlet-voter-eligibility' },
|
|
47
49
|
{ name: 'springboot-mongo-crud (4-Layer REST API)', value: 'springboot-mongo-crud' },
|
|
48
50
|
{ name: 'springboot-mongo-aggregation ($group, $sum, $avg, $sort)', value: 'springboot-mongo-aggregation' },
|
|
49
51
|
{ name: 'springboot-mockmvc (Controller Tests)', value: 'springboot-mockmvc' },
|
package/package.json
CHANGED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import java.io.IOException;
|
|
2
|
+
import java.io.PrintWriter;
|
|
3
|
+
import javax.servlet.ServletException;
|
|
4
|
+
import javax.servlet.http.Cookie;
|
|
5
|
+
import javax.servlet.http.HttpServlet;
|
|
6
|
+
import javax.servlet.http.HttpServletRequest;
|
|
7
|
+
import javax.servlet.http.HttpServletResponse;
|
|
8
|
+
import javax.servlet.http.HttpSession;
|
|
9
|
+
|
|
10
|
+
public class LoginServlet extends HttpServlet {
|
|
11
|
+
|
|
12
|
+
@Override
|
|
13
|
+
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
|
14
|
+
throws ServletException, IOException {
|
|
15
|
+
response.setContentType("text/html");
|
|
16
|
+
PrintWriter out = response.getWriter();
|
|
17
|
+
out.println("<html><body>");
|
|
18
|
+
out.println("<h2>Please submit the login form from <a href='index.html'>index.html</a></h2>");
|
|
19
|
+
out.println("</body></html>");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@Override
|
|
23
|
+
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
|
24
|
+
throws ServletException, IOException {
|
|
25
|
+
|
|
26
|
+
String username = request.getParameter("username");
|
|
27
|
+
String role = request.getParameter("role");
|
|
28
|
+
|
|
29
|
+
if (username == null || username.trim().isEmpty()) {
|
|
30
|
+
response.sendRedirect("index.html");
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
HttpSession session = request.getSession(true);
|
|
35
|
+
session.setAttribute("currentUser", username.trim());
|
|
36
|
+
session.setAttribute("userRole", role != null ? role.trim() : "Student");
|
|
37
|
+
session.setMaxInactiveInterval(1800);
|
|
38
|
+
|
|
39
|
+
Cookie userCookie = new Cookie("lastUser", username.trim());
|
|
40
|
+
userCookie.setMaxAge(60 * 60 * 24);
|
|
41
|
+
response.addCookie(userCookie);
|
|
42
|
+
|
|
43
|
+
String encodedRedirectURL = response.encodeRedirectURL("session-profile");
|
|
44
|
+
response.sendRedirect(encodedRedirectURL);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import java.io.IOException;
|
|
2
|
+
import java.io.PrintWriter;
|
|
3
|
+
import javax.servlet.ServletException;
|
|
4
|
+
import javax.servlet.http.Cookie;
|
|
5
|
+
import javax.servlet.http.HttpServlet;
|
|
6
|
+
import javax.servlet.http.HttpServletRequest;
|
|
7
|
+
import javax.servlet.http.HttpServletResponse;
|
|
8
|
+
import javax.servlet.http.HttpSession;
|
|
9
|
+
|
|
10
|
+
public class LogoutServlet extends HttpServlet {
|
|
11
|
+
|
|
12
|
+
@Override
|
|
13
|
+
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
|
14
|
+
throws ServletException, IOException {
|
|
15
|
+
|
|
16
|
+
HttpSession session = request.getSession(false);
|
|
17
|
+
if (session != null) {
|
|
18
|
+
session.invalidate();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
Cookie clearCookie = new Cookie("lastUser", "");
|
|
22
|
+
clearCookie.setMaxAge(0);
|
|
23
|
+
response.addCookie(clearCookie);
|
|
24
|
+
|
|
25
|
+
response.setContentType("text/html");
|
|
26
|
+
PrintWriter out = response.getWriter();
|
|
27
|
+
out.println("<html><head><title>Logged Out</title></head><body>");
|
|
28
|
+
out.println("<h2>You have been successfully logged out!</h2>");
|
|
29
|
+
out.println("<p>HttpSession invalidated and client cookies expired.</p>");
|
|
30
|
+
out.println("<p><a href='index.html'>Click here to Login Again</a></p>");
|
|
31
|
+
out.println("</body></html>");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@Override
|
|
35
|
+
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
|
36
|
+
throws ServletException, IOException {
|
|
37
|
+
doGet(request, response);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import java.io.IOException;
|
|
2
|
+
import java.io.PrintWriter;
|
|
3
|
+
import java.util.Date;
|
|
4
|
+
import javax.servlet.ServletException;
|
|
5
|
+
import javax.servlet.http.Cookie;
|
|
6
|
+
import javax.servlet.http.HttpServlet;
|
|
7
|
+
import javax.servlet.http.HttpServletRequest;
|
|
8
|
+
import javax.servlet.http.HttpServletResponse;
|
|
9
|
+
import javax.servlet.http.HttpSession;
|
|
10
|
+
|
|
11
|
+
public class ProfileServlet extends HttpServlet {
|
|
12
|
+
|
|
13
|
+
@Override
|
|
14
|
+
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
|
15
|
+
throws ServletException, IOException {
|
|
16
|
+
|
|
17
|
+
response.setContentType("text/html");
|
|
18
|
+
PrintWriter out = response.getWriter();
|
|
19
|
+
|
|
20
|
+
HttpSession session = request.getSession(false);
|
|
21
|
+
|
|
22
|
+
if (session == null || session.getAttribute("currentUser") == null) {
|
|
23
|
+
out.println("<html><body>");
|
|
24
|
+
out.println("<h3 style='color:red;'>Access Denied. No active session found.</h3>");
|
|
25
|
+
out.println("<a href='index.html'>Click here to Login</a>");
|
|
26
|
+
out.println("</body></html>");
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
String username = (String) session.getAttribute("currentUser");
|
|
31
|
+
String role = (String) session.getAttribute("userRole");
|
|
32
|
+
String sessionId = session.getId();
|
|
33
|
+
Date creationTime = new Date(session.getCreationTime());
|
|
34
|
+
Date lastAccessed = new Date(session.getLastAccessedTime());
|
|
35
|
+
|
|
36
|
+
String lastUserCookieVal = "None";
|
|
37
|
+
Cookie[] cookies = request.getCookies();
|
|
38
|
+
if (cookies != null) {
|
|
39
|
+
for (Cookie c : cookies) {
|
|
40
|
+
if ("lastUser".equals(c.getName())) {
|
|
41
|
+
lastUserCookieVal = c.getValue();
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
String logoutURLWithRewriting = response.encodeURL("session-logout");
|
|
48
|
+
|
|
49
|
+
out.println("<html><head><title>User Profile</title></head><body>");
|
|
50
|
+
out.println("<h2>Welcome, " + username + "!</h2>");
|
|
51
|
+
out.println("<fieldset>");
|
|
52
|
+
out.println("<legend>HttpSession Details</legend>");
|
|
53
|
+
out.println("<p><strong>Username:</strong> " + username + "</p>");
|
|
54
|
+
out.println("<p><strong>Assigned Role:</strong> " + role + "</p>");
|
|
55
|
+
out.println("<p><strong>Session ID:</strong> " + sessionId + "</p>");
|
|
56
|
+
out.println("<p><strong>Session Creation Time:</strong> " + creationTime + "</p>");
|
|
57
|
+
out.println("<p><strong>Last Accessed Time:</strong> " + lastAccessed + "</p>");
|
|
58
|
+
out.println("</fieldset>");
|
|
59
|
+
|
|
60
|
+
out.println("<br>");
|
|
61
|
+
|
|
62
|
+
out.println("<fieldset>");
|
|
63
|
+
out.println("<legend>Cookie Details</legend>");
|
|
64
|
+
out.println("<p><strong>Cookie 'lastUser':</strong> " + lastUserCookieVal + "</p>");
|
|
65
|
+
out.println("</fieldset>");
|
|
66
|
+
|
|
67
|
+
out.println("<br>");
|
|
68
|
+
|
|
69
|
+
out.println("<fieldset>");
|
|
70
|
+
out.println("<legend>URL Rewriting & Navigation</legend>");
|
|
71
|
+
out.println("<p><a href='" + logoutURLWithRewriting + "'>Logout (via URL Rewritten Link)</a></p>");
|
|
72
|
+
out.println("<p><a href='index.html'>Return to Home Form</a></p>");
|
|
73
|
+
out.println("</fieldset>");
|
|
74
|
+
|
|
75
|
+
out.println("</body></html>");
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@Override
|
|
79
|
+
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
|
80
|
+
throws ServletException, IOException {
|
|
81
|
+
doGet(request, response);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
|
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
4
|
+
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
|
|
5
|
+
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
|
|
6
|
+
version="3.1">
|
|
7
|
+
|
|
8
|
+
<servlet>
|
|
9
|
+
<servlet-name>LoginServlet</servlet-name>
|
|
10
|
+
<servlet-class>LoginServlet</servlet-class>
|
|
11
|
+
</servlet>
|
|
12
|
+
<servlet-mapping>
|
|
13
|
+
<servlet-name>LoginServlet</servlet-name>
|
|
14
|
+
<url-pattern>/session-login</url-pattern>
|
|
15
|
+
</servlet-mapping>
|
|
16
|
+
|
|
17
|
+
<servlet>
|
|
18
|
+
<servlet-name>ProfileServlet</servlet-name>
|
|
19
|
+
<servlet-class>ProfileServlet</servlet-class>
|
|
20
|
+
</servlet>
|
|
21
|
+
<servlet-mapping>
|
|
22
|
+
<servlet-name>ProfileServlet</servlet-name>
|
|
23
|
+
<url-pattern>/session-profile</url-pattern>
|
|
24
|
+
</servlet-mapping>
|
|
25
|
+
|
|
26
|
+
<servlet>
|
|
27
|
+
<servlet-name>LogoutServlet</servlet-name>
|
|
28
|
+
<servlet-class>LogoutServlet</servlet-class>
|
|
29
|
+
</servlet>
|
|
30
|
+
<servlet-mapping>
|
|
31
|
+
<servlet-name>LogoutServlet</servlet-name>
|
|
32
|
+
<url-pattern>/session-logout</url-pattern>
|
|
33
|
+
</servlet-mapping>
|
|
34
|
+
|
|
35
|
+
<welcome-file-list>
|
|
36
|
+
<welcome-file>index.html</welcome-file>
|
|
37
|
+
</welcome-file-list>
|
|
38
|
+
</web-app>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Servlet Session & State Tracking</title>
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<h2>Session Tracking & Redirect Demo</h2>
|
|
8
|
+
|
|
9
|
+
<fieldset>
|
|
10
|
+
<legend>1. Login & Establish HttpSession & Cookies</legend>
|
|
11
|
+
<form action="session-login" method="post">
|
|
12
|
+
<label>Username:</label><br>
|
|
13
|
+
<input type="text" name="username" required><br><br>
|
|
14
|
+
|
|
15
|
+
<label>Role:</label><br>
|
|
16
|
+
<input type="text" name="role" value="Student" required><br><br>
|
|
17
|
+
|
|
18
|
+
<button type="submit">Login (Stores Session & Sets Cookie & Redirects)</button>
|
|
19
|
+
</form>
|
|
20
|
+
</fieldset>
|
|
21
|
+
|
|
22
|
+
<br>
|
|
23
|
+
|
|
24
|
+
<fieldset>
|
|
25
|
+
<legend>2. Access Protected Profile</legend>
|
|
26
|
+
<a href="session-profile">View Profile (Reads HttpSession & Cookies)</a>
|
|
27
|
+
</fieldset>
|
|
28
|
+
|
|
29
|
+
<br>
|
|
30
|
+
|
|
31
|
+
<fieldset>
|
|
32
|
+
<legend>3. Logout & Invalidate Session</legend>
|
|
33
|
+
<a href="session-logout">Logout (Invalidates Session & Clears Cookies)</a>
|
|
34
|
+
</fieldset>
|
|
35
|
+
</body>
|
|
36
|
+
</html>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import java.io.IOException;
|
|
2
|
+
import java.io.PrintWriter;
|
|
3
|
+
import javax.servlet.ServletException;
|
|
4
|
+
import javax.servlet.http.HttpServlet;
|
|
5
|
+
import javax.servlet.http.HttpServletRequest;
|
|
6
|
+
import javax.servlet.http.HttpServletResponse;
|
|
7
|
+
|
|
8
|
+
public class VoterServlet extends HttpServlet {
|
|
9
|
+
|
|
10
|
+
@Override
|
|
11
|
+
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
|
12
|
+
throws ServletException, IOException {
|
|
13
|
+
response.sendRedirect("index.html");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@Override
|
|
17
|
+
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
|
18
|
+
throws ServletException, IOException {
|
|
19
|
+
|
|
20
|
+
response.setContentType("text/html");
|
|
21
|
+
PrintWriter out = response.getWriter();
|
|
22
|
+
|
|
23
|
+
String name = request.getParameter("name");
|
|
24
|
+
String ageStr = request.getParameter("age");
|
|
25
|
+
|
|
26
|
+
out.println("<html><head><title>Voting Eligibility Result</title></head><body>");
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
int age = Integer.parseInt(ageStr.trim());
|
|
30
|
+
|
|
31
|
+
out.println("<h2>Hello " + name.trim() + "</h2>");
|
|
32
|
+
out.println("<p>Age: " + age + "</p>");
|
|
33
|
+
|
|
34
|
+
if (age >= 18) {
|
|
35
|
+
out.println("<h3 style='color:green;'>Eligible to vote</h3>");
|
|
36
|
+
} else {
|
|
37
|
+
out.println("<h3 style='color:red;'>Not able to vote</h3>");
|
|
38
|
+
}
|
|
39
|
+
} catch (Exception e) {
|
|
40
|
+
out.println("<p style='color:red;'>Invalid input</p>");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
out.println("<br><a href='index.html'>Back</a>");
|
|
44
|
+
out.println("</body></html>");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
|
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
4
|
+
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
|
|
5
|
+
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
|
|
6
|
+
version="3.1">
|
|
7
|
+
|
|
8
|
+
<servlet>
|
|
9
|
+
<servlet-name>VoterServlet</servlet-name>
|
|
10
|
+
<servlet-class>VoterServlet</servlet-class>
|
|
11
|
+
</servlet>
|
|
12
|
+
<servlet-mapping>
|
|
13
|
+
<servlet-name>VoterServlet</servlet-name>
|
|
14
|
+
<url-pattern>/vote</url-pattern>
|
|
15
|
+
</servlet-mapping>
|
|
16
|
+
|
|
17
|
+
<welcome-file-list>
|
|
18
|
+
<welcome-file>index.html</welcome-file>
|
|
19
|
+
</welcome-file-list>
|
|
20
|
+
</web-app>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Voter Eligibility Checker</title>
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<h2>Voter Eligibility Checker</h2>
|
|
8
|
+
<form action="vote" method="post">
|
|
9
|
+
<label>Name:</label><br>
|
|
10
|
+
<input type="text" name="name" required><br><br>
|
|
11
|
+
|
|
12
|
+
<label>Age:</label><br>
|
|
13
|
+
<input type="number" name="age" min="1" max="120" required><br><br>
|
|
14
|
+
|
|
15
|
+
<button type="submit">Check Eligibility</button>
|
|
16
|
+
</form>
|
|
17
|
+
</body>
|
|
18
|
+
</html>
|