CodeGym/Java Blog/рдпрд╛рджреГрдЪреНрдЫрд┐рдХ/рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рдЖрдгрд┐ рдЬреЗрдПрд╕рдкреА рд╡рд╛рдкрд░реВрди рдПрдХ рд╕рд╛рдзрд╛ рд╡реЗрдм рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░...
John Squirrels
рдкрд╛рддрд│реА 41
San Francisco

рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рдЖрдгрд┐ рдЬреЗрдПрд╕рдкреА рд╡рд╛рдкрд░реВрди рдПрдХ рд╕рд╛рдзрд╛ рд╡реЗрдм рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ (рднрд╛рдЧ 2)

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдпрд╛ рдЧреНрд░реБрдкрдордзреНрдпреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ
рд╕рджрд╕реНрдп
рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рдЖрдгрд┐ JSPs рд╡рд╛рдкрд░реВрди рдПрдХ рд╕рд╛рдзрд╛ рд╡реЗрдм рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ (рднрд╛рдЧ 1) рд▓реЗрдЦ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЬреНрдЮрд╛рди: рддреБрдореНрд╣реА рдЬрд╛рд╡рд╛ рдХреЛрд░ рдЖрдзреАрдЪ рд╢реЛрдзреВрди рдХрд╛рдврд▓рд╛ рдЖрд╣реЗ рдЖрдгрд┐ JavaEE рддрдВрддреНрд░рдЬреНрдЮрд╛рди рдЖрдгрд┐ рд╡реЗрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд╛рд╣реВ рдЗрдЪреНрдЫрд┐рдд рдЖрд╣рд╛рдд. рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рд╕рдзреНрдпрд╛ рдЬрд╛рд╡рд╛ рдХрд▓реЗрдХреНрд╢рди рдХреНрд╡реЗрд╕реНрдЯрдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдгреЗ рд╕рд░реНрд╡рд╛рдд рдлрд╛рдпрджреЗрд╢реАрд░ рдард░реЗрд▓, рдЬреЗ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рдЬрд╡рд│рдЪреНрдпрд╛ рд╡рд┐рд╖рдпрд╛рдВрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ.
рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рдЖрдгрд┐ рдЬреЗрдПрд╕рдкреА рд╡рд╛рдкрд░реВрди рдПрдХ рд╕рд╛рдзрд╛ рд╡реЗрдм рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ (рднрд╛рдЧ реи) - рез

рд╕рдВрд╕реНрдерд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреЗ

рд╕рдВрд╕реНрдерд╛рдВрдЪреНрдпрд╛ рдкреЕрдХреЗрдЬрдордзреНрдпреЗ , рдЖрдореНрд╣реА UserрджреЛрди рдЦрд╛рдЬрдЧреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЕрд╕рдгрд╛рд░рд╛ рд╡рд░реНрдЧ рддрдпрд╛рд░ рдХрд░реВ : рдирд╛рд╡ рдЖрдгрд┐ рдкрд╛рд╕рд╡рд░реНрдб . рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдбреАрдлреЙрд▓реНрдЯ рдЖрдгрд┐ рджреЛрдиреНрд╣реА рдореВрд▓реНрдпреЗ рдШреЗрдгрд╛рд░реЗ) рдЖрдгрд┐ рдЧреЗрдЯрд░реНрд╕/рд╕реЗрдЯрд░реНрд╕ рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдгрд┐ рдкрджреНрдзрддреА рдЖрдгрд┐ рдкрджреНрдзрддреАрдВрд╕рд╣ toString(), рдлрдХреНрдд рдмрд╛рдмрддреАрдд рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░рд╛ . рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рд╡рд░реНрдЧ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рдЖрджрд░рдгреАрдп Java рд╡рд┐рдХрд╛рд╕рдХ рдЬреЗ рдХрд╛рд╣реА рдХрд░рддреЛ рддреЗ рдЖрдореНрд╣реА рдХрд░реВ. 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;
    }
}
рдЖрддрд╛ рдЖрдореНрд╣реА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреА рдпрд╛рджреА рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддреЛ. рдЖрдореНрд╣реА рддреНрдпрд╛рдд рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдЬреЛрдбреВ, рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рддреНрдпрд╛рдВрдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рддреВрди рдШреЗрдК. рддрдерд╛рдкрд┐, рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рд╕рд░реНрд╡рд▓реЗрдЯ рд╡рд╕реНрддреВ рддрдпрд╛рд░ рдХрд░рдд рдирд╛рд╣реА. рдЯреЙрдордХреЕрдЯ рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдХрд░рддреЛ. рдЖрдореНрд╣реА рддреНрдпрд╛рдд рдЕрдзрд┐рд▓рд┐рдЦрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреА рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдЖрдзреАрдЪ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рдЖрдореНрд╣реА рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА. рдордЧ рдЖрдореНрд╣реА рдПрдХ рд╕рд╛рдорд╛рдпрд┐рдХ рдпрд╛рджреА рдХрд╢реА рддрдпрд╛рд░ рдХрд░реВ рдЬреА рдЖрдордЪреНрдпрд╛ рджреЛрдиреНрд╣реА рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрдордзреНрдпреЗ рджреГрд╢реНрдпрдорд╛рди рдЕрд╕реЗрд▓? рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрдордзреНрдпреЗ рдлрдХреНрдд рдПрдХ рд╕реВрдЪреА рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА рдПрдХрд╛ рд╕реВрдЪреАрдордзреНрдпреЗ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдЬреЛрдбреВ, рдкрд░рдВрддреБ рд╕реВрдЪреАрд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрдордзреНрдпреЗ рджреБрд╕рд░реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВ .. рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рджреЛрдиреНрд╣реА рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕рджреНрд╡рд╛рд░реЗ рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреАрд▓ рд╕рд░реНрд╡ рд╡рд░реНрдЧрд╛рдВрджреНрд╡рд╛рд░реЗ рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ: рд╕рдВрдкреВрд░реНрдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд╕рд╛рдареА рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ. рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рддреБрдореНрд╣реА рдбрд┐рдЭрд╛рдЗрди рдирдореБрдиреНрдпрд╛рдВрдмрджреНрджрд▓ рдХрд╛рд╣реАрддрд░реА рдРрдХрд▓реЗ рдЕрд╕реЗрд▓. рдХрд╛рд╣реА рд▓реЛрдХрд╛рдВрд╕рд╛рдареА, рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреАрд▓ рд╕рд┐рдВрдЧрд▓рдЯрди рдкреЕрдЯрд░реНрдирдЪреА рд╣реА рдкрд╣рд┐рд▓реА рдЦрд░реА рдЧрд░рдЬ рдЕрд╕реВ рд╢рдХрддреЗ. рддреБрдореНрд╣реА рджреБрд╣реЗрд░реА рддрдкрд╛рд╕рдгреНрдпрд╛ рдЖрдгрд┐ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдпрдЭреЗрд╢рдирд╕рд╣ рдХрд╛рд╣реА рдЧреЛрдб рд╕рд┐рдВрдЧрд▓рдЯрди рд╢реЛрдзреВрди рдХрд╛рдвреВ рд╢рдХрддрд╛ (рд╣реЛрдп, рдЖрдордЪрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдЖрд╣реЗ, рдХрд╛рд░рдг рдЯреЙрдордХреЕрдЯ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рд╡реЗрдЧрд│реНрдпрд╛ рдереНрд░реЗрдбрд╡рд░ рдЪрд╛рд▓рддрд╛рдд). рдкрдг рдореА рд▓рд╡рдХрд░ рдЗрдирд┐рд╢рд┐рдПрд▓рд╛рдпрдЭреЗрд╢рди рддрдВрддреНрд░ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЗ, рдХрд╛рд░рдг рддреЗ рдЗрдереЗ рдЖрдордЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдВрд╕рд╛рдареА рдкреВрд░реНрдгрдкрдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ.

рдПрдХ рдореЙрдбреЗрд▓ рддрдпрд╛рд░ рдХрд░рдгреЗ

рдореЙрдбреЗрд▓ рдкреЕрдХреЗрдЬрдордзреНрдпреЗ рд╡рд░реНрдЧ рддрдпрд╛рд░ рдХрд░рд╛ (рдЖрдгрд┐ рд╕рд┐рдВрдЧрд▓рдЯрди рдкреЕрдЯрд░реНрди рд▓рд╛рдЧреВ рдХрд░рд╛) рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рдХрд╛рд╣реАрддрд░реА рдЕрд╕рд╛рдорд╛рдиреНрдп рдореНрд╣рдгрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдореЙрдбреЗрд▓ . рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рд╡рд░реНрдЧрд╛рддреАрд▓ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреА рдЦрд╛рдЬрдЧреА рд╕реВрдЪреА рддрдпрд╛рд░ рдХрд░реВ, рдЖрдгрд┐ рджреЛрди рдкрджреНрдзрддреА рд▓рд╛рдЧреВ рдХрд░реВ: рдПрдХ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рджреБрд╕рд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧрдЪреА рд╕реВрдЪреА (рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдирд╛рд╡реЗ) рдкрд░рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдЖрдордЪреНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡ рдЖрдгрд┐ рдкрд╛рд╕рд╡рд░реНрдб рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдЖрдгрд┐ рдЖрдореНрд╣реА рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕рдВрдХреЗрддрд╢рдмреНрдж рдкреНрд░рдХрдЯ рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдлрдХреНрдд рдирд╛рд╡рд╛рдВрдЪреА рд╕реВрдЪреА рдЕрд╕реЗрд▓.
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 рдмрджреНрджрд▓ рдереЛрдбреЗрд╕реЗ

рддреБрдореНрд╣реА рд╕рд┐рдВрдЧрд▓рдЯрди рдмрджреНрджрд▓ рдЖрдзреАрдЪ рдРрдХрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рдиреЗ , рддреБрдореНрд╣реА рдХрджрд╛рдЪрд┐рдд рджреБрд╕рд░реНтАНрдпрд╛ рдбрд┐рдЭрд╛рдЗрди рдкреЕрдЯрд░реНрди рдореЙрдбреЗрд▓-рд╡реНрд╣реНрдпреВ-рдХрдВрдЯреНрд░реЛрд▓рд░ (MVC) рдмрджреНрджрд▓ рдРрдХрд▓реЗ рдЕрд╕реЗрд▓. рддреНрдпрд╛рдЪрд╛ рдЙрджреНрджреЗрд╢ рд╡реНрдпрд╡рд╕рд╛рдп рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рджреГрд╢реНрдпрд╛рдкрд╛рд╕реВрди рд╡реЗрдЧрд│реЗ рдХрд░рдгреЗ рдЖрд╣реЗ. рдореНрд╣рдгрдЬреЗрдЪ, рд╕рд╛рдордЧреНрд░реА рдХрд╢реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рд╛рдпрдЪреА рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдХреЛрдбрдкрд╛рд╕реВрди рдХрд╛рдп рдХрд░рд╛рд╡реЗ рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгрд╛рд░рд╛ рдХреЛрдб рд╡реЗрдЧрд│реЗ рдХрд░рдгреЗ. рдбреЗрдЯрд╛ рдХрд╕рд╛ рд╕рд╛рджрд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдпрд╛рд╕рд╛рдареА рджреГрд╢реНрдп рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ . рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рджреГрд╢реНрдпреЗ рдЖрдордЪреА JSP рдкреГрд╖реНрдареЗ рдЖрд╣реЗрдд . рдореНрд╣рдгреВрдирдЪ рдореА рддреНрдпрд╛рдВрдирд╛ рджреГрд╢реНрдпреЗ рдирд╛рд╡рд╛рдЪреНрдпрд╛ рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рдареЗрд╡рд▓реЗ рдЖрд╣реЗ . рдореЙрдбреЗрд▓ рд╣рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдХрд╛рдо рдХрд░рддреЛ рддреЛ рдбреЗрдЯрд╛ рдЖрд╣реЗ. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рд╣реЗ рд╡рд╛рдкрд░рдХрд░реНрддреЗ (рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреА рд╕реВрдЪреА) рдЖрд╣реЗ. рдЖрдгрд┐ рдирд┐рдпрдВрддреНрд░рдХ рддреНрдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рджреБрд╡рд╛ рдЖрд╣реЗрдд. рддреЗ рдореЙрдбреЗрд▓рдордзреВрди рдбреЗрдЯрд╛ рдШреЗрддрд╛рдд рдЖрдгрд┐ рддреЗ рджреГрд╢реНрдпрд╛рдВрдХрдбреЗ рдкрд╛рдард╡рддрд╛рдд (рдХрд┐рдВрд╡рд╛ рдЯреЙрдордХреЕрдЯрдХрдбреВрди рдХрд╛рд╣реА рдбреЗрдЯрд╛ рдорд┐рд│рд╡рддрд╛рдд, рддреНрдпрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛ рдЖрдгрд┐ рдореЙрдбреЗрд▓рд▓рд╛ рдкрд╛рд╕ рдХрд░рд╛). рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рд╡реНрдпрд╡рд╕рд╛рдпрд╛рдЪреЗ рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ (рдкреНрд░реЛрдЧреНрд░рд╛рдордиреЗ рдХрд╛рдп рдХрд░рд╛рд╡реЗ) рддреНрдпрд╛рдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛, рдореЙрдбреЗрд▓ рдХрд┐рдВрд╡рд╛ рджреГрд╢реНрдпрд╛рдд рдирд╛рд╣реА. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рд╕реНрд╡рддрдГрдЪрд╛ рд╡реНрдпрд╡рд╕рд╛рдп рд╣рд╛рддрд╛рд│рддреЛ:
  • рдореЙрдбреЗрд▓ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЗ;
  • рджреГрд╢реНрдпреЗ рдбреЗрдЯрд╛рдЪреЗ рд╕реБрдВрджрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛рдд;
  • рдирд┐рдпрдВрддреНрд░рдХ рдбреЗрдЯрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣рд╛рддрд╛рд│рддрд╛рдд.
рд╣реЗ рдПрдХрд╛ рд╡рд░реНрдЧрд╛рддреАрд▓ рд╕рд░реНрд╡ рдХреЛрдбрдЪреНрдпрд╛ рдЕрдХреНрд░рд╛рд│рд╡рд┐рдХреНрд░рд╛рд│ рдвреАрдЧ рдРрд╡рдЬреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд▓рд╛ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрдгрд┐ рджреЗрдЦрд░реЗрдЦ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдмрдирд╡рддреЗ. MVC рд╣реЗ рдХреЗрд╡рд│ рд╡реЗрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрд╕рд╛рдареАрдЪ рдпреЛрдЧреНрдп рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреЗ рдпрд╛ рдХреНрд╖реЗрддреНрд░рд╛рдд (рдЬрд╡рд│рдЬрд╡рд│ рдиреЗрд╣рдореАрдЪ) рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореНрд╣рдгреВрди рдХрд╛рдо рдХрд░рддреАрд▓. рд╣реЗ рдкреЕрдЯрд░реНрдирдЪреЗ рдЕрддрд┐рд╢рдп рд╡рд░рд╡рд░рдЪреЗ рдЖрдгрд┐ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд░реНрдгрди рдЖрд╣реЗ, рдкрд░рдВрддреБ MVC рд╣рд╛ рдпрд╛ рд▓реЗрдЦрд╛рдЪрд╛ рдореБрдЦреНрдп рд╡рд┐рд╖рдп рдирд╛рд╣реА. рдЬрд░ рдХреЛрдгрд╛рд▓рд╛ рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреНрдпрд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рддрд░, Google рддреБрдордЪрд╛ рдорд┐рддреНрд░ рдЖрд╣реЗ! рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдлреЙрд░реНрдо рддрдпрд╛рд░ рдХрд░рд╛. 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 рдкрд░рдд рдХрд░рддреЗ. рдЖрдгрд┐ рдЬрд░ рддреНрдпрд╛рд▓рд╛ POST рд╡рд┐рдирдВрддреА рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реА , рддрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА рдлреЙрд░реНрдордиреЗ рддреНрдпрд╛рдЪрд╛ рдбреЗрдЯрд╛ рдпреЗрдереЗ рдкрд╛рдард╡рд▓рд╛ рдЖрд╣реЗ (рдЬреЗ рдЖрдореНрд╣реА рдордзреАрд▓ рд╡рд┐рдирдВрддреА рдСрдмреНрдЬреЗрдХреНрдЯрдордзреВрди рдХрд╛рдврддреЛ.doPost()рдЬрддрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрджреНрдзрдд, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдгрд┐ рдореЙрдбреЗрд▓рдХрдбреЗ рдкрд╛рд╕ рдХрд░рд╛). рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдХреА рдЗрдирдкреБрдЯ рдлреАрд▓реНрдбрдордзреНрдпреЗ рдирд╛рд╡ рдирд╛рд╡рд╛рдЪреЗ рдкреЕрд░рд╛рдореАрдЯрд░ рдЖрд╣реЗ (рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡рд╛рдВрд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рдкрд╛рд╕рд╡рд░реНрдбрд╕рд╛рдареА рдкрд╛рд╕ ). рд╣рд╛ рдПрдХ рдЕрддрд┐рд╢рдп рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдореБрджреНрджрд╛ рдЖрд╣реЗ. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рд╡рд┐рдирдВрддреАрд╡рд░реВрди (рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрдордзреНрдпреЗ) рд╣рд╛ рдбреЗрдЯрд╛ (рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдгрд╛рд░реЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡ рдЖрдгрд┐ рдкрд╛рд╕рд╡рд░реНрдб) рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рд╣реЗ рдирд╛рд╡ рдЖрдгрд┐ рдкрд╛рд╕ рдлреАрд▓реНрдб рд╡рд╛рдкрд░реВ. рдкрдг рддреНрдпрд╛рдмрджреНрджрд▓ рдирдВрддрд░ рдЕрдзрд┐рдХ. рдбреЗрдЯрд╛ рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдорд╛рдЭреЗ рдмрдЯрдг рдкреБрдиреНрд╣рд╛ рдПрдХ рдмрдЯрдг рдореНрд╣рдгреВрди рдмрдирд╡рд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ , рдиреЗрд╣рдореАрдкреНрд░рдорд╛рдгреЗ рдЖрдЙрдЯрдкреБрдЯ рдлреАрд▓реНрдб рдореНрд╣рдгреВрди рдирд╛рд╣реА. рд╣рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рдХрд┐рддреА рд╡реНрдпрд╛рдкрдХрдкрдгреЗ рд╕реНрд╡реАрдХрд╛рд░рд▓рд╛ рдЧреЗрд▓рд╛ рд╣реЗ рдорд▓рд╛ рдорд╛рд╣реАрдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреЗ рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА (Chrome рдмреНрд░рд╛рдЙрдЭрд░) рдХрд╛рд░реНрдп рдХрд░рддреЗ.

POST рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреА рд╕рд░реНрд╡рд▓реЗрдЯ рд╣рд╛рддрд╛рд│рдгреА

рдЪрд▓рд╛ AddServlet рд╡рд░ рдкрд░рдд рдпреЗрдК . рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ рдХреА рдЖрдордЪреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрд▓рд╛ GET рд╡рд┐рдирдВрддреНрдпрд╛ "рдкрдХрдбрдгреНрдпрд╛рд╕рд╛рдареА" рдкрд░рд╡рд╛рдирдЧреА рджреЗрдгреНрдпрд╛рд╕рд╛рдареА , рдЖрдореНрд╣реА HttpServletdoGet() рд╡рд░реНрдЧрд╛рддреАрд▓ рдкрджреНрдзрдд рдУрд╡реНрд╣рд░рд░реЙрдб рдХреЗрд▓реА рдЖрд╣реЗ . рдЖрдордЪреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрд▓рд╛ POST рд╡рд┐рдирдВрддреНрдпрд╛ рджреЗрдЦреАрд▓ рдкрдХрдбрдгреНрдпрд╛рд╕ рд╢рд┐рдХрд╡рдгреНрдпрд╛рд╕рд╛рдареА , рдЖрдореНрд╣реА рдкрджреНрдзрдд рджреЗрдЦреАрд▓ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. Tomcat рддреЗ рд╕рдорд╛рди рд╡рд┐рдирдВрддреА рдЖрдгрд┐ рдкреНрд░рддрд┐рд╕рд╛рдж рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рддреЗ рдЬреНрдпрд╛рд╡рд░ рдЖрдореНрд╣реА рдХрд╛рд░реНрдп рдХрд░реВ. рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдлреЙрд░реНрдорджреНрд╡рд╛рд░реЗ рдкрд╛рдард╡рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рдирдВрддреАрдЪреЗ рдирд╛рд╡ рдЖрдгрд┐ рдкрд╛рд╕ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдХрд╛рдврд╛ (рдЬрд░ рддреБрдореНрд╣реА рдлреЙрд░реНрдордордзреНрдпреЗ рднрд┐рдиреНрди рдирд╛рд╡реЗ рдирдореВрдж рдХреЗрд▓реА рдЕрд╕рддреАрд▓, рддрд░ рддреА рдирд╛рд╡реЗ рд╡рд╛рдкрд░рд╛). рддреНрдпрд╛рдирдВрддрд░, рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╡рд╛рдкрд░реВрди рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рд╛. рдордЧ рдЖрдореНрд╣реА рдореЙрдбреЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд│рд╡рддреЛ рдЖрдгрд┐ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдореЙрдбреЗрд▓рдордзреНрдпреЗ рдЬреЛрдбрддреЛ. doPost()
@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);
    }
}

JSP рдлрд╛рдпрд▓реАрдВрдордзреНрдпреЗ Java рдХреЛрдб рдЪрд╛рд▓рд╡рдгреЗ

list.jsp рдкрд╛рд╣рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ . рдЬреЗрд╡реНрд╣рд╛ ListServlet рддреНрдпрд╛рд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░реЗрд▓ рддреЗрд╡реНрд╣рд╛рдЪ рддреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ . рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣реА рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрдордзреАрд▓ рдореЙрдбреЗрд▓рдордзреАрд▓ рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡рд╛рдВрдЪреА рдпрд╛рджреА рдЖрдзреАрдЪ рддрдпрд╛рд░ рдХреЗрд▓реА рдЖрд╣реЗ рдЖрдгрд┐ рддреА рдпреЗрдереЗ рд╡рд┐рдирдВрддреА рдСрдмреНрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдкрд╛рд╕ рдХреЗрд▓реА рдЖрд╣реЗ. рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдирд╛рд╡рд╛рдВрдЪреА рдпрд╛рджреА рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣реА рд▓реВрдк рд╡рд╛рдкрд░реВрди рддреНрдпрд╛рд╡рд░ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░реВ рд╢рдХрддреЛ forрдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирд╛рд╡ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВ рд╢рдХрддреЛ. рдореА рдЖрдзреА рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЬреЗрдПрд╕рдкреА рдлрд╛рдЗрд▓реНрд╕ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реВ рд╢рдХрддрд╛рдд (рдЬреЗ рддреНрдпрд╛рдВрдирд╛ рд╕реНрдерд┐рд░ рдПрдЪрдЯреАрдПрдордПрд▓ рдкреГрд╖реНрдард╛рдВрдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│реЗ рдХрд░рддреЗ). рдХрд╛рд╣реА рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдЦрд╛рд▓реАрд▓ рд░рдЪрдирд╛ рдпреЛрдЧреНрдп рдард┐рдХрд╛рдгреА рдареЗрд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
<!-- html code -->
<%
    // Java code
%>
<!-- html code -->
рдпрд╛ рд░рдЪрдирд╛рдордзреНрдпреЗ, рдЖрдореНрд╣реА рдЕрдиреЗрдХ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдорд┐рд│рд╡рддреЛ:
  • рд╡рд┐рдирдВрддреА тАФ рдЖрдордЪреА рд╡рд┐рдирдВрддреА рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреА рдЖрдореНрд╣реА рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрдордзреВрди рдкрд╛рд╕ рдХреЗрд▓реА, рдЬрд┐рдереЗ рддреНрдпрд╛рд▓рд╛ рдлрдХреНрдд req рдЕрд╕реЗ рдореНрд╣рдгрддрд╛рдд ;
  • рдкреНрд░рддрд┐рд╕рд╛рдж - рдкреНрд░рддрд┐рд╕рд╛рдж рдСрдмреНрдЬреЗрдХреНрдЯ (рдЬреНрдпрд╛рд▓рд╛ рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрдордзреНрдпреЗ resp рдореНрд╣рдгрддрд╛рдд);
  • out тАФ рдПрдХ JspWriter рдСрдмреНрдЬреЗрдХреНрдЯ (рдЬреНрдпрд╛рд▓рд╛ рд╕рд╛рдорд╛рдиреНрдп рд▓реЗрдЦрдХрд╛рдЪрд╛ рд╡рд╛рд░рд╕рд╛ рдорд┐рд│рддреЛ), рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдЖрдкрдг рдереЗрдЯ HTML рдкреГрд╖реНрдард╛рд╡рд░ рдХрд╛рд╣реАрддрд░реА "рд▓рд┐рд╣рдгреНрдпрд╛рд╕рд╛рдареА" рдХрд░реВ рд╢рдХрддреЛ . out.println("Hello, World!") рд╡рд┐рдзрд╛рди System.out.println("Hello, World!") рд╕рд╛рд░рдЦреЗрдЪ рдЖрд╣реЗ , рдкрд░рдВрддреБ рддреНрдпрд╛рдВрдирд╛ рдЧреЛрдВрдзрд│рд╛рдд рдЯрд╛рдХреВ рдирдХрд╛!
  • out.println() HTML рдкреГрд╖реНрдард╛рд╡рд░ "рд▓рд┐рд╣рд┐рддреЗ" , рддрд░ System.out.println рд╕рд┐рд╕реНрдЯрдо рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╡рд╛рд╣рд╛рд╡рд░ рд▓рд┐рд╣рд┐рддреЗ . рддреБрдореНрд╣реА Java рдХреЛрдбрд╕рд╣ JSP рд╡рд┐рднрд╛рдЧрд╛рдд System.out.println ( ) рд╡рд░ рдХреЙрд▓ рдХреЗрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ Tomcat рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рд╕рддреАрд▓ , рдкрд░рдВрддреБ рдкреГрд╖реНрдард╛рд╡рд░ рдирд╛рд╣реА.
рддреБрдореНрд╣реА рдпреЗрдереЗ JSP рдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЗрддрд░ рд╡рд╕реНрддреВ рд╢реЛрдзреВ рд╢рдХрддрд╛ . рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯрдордзреВрди рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдирд╛рд╡рд╛рдВрдЪреА рдпрд╛рджреА рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ (рдЖрдореНрд╣реА рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрд▓рд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд▓реА рдЖрд╣реЗ), рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рд╣реА рдирд╛рд╡реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдЙрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд░рддрд╛ рдпреЗрдИрд▓. рдЪрд▓рд╛ рддреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдпрд╛ (рд╕рдзреНрдпрд╛, рдПрдХ рд╕рд╛рдзреА 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>");
%>
рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рдордзреВрди рд╡реНрд╣реНрдпреВрдЬрдордзреНрдпреЗ рдбреЗрдЯрд╛ рдХрд╕рд╛ рдкрд╛рд╕ рдХрд░рд╛рдпрдЪрд╛ рд╣реЗ рдЖрддрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ, рдЖрдореНрд╣реА рдЖрдордЪреЗ 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;
  • рдЖрдгрд┐ рддрд│рд╛рд╢реА, рдореБрдЦреНрдпрдкреГрд╖реНрдард╛рд╡рд░ рдкрд░рдд рдпреЗрдгреНрдпрд╛рд╕рд╛рдареА рдмрдЯрдгрд╛рд╕рд╣ рддрд│рдЯреАрдк.
рд╣реЗ рдЦреВрдк рдЬрд╛рд╕реНрдд divрд╕рд╛рд░рдЦреЗ рд╡рд╛рдЯреВ рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдЖрдореНрд╣реА рдирдВрддрд░ рд╢реИрд▓реА рдЬреЛрдбрд▓реНрдпрд╛рд╡рд░ рддреНрдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВ. рдпреЗрдереЗ 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>
рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдкреВрд░реНрдгрдкрдгреЗ рдХрд╛рд░реНрдпрд░рдд рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрд╣реЗ рдЬреЛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдЬрддрди рдЖрдгрд┐ рдЬреЛрдбреВ рд╢рдХрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдирд╛рд╡рд╛рдВрдЪреА рд╕реВрдЪреА рджреЗрдЦреАрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВ рд╢рдХрддреЛ. рдЖрддрд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддреЗ рд╕реБрдВрджрд░ рдмрдирд╡рд╛рдпрдЪреЗ рдЖрд╣реЗ... :) рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рдЖрдгрд┐ JSPs (рднрд╛рдЧ реи) рд╡рд╛рдкрд░реВрди рд╕рд╛рдзреЗ рд╡реЗрдм рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ - реи

рд╢реИрд▓реА рдЬреЛрдбрдд рдЖрд╣реЗ. рдЖрдореНрд╣реА 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 ) рдЖрдгрд┐ рд╣реЗрдб рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ рд╢реИрд▓реА рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рд▓рд┐рдВрдХ рдЬреЛрдбрд╛ :

    <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>
рдЖрдгрд┐ рддреЗ рдЭрд╛рд▓реЗ. :) рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдЕрджреНрдпрд╛рдк рдХреЛрдгрддреЗрд╣реА рдкреНрд░рд╢реНрди рдХрд┐рдВрд╡рд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реАрддрд░реА рдХрд╛рд░реНрдп рдХрд░рдд рдирд╕рд▓реНрдпрд╛рд╕, рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгреА рджреНрдпрд╛. рдЖрдгрд┐ рд╣реЗ рд╕рд░реНрд╡ рдХрд╕реЗ рдШрдбрд▓реЗ рдпрд╛рдЪреЗ рдХрд╛рд╣реА рд╕реНрдХреНрд░реАрдирд╢реЙрдЯреНрд╕ рдореА рд╕рдВрд▓рдЧреНрди рдХрд░реЗрди.
рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рдЖрдгрд┐ рдЬреЗрдПрд╕рдкреА рд╡рд╛рдкрд░реВрди рдПрдХ рд╕рд╛рдзрд╛ рд╡реЗрдм рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ (рднрд╛рдЧ 2) - 3
рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рдЖрдгрд┐ рдЬреЗрдПрд╕рдкреА рд╡рд╛рдкрд░реВрди рдПрдХ рд╕рд╛рдзрд╛ рд╡реЗрдм рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ (рднрд╛рдЧ 2) - 4
рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рдЖрдгрд┐ рдЬреЗрдПрд╕рдкреА рд╡рд╛рдкрд░реВрди рдПрдХ рд╕рд╛рдзрд╛ рд╡реЗрдм рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ (рднрд╛рдЧ 2) - 5
рдЖрдгрд┐ рд╢реЗрд╡рдЯреА , рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╣ рд╕рд░рд╛рд╡ рдХрд░рд╛рдпрдЪрд╛ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣реА рдкреБрдвреАрд▓ рдЧреЛрд╖реНрдЯреА рдХрд░реВрди рдкрд╛рд╣реВ рд╢рдХрддрд╛:
  • рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╣рдЯрд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯ рдЖрдгрд┐ JSP рдмрдирд╡рд╛ рдЖрдгрд┐ рд╡рд┐рджреНрдпрдорд╛рди рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреБрд╕рд░реА рдЬреЛрдбреА рдЬреЛрдбрд╛. рдпрд╛рдЪрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рд░реНрд╡реНрд╣рд▓реЗрдЯреНрд╕ рд╡рд╛рдкрд░реВрди рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ рдЦрд░рд╛ CRUD рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрд╕реЗрд▓. ;)
  • рд╕реВрдЪреАрд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдмрджрд▓рд╛, рдЬреЗрдгреЗрдХрд░реВрди рд╕рд░реНрд╡реНрд╣рд░ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рдЬреЛрдбрд▓реЗрд▓реЗ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдЕрджреГрд╢реНрдп рд╣реЛрдгрд╛рд░ рдирд╛рд╣реАрдд. :)
рд╢реБрднреЗрдЪреНрдЫрд╛!
рдЯрд┐рдкреНрдкрдгреНрдпрд╛
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирд╡реАрди
  • рдЬреБрдиреЗ
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд╛рдИрди рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рдпрд╛ рдкрд╛рдирд╛рд╡рд░ рдЕрдЬреВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдирд╛рд╣реАрдд