CodeGym /בלוג Java /Random-HE /יצירת יישום אינטרנט פשוט באמצעות servlets ו-JSPs (חלק 2)
John Squirrels
רָמָה
San Francisco

יצירת יישום אינטרנט פשוט באמצעות servlets ו-JSPs (חלק 2)

פורסם בקבוצה
יצירת יישום אינטרנט פשוט באמצעות servlets ו-JSPs (חלק 1) ידע נדרש להבנת המאמר: כבר פחות או יותר הבנתם את Java Core והייתם רוצים להסתכל על טכנולוגיות JavaEE ותכנות אינטרנט. זה יהיה הגיוני ביותר עבורך ללמוד כעת את קווסט אוספי Java, העוסק בנושאים קרובים למאמר.
יצירת יישום אינטרנט פשוט באמצעות servlets ו-JSPs (חלק 2) - 1

יצירת ישויות

בחבילת entities , ניצור Userמחלקה שיש לה שני משתני מחרוזת פרטיים : שם וסיסמה . צור בנאים (ברירת מחדל וכזה שלוקח את שני הערכים) ו-getters/seters, ועקוף את toString()השיטה לכל מקרה, יחד עם המתודות equals()ו hashCode(). במילים אחרות, נעשה כל מה שמפתח ג'אווה מכובד עושה בעת יצירת מחלקה.
public class User {
    private String name;
    private String password;

    public User() {
    }

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;

        if (name != null ? !name.equals(user.name) : user.name != null) return false;
        return password != null ? password.equals(user.password) : user.password == null;

    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + (password != null ? password.hashCode() : 0);
        return result;
    }
}
כעת נוכל להתחיל ליצור רשימת משתמשים. נוסיף אליו משתמשים וניקח ממנו משתמשים כדי להציג אותם. עם זאת, יש לנו בעיה אחת. אנחנו לא יוצרים את אובייקטי ה-servlet שלנו. Tomcat עושה את זה בשבילנו. השיטות שאנו עוקפים בהן כבר מוגדרות לנו, ואנחנו לא יכולים לפרמטרים. כיצד אם כן ניצור רשימה משותפת שתהיה גלויה בשני הסרבלטים שלנו? אם רק ניצור אובייקט רשימה בכל servlet, אז נוסיף משתמשים לרשימה אחת, אבל נציג משתמשים מאחר ב- ListServlet . אז אנחנו צריכים אובייקט שמשותף לשני הסרבלטים. באופן כללי, אנחנו צריכים אובייקט שמשותף לכל המחלקות בתוכנית שלנו: אובייקט אחד לכל התוכנית. אני מקווה ששמעת משהו על דפוסי עיצוב. עבור אנשים מסוימים, זה עשוי להיות הצורך האמיתי הראשון בדפוס הסינגלטון בתוכנית שלהם. אתה יכול להתחרפן ולהוציא קצת סינגלטון מתוק עם בדיקות כפולות וסנכרון (כן, היישום שלנו הוא ריבוי הליכי חיבור, מכיוון שסרבלטים של Tomcat פועלים על שרשורים נפרדים). אבל אני הולך להשתמש בטכניקת האתחול המוקדם, כי היא מתאימה לחלוטין למטרות שלנו כאן.

יצירת מודל

צור מחלקה (ויישם את דפוס הסינגלטון ) בחבילת המודל וקרא לזה משהו יוצא דופן. לדוגמה, דגם . ניצור רשימה פרטית של משתמשים בכיתה שלנו, וניישם שתי שיטות: אחת להוספת משתמש, ואחרת להחזרת רשימת מחרוזות (שמות משתמש). מכיוון שאובייקט המשתמש שלנו מורכב משם משתמש וסיסמה, ואנחנו לא רוצים לחשוף סיסמאות משתמש, תהיה לנו רק רשימה של שמות.
public class Model {
    private static Model instance = new Model();

    private List<User> model;

    public static Model getInstance() {
        return instance;
    }

    private Model() {
        model = new ArrayList<>();
    }

    public void add(User user) {
        model.add(user);
    }

    public List<String> list() {
        return model.stream()
                .map(User::getName)
                .collect(Collectors.toList());
    }
}

קצת על MVC

מכיוון שכבר שמעתם על singleton , בטח שמעתם על בקר אחר של עיצוב דגם- view-controller (MVC). מטרתו להפריד בין ההיגיון העסקי מהנוף. כלומר, להפריד את הקוד שקובע מה לעשות מהקוד שקובע איך להציג דברים. התצוגה אחראית לאופן הצגת הנתונים . במקרה שלנו, התצוגות הן דפי ה-JSP שלנו . בדיוק בגלל זה שמתי אותם בתיקייה בשם views . המודל הוא הנתונים שהתוכנית עובדת איתם בפועל. במקרה שלנו, מדובר במשתמשים (רשימת משתמשים). והבקרים הם החוליה המקשרת ביניהם. הם לוקחים נתונים מהמודל ומעבירים אותם לתצוגות (או מקבלים כמה נתונים מ- Tomcat , מעבדים אותם ומעבירים אותם למודל). אתה מגדיר את ההיגיון העסקי שלך (מה התוכנית צריכה לעשות) בהם, לא במודל או בתצוגה. לפיכך, כל חלק מטפל בעסק שלו:
  • הדגם מאחסן נתונים;
  • תצוגות מציגות ייצוגים יפים של הנתונים;
  • בקרים מטפלים בעיבוד נתונים.
זה מאפשר לתוכנית להיות די פשוטה וניתנת לתחזוקה, במקום ערימה מפלצתית של כל הקוד במחלקה אחת. MVC לא רק מתאים לתכנות אינטרנט, אלא הוא משמש לעתים קרובות במיוחד בתחום זה (כמעט תמיד). במקרה שלנו, הסרבלטים ישמשו כבקרים. זהו תיאור שטחי וקצר מאוד של הדפוס, אך MVC אינו הנושא העיקרי של מאמר זה. אם מישהו רוצה ללמוד עוד, גוגל הוא החבר שלך! צור טופס להוספת משתמש. הוסף את הטופס ל- add.jsp . זה צריך להיות מורכב משני שדות קלט טקסט (אחד רגיל, השני - שדה סיסמה) וכפתור לשליחת הנתונים לשרת.
<form method="post">
    <label>Name:
        <input type="text" name="name"><br />
    </label>

    <label>Password:
        <input type="password" name="pass"><br />
    </label>
    <button type="submit">Submit</button>
</form>
כאן יש לטופס מאפיין מתודה עם הערך פוסט . זה מציין שהנתונים מהטופס הזה יעברו לשרת כבקשת POST . תכונת הפעולה לא צוינה, מה שאומר שהבקשה תישלח לאותה כתובת שממנה הגענו לדף זה ( /add ). לפיכך, עם קבלת בקשת GET , הסרבלט שלנו המחובר לכתובת זו מחזיר את ה- JSP עם טופס ה-Add-User. ואם הוא מקבל בקשת POST , אז אנחנו יודעים שהטופס שלח את הנתונים שלו לכאן (שאותם אנחנו מחלצים מאובייקט הבקשה בשיטה doPost(), בתהליך ומעבירים למודל לשמירה). ראוי לציין שלשדות קלט יש פרמטר שנקרא שם (עבור שמות משתמש, או מעבר לסיסמאות). זו נקודה מאוד חשובה. לפיכך , כדי לקבל נתונים אלה (שם המשתמש והסיסמה שיוזנו) מהבקשה (בתוך ה-servlet), נשתמש בשדות השם והמעבר הללו . אבל עוד על כך בהמשך. הכפתור שלי לשליחת נתונים נעשה שוב ככפתור , לא כשדה פלט כמקובל. אני לא יודע עד כמה הגישה הזו אומצה, אבל היא עובדת בשבילי (דפדפן כרום).

טיפול Servlet בבקשות POST

בואו נחזור ל- AddServlet . אני מזכיר לך שכדי לאפשר ל-servlet שלנו "לתפוס" בקשות GET , החלפנו את doGet()השיטה במחלקה HttpServlet . כדי ללמד את הסרבלט שלנו לתפוס גם בקשות POST , עלינו גם לעקוף את doPost()השיטה. Tomcat מעביר לו אובייקטי בקשה ותגובה דומים שאיתם נעבוד. כדי להתחיל, חלץ את שם הבקשה והעבר פרמטרים שנשלחו על ידי הטופס (אם ציינת שמות שונים בטופס, השתמש בשמות אלה). לאחר מכן, צור אובייקט משתמש באמצעות הנתונים שהתקבלו. לאחר מכן נקבל את אובייקט המודל ונוסיף את המשתמש שנוצר למודל.
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String name = req.getParameter("name");
    String password = req.getParameter("pass");
    User user = new User(name, password);
    Model model = Model.getInstance();
    model.add(user);
}

העברת נתונים לתצוגה

בואו נעבור ל- ListServlet . השיטה doGet()כבר מיושמת. זה פשוט מעביר את השליטה לתצוגה ( list.jsp ). אם עדיין אין לך את זה, צור את זה באנלוגיה לשיטה ב- AddServlet . עכשיו יהיה נחמד לקבל את רשימת שמות המשתמש מהדגם ולהעביר אותם לתצוגה, שתקבל אותם ותציג אותם יפה. לשם כך, נשתמש שוב באובייקט הבקשה שקיבלנו מ- Tomcat . אנחנו יכולים להוסיף תכונה לאובייקט הזה, לתת לו שם כלשהו. למעשה, אנו יכולים להוסיף את האובייקט שאנו רוצים להעביר לתצוגה . בשל העובדה שבעת העברת השליטה מהסרבלט לתצוגה אנו מעבירים לתצוגה את אותם אובייקטי בקשה ותגובה שהסרבלט קיבל, נוכל להוסיף את רשימת השמות שלנו לאובייקט הבקשה ולאחר מכן לקבל את רשימת שמות המשתמש שלנו מהבקשה אובייקט בתצוגה. סיימנו עם הכיתה ListServlet , אז אני אציג את הקוד של כל הכיתה כאן:
package app.servlets;

import app.model.Model;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public class ListServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Model model = Model.getInstance();
        List<String> names = model.list();
        req.setAttribute("userNames", names);

        RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/list.jsp");
        requestDispatcher.forward(req, resp);
    }
}

הפעלת קוד Java בקבצי JSP

הגיע הזמן להסתכל על list.jsp . זה יבוצע רק כאשר ListServlet יעביר אליו את השליטה. בנוסף, כבר הכנו את רשימת שמות המשתמש מהמודל ב-servlet והעברנו אותה כאן באובייקט הבקשה. מכיוון שיש לנו את רשימת השמות, אנו יכולים לחזור עליה באמצעות forלולאה ולהציג כל שם. כפי שאמרתי קודם, קבצי JSP יכולים להפעיל קוד ג'אווה (שזה מה שמבדיל אותם מדפי HTML סטטיים). כדי לבצע קוד כלשהו, ​​כל שעלינו לעשות הוא לשים את המבנה הבא במקום המתאים:
<!-- html code -->
<%
    // Java code
%>
<!-- html code -->
בתוך המבנה הזה, אנו מקבלים גישה למספר משתנים:
  • request - אובייקט הבקשה שלנו, אותו העברנו מהסרבלט, שם הוא נקרא פשוט req ;
  • response - אובייקט התגובה (נקרא resp ב-servlet);
  • out — אובייקט JspWriter (שיורש Writer רגיל ), שבו נוכל להשתמש כדי "לכתוב" משהו ישירות לתוך דף ה-HTML עצמו. ההצהרה out.println("Hello, World!") דומה מאוד ל- System.out.println("Hello, World!") , אבל אל תבלבל ביניהם!
  • out.println() "כותב" לדף HTML , בעוד System.out.println כותב לזרם הפלט של המערכת . אם אתה קורא ל- System.out.println() בתוך מקטע JSP עם קוד Java , תראה את התוצאות במסוף Tomcat , אבל לא בדף.
אתה יכול לחפש אובייקטים אחרים הזמינים בתוך JSP כאן . אנחנו יכולים להשתמש באובייקט request כדי להעביר את רשימת השמות מה-servlet (צירפנו את התכונה המתאימה לאובייקט זה), ונשתמש ב- out object כדי להציג את השמות הללו. בואו נציג אותם (בינתיים, כרשימת HTML פשוטה):
<ul>
    <%
        List<String> names = (List<String>) request.getAttribute("userNames");

        if (names != null && !names.isEmpty()) {
            for (String s : names) {
                out.println("<li>" + s + "</li>");
            }
        }
    %>
</ul>
אם אנחנו צריכים להציג את הרשימה רק אם יש משתמשים, ובדרך אחרת להציג אזהרה שאין משתמשים עדיין, אז נוכל לשכתב מעט את הסעיף הזה:
<%
    List<String> names = (List<String>) request.getAttribute("userNames");

    if (names != null && !names.isEmpty()) {
        out.println("<ui>");
        for (String s : names) {
            out.println("<li>" + s + "</li>");
        }
        out.println("</ui>");
    } else out.println("<p>There are no users yet!</p>");
%>
כעת, כשאנחנו יודעים להעביר נתונים מ-servlets לתצוגות, אנחנו יכולים לשפר את AddServlet שלנו כך שהוא יציג הודעה על הוספה מוצלחת של משתמש. לשם כך, בשיטה doPost(), לאחר הוספת משתמש חדש למודל, נוכל להוסיף את שם המשתמש הזה לתכונות של אובייקט req ולהעביר את השליטה חזרה לתצוגה ( add.jsp ) . ועכשיו נוסיף לו קטע עם קוד ג'אווה, שבו נבדוק האם לבקשה יש תכונה כזו, ואם כן - אז נציג הודעה שהמשתמש נוסף בהצלחה. לאחר השינויים הללו, הקוד המלא של AddServlet ייראה בערך כך:
package app.servlets;

import app.entities.User;
import app.model.Model;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class AddServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/add.jsp");
        requestDispatcher.forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        String password = req.getParameter("pass");
        User user = new User(name, password);
        Model model = Model.getInstance();
        model.add(user);

        req.setAttribute("userName", name);
        doGet(req, resp);
    }
}
כאן, בסוף השיטה doPost()אנו יוצרים תכונה עם שם המשתמש שנוסף למודל, ולאחר מכן קוראים למתודה doGet(), אליה נעביר את הבקשה והתגובה הנוכחיים. השיטה doGet()מעבירה כעת את השליטה לתצוגה, שמקבלת גם את אובייקט הבקשה עם שם המשתמש שנוסף מצורף כתכונה. מה שנותר לנו לעשות הוא לתקן את add.jsp כך שהוא יציג את ההודעה אם אין תכונה כזו. הנה הגרסה הסופית של add.jsp :
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Add new user</title>
    </head>

    <body>
        <div>
            <h1>Super app!</h1>
        </div>

        <div>
            <%
                if (request.getAttribute("userName") != null) {
                    out.println("<p>User '" + request.getAttribute("userName") + "' added!</p>");
                }
            %>
            <div>
                <div>
                    <h2>Add user</h2>
                </div>

                <form method="post">
                    <label>Name:
                        <input type="text" name="name"><br />
                    </label>
                    <label>Password:
                        <input type="password" name="pass"><br />
                    </label>
                    <button type="submit">Submit</button>
                </form>
            </div>
        </div>

        <div>
            <button onclick="location.href='/'">Back to main</button>
        </div>
    </body>
</html>
גוף העמוד מורכב מהדברים הבאים:
  • div עם כותרת עליונה;
  • מיכל div לתוכן, הכולל בדיקה האם קיימת תכונה עם שם משתמש;
  • div עם טופס add-user;
  • ובתחתית, כותרת תחתונה עם כפתור לחזרה לדף הבית.
זה אולי נראה כמו יותר מדי divs, אבל נשתמש בהם מאוחר יותר כשנוסיף סגנונות. הנה הגרסה הסופית של list.jsp :
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Users</title>
    </head>

    <body>
        <div>
            <h1>Super app!</h1>
        </div>

        <div>
            <div>
                <div>
                    <h2>Users</h2>
                </div>
                <%
                    List<String> names = (List<String>) request.getAttribute("userNames");

                    if (names != null && !names.isEmpty()) {
                        out.println("<ui>");
                        for (String s : names) {
                            out.println("<li>" + s + "</li>");
                        }
                        out.println("</ui>");
                    } else out.println("<p>There are no users yet!</p>");
                %>
            </div>
        </div>

        <div>
            <button onclick="location.href='/'">Back to main</button>
        </div>
    </body>
</html>
לפיכך, יש לנו אפליקציית אינטרנט הפועלת במלואה שיכולה לשמור ולהוסיף משתמשים, וגם להציג רשימה של שמותיהם. עכשיו אנחנו רק צריכים לעשות את זה יפה... :) יצירת יישום אינטרנט פשוט באמצעות servlets ו-JSPs (חלק 2) - 2

הוספת סגנונות. נשתמש במסגרת W3.CSS

כרגע, האפליקציה שלנו עובדת, אבל היא נראית שערורייתית לחלוטין. אז בואו נוסיף רקע, נצבע את הטקסט והכפתורים, נוסיף סגנון לרשימות, ניישר אלמנטים, נוסיף כניסות וכו'. סגנונות כתיבה ידנית עלולים לקחת הרבה זמן ולהטיל עלינו על העצבים. אז אני מציע להשתמש במסגרת W3.CSS . יש לו כבר שיעורים מוכנים לשימוש עם סגנונות. אנחנו רק צריכים לארגן את שיעורי ה-CSS שאנו רוצים להשתמש בהם במקומות הנכונים. כדי להוסיף אותם לדפים שלנו, נחבר תחילה את קובץ הסגנון. ישנן שתי דרכים לעשות זאת:
  1. עברו על הדפים שלנו והוסיפו את הקישור הבא לקובץ הסגנונות בסעיף הראש

    <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">

    אפשרות זו מתאימה אם יש לך חיבור אינטרנט קבוע. כאשר אתה פותח את הדפים שלך בשרת המקומי, הסגנונות יימשכו מהאינטרנט.

  2. אבל אם אתה רוצה לקבל את כל הסגנונות באופן מקומי ולא תלוי בחיבור לאינטרנט, הורד את קובץ הסגנון והצב אותו איפשהו בתוך תיקיית האינטרנט ( למשל web/styles/w3.css ). לאחר מכן, עברו על כל הדפים שלנו ( index.html, add.jsp, list.jsp ) והוסיפו את הקישור הבא לקובץ הסגנונות בתוך מדור ה- head :

    <link rel="stylesheet" href="styles/w3.css">

    לאחר מכן, פשוט עברו על התגים והוסיפו את הסגנונות שאתם אוהבים. לא אתעכב על זה בפירוט. במקום זאת, אני פשוט אספק גרסאות מוכנות לשימוש של שלושה מהקבצים שלי עם שיעורים בסגנון רסטר.

index.html
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Super app!</title>
        <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
    </head>

    <body class="w3-light-grey">
        <div class="w3-container w3-blue-grey w3-opacity w3-right-align">
            <h1>Super app!</h1>
        </div>

        <div class="w3-container w3-center">
            <div class="w3-bar w3-padding-large w3-padding-24">
                <button class="w3-btn w3-hover-light-blue w3-round-large" onclick="location.href='/list'">List users</button>
                <button class="w3-btn w3-hover-green w3-round-large" onclick="location.href='/add'">Add user</button>
            </div>
        </div>
    </body>
</html>
add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Add new user</title>
        <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
    </head>

    <body class="w3-light-grey">
        <div class="w3-container w3-blue-grey w3-opacity w3-right-align">
            <h1>Super app!</h1>
        </div>

        <div class="w3-container w3-padding">
            <%
                if (request.getAttribute("userName") != null) {
                    out.println("<div class=\"w3-panel w3-green w3-display-container w3-card-4 w3-round\">\n" +
                            "   <span onclick=\"this.parentElement.style.display='none'\"\n" +
                            "   class=\"w3-button w3-margin-right w3-display-right w3-round-large w3-hover-green w3-border w3-border-green w3-hover-border-grey\">×</span>\n" +
                            "   <h5>User '" + request.getAttribute("userName") + "' added!</h5>\n" +
                            "</div>");
                }
            %>
            <div class="w3-card-4">
                <div class="w3-container w3-center w3-green">
                    <h2>Add user</h2>
                </div>
                <form method="post" class="w3-selection w3-light-grey w3-padding">
                    <label>Name:
                        <input type="text" name="name" class="w3-input w3-animate-input w3-border w3-round-large" style="width: 30%"><br />
                    </label>
                    <label>Password:
                        <input type="password" name="pass" class="w3-input w3-animate-input w3-border w3-round-large" style="width: 30%"><br />
                    </label>
                    <button type="submit" class="w3-btn w3-green w3-round-large w3-margin-bottom">Submit</button>
                </form>
            </div>
        </div>

        <div class="w3-container w3-grey w3-opacity w3-right-align w3-padding">
            <button class="w3-btn w3-round-large" onclick="location.href='/'">Back to main</button>
        </div>
    </body>
</html>
list.jsp
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Users list</title>
        <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
    </head>

    <body class="w3-light-grey">
        <div class="w3-container w3-blue-grey w3-opacity w3-right-align">
            <h1>Super app!</h1>
        </div>

        <div class="w3-container w3-center w3-margin-bottom w3-padding">
            <div class="w3-card-4">
                <div class="w3-container w3-light-blue">
                    <h2>Users</h2>
                </div>
                <%
                    List<String> names = (List<String>) request.getAttribute("userNames");

                    if (names != null && !names.isEmpty()) {
                        out.println("<ul class=\"w3-ul\">");
                        for (String s : names) {
                            out.println("<li class=\"w3-hover-sand\">" + s + "</li>");
                        }
                        out.println("</ul>");

                    } else out.println("<div class=\"w3-panel w3-red w3-display-container w3-card-4 w3-round\">\n"
+
                            "   <span onclick=\"this.parentElement.style.display='none'\"\n" +
                            "   class=\"w3-button w3-margin-right w3-display-right w3-round-large w3-hover-red w3-border w3-border-red w3-hover-border-grey\">×</span>\n" +
                            "   <h5>There are no users yet!</h5>\n" +
                            "</div>");
                %>
            </div>
        </div>

        <div class="w3-container w3-grey w3-opacity w3-right-align w3-padding">
            <button class="w3-btn w3-round-large" onclick="location.href='/'">Back to main</button>
        </div>
    </body>
</html>
וזה הכל. :) אם עדיין יש לך שאלות או הערות, או אם משהו לא מסתדר, אנא השאר תגובה. ואני אצרף כמה צילומי מסך של איך הכל יצא.
יצירת יישום אינטרנט פשוט באמצעות servlets ו-JSPs (חלק 2) - 3
יצירת יישום אינטרנט פשוט באמצעות servlets ו-JSPs (חלק 2) - 4
יצירת יישום אינטרנט פשוט באמצעות servlets ו-JSPs (חלק 2) - 5
ולבסוף , אם אתה רוצה להתאמן עם הפרויקט הזה, אתה יכול לנסות את הדברים הבאים:
  • צור servlet ו-JSP כדי למחוק משתמש, והוסף זוג נוסף כדי לערוך משתמש קיים. התוצאה תהיה יישום אינטרנט מקורי של CRUD שנבנה באמצעות servlets. ;)
  • החלף את הרשימה במסד נתונים, כדי שהמשתמשים שנוספו לא ייעלמו לאחר הפעלה מחדש של השרת. :)
בהצלחה!
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION