하나의 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