반응형
forward
변수의 기본 scope는 page이기 때문에 다른 서블릿으로 데이터를 공유 할수 없다.
forward 방식은 request와 response를 넣어서 위임하므로 request에 정보를 저장하여 다른 서블릿에서도 공유 할 수 있게 된다. 또한 forward 방식은 해당 서블릿의 존재를 client가 알 필요가 없어 url 자체가 변경되지 않는다. 단 서버로 전송한 데이터가 남아있는 상태로 새로고침(재요청)을 하게 되면 요청을 계속 반복하게 되어 DB에 insert하는 행위가 반복(중복) 되는 문제가 생길 수도 있다.
forward 사용 방법
1. HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1 align="center">forward</h1>
<form action="forward" method="post">
<table align="center">
<tr>
<td>아이디 : </td>
<td><input type="text" name="userId"/></td>
<td rowspan="2"><button type="submit" style="height: 50px;">로그인</button></td>
</tr>
<tr>
<td>비밀번호 : </td>
<td> <input type="password" name="password"/></td>
</tr>
</table>
</form>
</table>
</form>
</body>
</html>
반응형
2. forward Servlet 작성
@WebServlet("/forward")
public class ReceivelnformationServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
문자 인코딩
request.setCharacterEncoding("UTF-8");
userID와 password 값 가져오기
String userId = request.getParameter("userId");
String password = request.getParameter("password");
입력 받은 id를 이용한 "xxx님 환영합니다"라는 메세지를 출려하는 응답화면을 만들기 위해
새로운 서블릿을 위임시켜야 한다.
}
}
위임할 수 있는 코드 방법
ReaqustDispatcher 인스턴스 생성 후 forward 메소드를 이용해서 요청과 응답에 대한 정보를 전달한다.
전달할 id값을 setAttribute로 전달
request.setAttribute("userId",userId); ("이름", 속성)
getRequestDispatcher 인자에 전달받을 경로 설정
RequstDispatcher rd = request.getRequestDispatcher("print")
forward 처리하기
rd.forward(request, response);
3. 위임 받은 서블릿 작성
@WebServlet("/print") getRequestDispatcher에 전달한 경로
public class PrintLoginSuccessServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
forward 받은 서블릿에서도 요청 방식이 get이였으면 doGet을 post였으면 doPost를 호출한다
이전 서블릿의 setAttribute에 전달한 정보를 해당 서블릿에서 getAttribute으로 다시 꺼내온다.
String userId = (String) request.getAttribute("userId");
응답에 필요한 데이터가 확인되면 동적인 웹 페이지를 생성한다
StringBuilder reponseText = new StringBuilder();
reponseText.append("<!doctype html\n")
.append("<html>\n")
.append("<head>\n")
.append("</head>\n")
.append("<body>\n")
.append("<h1 align = 'center'>")
.append(userId)
.append("님 환영합니다:)")
.append("</h1>")
.append("</body>\n")
.append("</html>");
인코딩
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.print(reponseText.toString());
out.flush();
out.close();
}
}
반응형
'프로그래밍 > Servlet&JPS' 카테고리의 다른 글
06 Servlet : Session과 Cookie (0) | 2022.08.23 |
---|---|
05. Servlet : sendRedirect (0) | 2022.08.23 |
03 Servlet : Error message 와 page 만들기 (0) | 2022.08.23 |
02 . Servlet : 서블릿 메소드 (0) | 2022.08.23 |
01. Servlet : 서블릿개념과 동작구조 (0) | 2022.08.23 |