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 CHANGED
@@ -28,7 +28,7 @@ function copyDirRecursive(src, dest) {
28
28
  }
29
29
 
30
30
  const templates = [
31
- { name: 'all (Unpack All 40 Templates)', value: '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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wad-lab",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "Interactive CLI for WAD Lab starter templates compatible with Node 12+",
5
5
  "bin": {
6
6
  "wad-lab": "./bin/index.js"
@@ -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>