하나의 서블릿으로 여러가지 페이지로 넘어가게 하는 법
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