inblog logo
|
Uni
    JSPJAVA

    하나의 Servlet으로 여러가지 페이지로 넘어가게 하는 법

    JAVA
    홍윤's avatar
    홍윤
    Aug 13, 2024
    하나의 Servlet으로 여러가지 페이지로 넘어가게 하는 법
    하나의 서블릿으로 여러가지 페이지로 넘어가게 하는 법
     
    a.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    a.sjp
    </body>
    </html>
    b.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    b.sjp
    </body>
    </html>
    Servlet
    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
    @WebServlet("/") // 하나의 Servlet으로 여러 jsp파일이로 보내는 법 public class moveTestServlet extends HttpServlet { private static final long serialVersionUID = 1L;
    public moveTestServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String view = ""; String uri = request.getRequestURI(); String conPath = request.getContextPath(); String com = uri.substring(conPath.length()); System.out.println("uri:" + uri); System.out.println("conPath=" + conPath); System.out.println("com=" + com); if (com.equals("/a") || com.equals("/")) { view = "a.jsp"; // request.getRequestDispatcher("a.jsp").forward(request, response); 처음 } else if (com.equals("/b")) { view = "redirect:b.jsp"; // response.sendRedirect("b.jsp"); 처음 } else if(com.equals("/list")) { view = "redirect:list.jsp"; } // view 에 담긴 문자열에 따라 포워딩 또는 리다이렉팅 if (view.startsWith("redirect:")) { //9자리에서부터 시작하는 문자열을 인식하여 페이지로 이동 ex) redirect: list.sjp 이면 list.jsp를 인식하여 //페이지 이동을 한다 response.sendRedirect(view.substring(9)); } else { request.getRequestDispatcher(view).forward(request, response); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); //doPost doGet하기 }
    }
    부가설명
    위의 코드는 Servlet을 사용하여 웹 애플리케이션에서 페이지 이동을 처리하는 예제입니다. 이 코드는 HttpServlet을 상속받은 moveTestServlet이라는 서블릿 클래스입니다.
    코드의 구조를 살펴보면, doGet() 메서드와 doPost() 메서드가 있습니다. 이 두 메서드는 HTTP GET 요청과 POST 요청을 처리하기 위한 메서드입니다. 여기서는 doPost() 메서드가 호출되면 doGet() 메서드를 호출하도록 되어있습니다.
    이 서블릿은 웹 애플리케이션의 루트(/) 또는 /a, /b, /list와 같은 URL 패턴에 따라 다른 페이지로 이동합니다. doGet() 메서드에서는 요청된 URI를 분석하여 이동할 페이지를 결정합니다.
    예를 들어, /a 또는 루트(/)로 요청이 들어오면 "a.jsp" 페이지로 포워딩합니다. /b로 요청이 들어오면 "b.jsp" 페이지로 리다이렉트합니다. /list로 요청이 들어오면 "list.jsp" 페이지로 리다이렉트합니다.
    또한, "view"라는 변수에 이동할 페이지의 정보를 저장하고, 이를 기반으로 포워딩 또는 리다이렉트를 수행합니다. "redirect:"로 시작하는 view 값은 리다이렉트를 의미하며, sendRedirect() 메서드를 사용하여 지정된 페이지로 리다이렉트합니다. 그 외의 경우에는 forward() 메서드를 사용하여 지정된 페이지로 포워딩합니다.
    이 코드는 웹 애플리케이션에서 다양한 페이지 이동을 처리하는 방법을 보여주는 예제입니다. 각 URL 패턴에 따라 적절한 페이지로 이동하고, 포워딩 또는 리다이렉트를 수행합니다.

    main 폼
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>Main page</h1>
    <hr>
    <div id="demo">
    <button id="btn">등록</button>
    </div>
    <a href="regform.jsp">등록폼 페이지로 가지</a>
    </body>
    <script> //ex) ajax loadDoc();
    const btn = document.querySelector("#btn");
    btn.addEventListener("click", loadDoc);
    function loadDoc() {
    const xhttp = new XMLHttpRequest();
    xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
    }
    xhttp.open("GET", "regform.jsp", true);
    xhttp.send();
    }
    </script>
    </html>
    main.Servlet
    package Servlet;
    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
    @WebServlet("/main") public class mainServlet extends HttpServlet { private static final long serialVersionUID = 1L;
    public mainServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.sendRedirect("main.jsp"); }
    }
     
    regform.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>Regform Page</h1>
    <hr>
    <form action="regist" method="post">
    이름<input type="text" name="username"> <br>
    나이<input type="text" name="age"><br>
    <input type="submit" value="등록">
    </form>
    </body>
    </html>
    regform.Servlet 으로 가는 것
    package Servlet;
    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
    @WebServlet("/regform") public class regformServlet extends HttpServlet { private static final long serialVersionUID = 1L;
    public regformServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.sendRedirect("regform.jsp"); }
    }
    regform.Servlet 등록하는 서블릿
    package Servlet;
    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
    import DB.TestDao;
    @WebServlet("/regist") public class registServlet extends HttpServlet { private static final long serialVersionUID = 1L;
    public registServlet() { super(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); TestDao dao = new TestDao(); String username = request.getParameter("username"); String _age = request.getParameter("age"); int age = Integer.parseInt(_age); try { dao.regist(username,age); } catch (Exception e) { e.printStackTrace(); } response.sendRedirect("list"); }
    }
    list.Servelt
    package Servlet;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.json.JSONArray;
    import DB.TestDao;
    import vo.TestVo;
    @WebServlet("/list")
    public class listServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public listServlet() {
    super();
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html; charset=UTF-8");
    request.setCharacterEncoding("UTF-8");
    System.out.println("list 서블릿 실행....");
    TestDao dao = new TestDao();
    ArrayList<TestVo> list;
    try {
    list = dao.getlist();
    JSONArray jList = new JSONArray(list);
    String jsonObj = jList.toString();
    System.out.println("jsonObj");
    PrintWriter out = response.getWriter();
    out.print(jsonObj);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    // try { 처음 JSON쓰기전
    // ArrayList<TestVo> list = dao.getlist();
    // request.setAttribute("list", list);
    // request.getRequestDispatcher("list.jsp").forward(request, response);
    // } catch (Exception e) {
    // e.printStackTrace();
    // }
    }
    }
     
     
    —————————————————————————————————————————
    JSON사용 후
    main.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Main page</title>
    </head>
    <body>
    <h1>Main page</h1>
    <hr>
    <a href="regform.jsp">회원가입 등록 폼으로 가는 길~~~</a>
    <!--
    <div id="demo">
    <button id="btn">등록</button>
    </div>
    -->
    </body>
    <!--
    <script>
    const btn = document.querySelector("#btn");
    btn.addEventListener("click", loadDoc);
    function loadDoc() {
    const xhttp = new XMLHttpRequest();
    xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
    }
    xhttp.open("GET", "regform.jsp", true);
    xhttp.send();
    }
    </script>
    • ->
    </html>
    regform.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Regform Page(JSON)</title>
    </head>
    <body>
    <h1>Regform Page(JSON)</h1>
    <hr>
    이름<input type="text" name="username"> <br>
    나이<input type="text" name="age"><br>
    <button id="btn_regist">등록</button>
    <div id="demo"></div>
    </body>
    <script>
    const btnRegist = document.querySelector("#btn_regist");
    btnRegist.addEventListener("click", regist);
    function regist(){
    const username = document.querySelector("input[name='username']").value;
    const age = document.querySelector("input[name='age']").value;
    const xhttp = new XMLHttpRequest();
    xhttp.onload = function() {
    let txt = this.responseText;
    alert(txt);
    window.location.href = "list.jsp"; // 리스트 페이지로 이동
    }
    xhttp.open("POST", "regist", true);
    xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhttp.send("username=" + username + "&age=" + age);
    }
    </script>
    </html>
     
    list.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>목록 페이지</title>
    </head>
    <body>
    <h1>목록 페이지</h1>
    <hr>
    <button id="btn">보기</button>
    <table border="1">
    <thead>
    <tr>
    <th>번호</th>
    <th>이름</th>
    <th>나이</th>
    </tr>
    </thead>
    <tbody id="tbody">
    <c:forEach var="test" items="${list}">
    <tr>
    <td>${test.mno}</td>
    <td>${test.username}</td>
    <td>${test.age}</td>
    </tr>
    </c:forEach>
    </tbody>
    </table>
    </body>
    <script>
    const btn = document.querySelector("#btn");
    btn.addEventListener("click", loadDoc);
    function loadDoc() {
    const tbody = document.querySelector("#tbody");
    const xhttp = new XMLHttpRequest();
    xhttp.onload = function() {
    tbody.innerHTML = ""; // 테이블 초기화
    let jstr = this.responseText;
    let jObj = JSON.parse(jstr);
    for (let i = 0; i < jObj.length; i++) {
    tbody.innerHTML += "<tr>" + "<td>" + jObj[i].mno + "</td>"
    + "<td>" + jObj[i].username + "</td>" + "<td>"
    + jObj[i].age + "</td>" + "</tr>";
    }
    }
    xhttp.open("GET", "list", true);
    xhttp.send();
    }
    </script>
    </html>
     
    registServelt
    package Servlet;
    import java.io.IOException; import java.io.PrintWriter;
    import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
    import DB.TestDao;
    @WebServlet("/regist") public class registServlet extends HttpServlet { private static final long serialVersionUID = 1L;
    public registServlet() { super(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); TestDao dao = new TestDao(); String username = request.getParameter("username"); String _age = request.getParameter("age"); int age = Integer.parseInt(_age); response.setContentType("text/plain; charset=UTF-8"); PrintWriter out = response.getWriter(); try { dao.regist(username, age); out.print("등록완료"); } catch (Exception e) { e.printStackTrace(); } }
    }
     
    listServlet
    package Servlet;
    import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList;
    import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
    import org.json.JSONArray;
    import DB.TestDao; import vo.TestVo;
    @WebServlet("/list") public class listServlet extends HttpServlet { private static final long serialVersionUID = 1L;
    public listServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); request.setCharacterEncoding("UTF-8"); System.out.println("list 서블릿 실행...."); TestDao dao = new TestDao(); ArrayList<TestVo> list; try { list = dao.getlist(); JSONArray jList = new JSONArray(list); String jsonObj = jList.toString(); System.out.println("jsonObj"); PrintWriter out = response.getWriter(); out.print(jsonObj); } catch (Exception e) { e.printStackTrace(); }
    // try { 처음 JSON쓰기전 // ArrayList<TestVo> list = dao.getlist(); // request.setAttribute("list", list); // request.getRequestDispatcher("list.jsp").forward(request, response); // } catch (Exception e) { // e.printStackTrace(); // }
    }
    }
     
    TestDAO
    package DB;
    import java.sql.Statement; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList;
    import javax.naming.spi.DirStateFactory.Result;
    import vo.TestVo;
    public class TestDao {
    public void regist(String username, int age) throws Exception { Connection con = DBcon.getConnection(); PreparedStatement pstmt = null; String query = "INSERT INTO tbl_test(username, age)VALUES(?,?)"; pstmt = con.prepareStatement(query); pstmt.setString(1, username); pstmt.setInt(2, age); pstmt.executeUpdate(); pstmt.close(); con.close(); } public ArrayList<TestVo> getlist() throws Exception { ArrayList<TestVo> list = new ArrayList<>(); Connection con = DBcon.getConnection(); Statement stmt = null; ResultSet rs = null; stmt = con.createStatement(); rs = stmt.executeQuery("SELECT * FROM tbl_test"); while (rs.next()) { TestVo test = new TestVo(); test.setMno(rs.getInt(1)); test.setUsername(rs.getString(2)); test.setAge(rs.getInt(3)); list.add(test); } stmt.close(); con.close(); return list; }
    }
    Share article

    Uni

    RSS·Powered by Inblog