CodeGym/Java Blog/무작위의/서블릿 및 JSP를 사용하여 간단한 웹 애플리케이션 만들기(2부)
John Squirrels
레벨 41
San Francisco

서블릿 및 JSP를 사용하여 간단한 웹 애플리케이션 만들기(2부)

무작위의 그룹에 게시되었습니다
회원
서블릿 및 JSP를 사용하여 간단한 웹 애플리케이션 만들기(1부) 기사를 이해하는 데 필요한 지식: Java Core에 대해 이미 어느 정도 이해했으며 JavaEE 기술 및 웹 프로그래밍을 살펴보고자 합니다. 현재 기사와 가까운 주제를 다루는 Java Collections 퀘스트를 공부하고 있는 것이 가장 합리적일 것입니다.
서블릿과 JSP를 사용하여 간단한 웹 애플리케이션 만들기(2부) - 1

엔터티 만들기

엔티티 패키지 에서 우리는 두 개의 비공개 문자열 변수인 namepassword 가User 있는 클래스를 만들 것입니다 . 생성자(기본값 및 두 값을 모두 사용하는 생성자)와 getter/setter를 만들고 경우에 따라 및 메서드와 함께 메서드를 재정의합니다 . 즉, 우리는 훌륭한 Java 개발자가 클래스를 만들 때 수행하는 모든 작업을 수행합니다. 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;
    }
}
이제 사용자 목록 생성을 시작할 수 있습니다. 여기에 사용자를 추가하고 여기에서 사용자를 가져와 표시합니다. 그러나 한 가지 문제가 있습니다. 우리는 서블릿 개체를 생성하지 않습니다. Tomcat이 우리를 위해 이 작업을 수행합니다. 우리가 재정의하는 메서드는 이미 정의되어 있으므로 매개 변수를 지정할 수 없습니다. 그러면 두 서블릿 모두에서 볼 수 있는 공유 목록을 어떻게 만들 수 있습니까? 각 서블릿에 목록 객체를 생성하면 한 목록에 사용자를 추가하지만 ListServlet에는 다른 목록의 사용자가 표시됩니다 .. 따라서 두 서블릿이 공유하는 객체가 필요합니다. 일반적으로 우리는 프로그램의 모든 클래스가 공유하는 객체, 즉 전체 프로그램을 위한 하나의 객체가 필요합니다. 디자인 패턴에 대해 들어보셨기를 바랍니다. 어떤 사람들에게는 이것이 그들의 프로그램에서 Singleton 패턴 에 대한 첫 번째 진정한 필요성일 수 있습니다 . 이중 확인 및 동기화를 통해 이상한 싱글톤을 생성할 수 있습니다 . 그러나 여기서 우리의 목적에 완전히 적합하기 때문에 초기 초기화 기술을 사용할 것입니다.

모델 만들기

모델 패키지에 클래스를 만들고(그리고 싱글톤 패턴을 구현하고) 특이한 이름을 지정합니다. 예를 들어, 모델 . 클래스에서 사용자의 개인 목록을 만들고 두 가지 방법을 구현합니다. 하나는 사용자를 추가하고 다른 하나는 문자열(사용자 이름) 목록을 반환합니다. 사용자 개체는 사용자 이름과 비밀번호로 구성되어 있고 사용자 비밀번호를 공개하고 싶지 않기 때문에 이름 목록만 갖게 됩니다.
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 페이지 입니다 . 그것이 바로 내가 그것들을 views 라는 폴더에 넣은 이유입니다 . 모델은 프로그램이 실제로 작업하는 데이터입니다. 우리의 경우 이것은 사용자(사용자 목록)입니다. 그리고 컨트롤러는 그들 사이의 링크입니다. 그들은 모델에서 데이터를 가져와 뷰에 전달합니다(또는 Tomcat 에서 일부 데이터를 가져옵니다)., 처리하고 모델에 전달). 모델이나 뷰가 아니라 비즈니스 로직(프로그램이 수행해야 하는 작업)을 정의합니다. 따라서 각 부분은 자체 비즈니스를 처리합니다.
  • 모델은 데이터를 저장합니다.
  • 뷰는 데이터의 아름다운 표현을 렌더링합니다.
  • 컨트롤러는 데이터 처리를 처리합니다.
이것은 프로그램이 하나의 클래스에 있는 모든 코드의 엄청나게 많은 힙이 아니라 매우 간단하고 유지 관리가 가능하도록 합니다. 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 인 메소드 속성이 있습니다 . 이는 이 양식의 데이터가 POST 요청 으로 서버로 이동함을 나타냅니다 . 작업 속성이 지정되지 않았습니다. 즉, 요청이 이 페이지에 온 것과 동일한 주소( /add ) 전송됩니다 . 따라서 GET 요청을 수신하면 이 주소에 바인딩된 서블릿은 사용자 추가 양식과 함께 JSP를 반환합니다. 그리고 POST 요청을 수신하면 양식이 여기에 데이터를 보낸 것을 알 수 있습니다(여기에 있는 요청 객체에서 추출합니다.doPost()방법, 프로세스 및 저장을 위해 모델에 전달). 입력 필드에는 이름 (사용자 이름의 경우, 비밀번호의 경우 pass ) 이라는 매개변수가 있다는 점은 주목할 가치가 있습니다 . 이것은 매우 중요한 포인트입니다. 따라서 요청(서블릿 내부)에서 이 데이터(입력할 사용자 이름과 암호)를 수신하기 위해 이러한 이름패스 필드를 사용합니다. 그러나 나중에 더 자세히 설명합니다. 데이터 전송을 위한 내 버튼은 관례적인 출력 필드가 아닌 버튼 으로 다시 만들어졌습니다 . 이 접근 방식이 얼마나 널리 채택되었는지는 모르겠지만 저에게는 효과적입니다(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하고 각 이름을 표시할 수 있습니다. 이전에 말했듯 이 JSP 파일은 Java 코드를 실행할 수 있습니다 (정적 HTML 페이지와 다른 점). 일부 코드를 실행하려면 다음 구성을 적절한 위치에 배치하기만 하면 됩니다.
<!-- html code -->
<%
    // Java code
%>
<!-- html code -->
이 구성 내에서 여러 변수에 액세스할 수 있습니다.
  • request — 단순히 req 라고 불리는 서블릿에서 전달한 요청 객체입니다 .
  • 응답 - 응답 객체( 서블릿에서 resp 라고 함)
  • outJspWriter 객체(일반 Writer 를 상속함)로, HTML 페이지 자체 에 직접 무언가를 "쓰는" 데 사용할 수 있습니다 . out.println("Hello, World!") 문 은 System.out.println("Hello, World!") 와 매우 유사 하지만 혼동하지 마십시오!
  • out.println()은 HTML 페이지 에 "쓰고" System.out.println 시스템 출력 스트림 에 씁니다 . Java 코드가 있는 JSP 섹션 내에서 System.out.println()을 호출하면 Tomcat 콘솔 에는 결과가 표시되지만 페이지에는 표시되지 않습니다.
여기에서 JSP 내에서 사용 가능한 다른 개체를 찾을 수 있습니다 . request 객체를 사용하여 서블릿에서 전달된 이름 목록을 가져올 수 있으며(해당 속성을 이 객체에 첨부함) out 객체 를 사용하여 이러한 이름을 표시할 수 있습니다. 그것들을 표시해 봅시다(당분간은 간단한 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 )로 다시 넘길 수 있습니다. 이제 Java 코드가 포함된 섹션을 추가하여 요청에 이러한 속성이 있는지 확인하고 해당 속성이 있으면 사용자가 성공적으로 추가되었다는 메시지를 표시합니다. 이러한 변경 후 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>
따라서 사용자를 저장 및 추가하고 사용자 이름 목록을 표시할 수 있는 완벽하게 작동하는 웹 애플리케이션이 있습니다. 이제 이쁘게 만들기만 하면 됩니다... :) 서블릿과 JSP를 사용하여 간단한 웹 애플리케이션 만들기(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">

    그런 다음 태그를 살펴보고 원하는 스타일을 추가하면 됩니다. 나는 이것에 대해 자세히 다루지 않을 것입니다. 대신 래스터 스타일 클래스가 포함된 파일 3개의 바로 사용할 수 있는 버전을 제공하겠습니다.

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>
그리고 그게 다야. :) 여전히 궁금한 점이나 의견이 있거나 문제가 해결되지 않으면 의견을 남겨주세요. 그리고 모든 것이 어떻게 되었는지에 대한 몇 가지 스크린샷을 첨부하겠습니다.
서블릿과 JSP를 사용하여 간단한 웹 애플리케이션 만들기(2부) - 3
서블릿과 JSP를 사용하여 간단한 웹 애플리케이션 만들기(2부) - 4
서블릿과 JSP를 사용하여 간단한 웹 애플리케이션 만들기(2부) - 5
마지막으로 이 프로젝트로 연습하고 싶다면 다음을 시도할 수 있습니다.
  • 서블릿과 JSP를 만들어 사용자를 삭제하고 다른 쌍을 추가하여 기존 사용자를 편집합니다. 결과는 서블릿을 사용하여 구축된 진정한 CRUD 웹 애플리케이션이 될 것입니다. ;)
  • 추가된 사용자가 서버를 다시 시작한 후에 사라지지 않도록 목록을 데이터베이스로 교체하십시오. :)
행운을 빌어요!
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다