일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 반복문
- pyqt
- jsp
- 자바
- JDBC
- Oracle
- ddit
- Homebrew
- 맥
- Android
- Mac
- spring
- Java
- 객체지향
- 생활코딩
- 컬렉션프레임워크
- API
- ibatis
- 이클립스
- FastAPI
- 대덕인재개발원
- nodejs
- Error
- 단축키
- 배열
- html
- 자바문제
- servlet
- python
- crud
Archives
- Today
- Total
romworld
Servlet 3 ( request, response, forward,redirect) 본문
requestTest01.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>
<!--
이것은 HTML 주석을 나타낸다.
-->
<%--
이것은 JSP 주석을 나타낸다
--%>
<%
// 이 영역은 JSP문서에서 JAVA명령을 사용할 수 있는 영역으로
// '스크립트릿'dlfkrh gksek.
String name = "홍길동";
%>
<%--
<%= 변수나 수식 %> ==> JSP에서 변수나 수식의 결과를 출력할 때 사용한다.
--%>
<!--
<form>태그의 속성
1) action ==> form에서 작성된 데이터를 받아서 처리할 문서명 또는 서블릿 URL
2) method ==> 전송방식 (GET 또는 POST ==> (기본 : GET)
3) target ==> 응답결과가 나타날 프레임명을 지정한다.
4) enctype ==> 서버로 파일을 전송할 때는 이 속성값을 'multipart/form-data'로 지정해야 한다.
-->
<h2><%= name %>의 Request 연습 form <%= 3 + 4 * 2 %></h2>
<!-- <form action="/webTest/requestTest01.do" method="get"> -->
<form action="<%=request.getContextPath() %>/requestTest01.do" method="get"> // 이런 방식으로 써도 됨
<table border="1">
<tr>
<td>이 름</td>
<td><input type="text" name="username" size="10"></td>
</tr>
<tr>
<td>직 업</td>
<td>
<select name ="job">
<option value="무직">==무직==</option>
<option value="회사원">==회사원==</option>
<option value="전문직">==전문직==</option>
<option value="학생">==학생==</option>
</select>
</td>
</tr>
<tr>
<td>취 미</td>
<td>
<input type="checkbox" name="hobby" value="여행">여행
<input type="checkbox" name="hobby" value="독서">독서
<input type="checkbox" name="hobby" value="게임">게임
<input type="checkbox" name="hobby" value="배드민턴">배드민턴
</td>
</tr>
<tr>
<td colspan="2" style="text-align : center">
<input type="submit" value="전송">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
</body>
</html>
RequestTest01.java
package kr.or.ddit.basic.reqNresp;
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;
@WebServlet("/requestTest01.do")
public class RequestTest01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//POST방식으로 전달되는 데이터의 문자 인코딩 방식 설정
request.setCharacterEncoding("utf-8");
// 클라이언트가 요청을 하면서 보내온 데이터 받기
// getParameter("파라미터명") ==> 해당 파라미터에 설정된 '값'을 가져온다.
// ==> 가져오는 '값'의 자료형은 'String'이다.
String userName = request.getParameter("username"); //설정한 name값을 가져옴
String job = request.getParameter("job");
// getParameterValues("파라미터명") ==> '파라미터명'이 같은 것이 여러개 일 경우에 사용한다.
// ==> 가져오는 '값'의 자료형이 'String []' (String배열)이다.
String[] hobbies = request.getParameterValues ("hobby"); // form의 checkbox의 값들 모두 읽어오기
//---------------------------------------------------------
response.setCharacterEncoding("utf-8");
response.setContentType("text/html charset = 'utf-8'");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><meta charset='utf-8'><title>Request객체 연습</title></head>");
out.println("<body>");
out.println("<h2>Request 테스트 결과</h2><hr>");
out.println("<table border='1'>");
out.println("<tr><td>이 름</td>");
out.println("<td>" + userName + "</td></tr>");
out.println("<tr><td>직 업</td>");
out.println("<td>" + job + "</td></tr>");
out.println("<tr><td>취 미</td>");
out.println("<td>");
if(hobbies!=null) {
// 배열 개수만큼 반복처리
for(String h : hobbies) {
out.println(h + "<br>");
}
}
out.println("</td></tr>");
out.println("</table>");
out.println("<hr>");
out.println("<h2>Request 테스트 결과 -2</h2>");
out.println("<table border='1'>");
out.println("<tr><td>");
out.println("1. 클라이언트의 IP주소 : " + request.getRemoteAddr() + "<br>");
out.println("2. 요청 메서드 : " + request.getMethod() + "<br>");
out.println("3. ContextPath : " + request.getContextPath() + "<br>"); //프로젝트명
out.println("4. 프로토콜 : " + request.getProtocol() + "<br>");
out.println("5. URL 정보 : " + request.getRequestURL() + "<br>");
out.println("6. URI 정보 :" + request.getRequestURI() + "<br>");
out.println("</td></tr>");
out.println("</table>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
requestTest02.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>
<h2> Request연습 Form(숫자 입력은 정수형으로 입력하세요.)</h2>
<form action="/webTest/requestTest02.do" method="post">
<table>
<tr>
<td><input type="text" name="num1" size="10"></td>
<td>
<select name ="calc">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
<option value="%">%</option>
</select>
</td>
<td><input type="text" name="num2" size="10"></td>
<td><input type="submit" value="확인"></td>
</tr>
</table>
</form>
</body>
</html>
<!-- 어머 새롬씨 키보드 너무 좋다 나 주라~ 안돼 내꺼야 -->
RequestTest02.java
package kr.or.ddit.basic.reqNresp;
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;
@WebServlet("/requestTest02.do")
public class RequestTest02 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String calc = request.getParameter("calc");
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
double res = 0.0; // 계산될 결과가 저장될 변수 선언
boolean calcOk = true; // 계산 성공 여부를 저장하는 변수(계산 실패 : false저장)
switch(calc) {
case "+" :
res = num1 + num2;
break;
case "-" :
res = num1 - num2;
break;
case "*" :
res = num1 * num2;
break;
case "/" :
if(num2!=0) {
res = (double) num1 / num2;
}else {
calcOk = false;
}
break;
case "%" :
if(num2 != 0) {
res = num1 % num2;
}else {
calcOk = false;
}
break;
}
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><meta charset='utf-8'><title>Request객체 연습2</title></head>");
out.println("<body>");
out.println("<h2>계산 결과</h2>");
// out.println("<p>" +num1 + calc + num2 + "=" + res + "</p>");
out.printf("%d %s %d =", num1, calc, num2);
if(calcOk ==true) {
out.println(res);
}else {
out.println("계산 불능 (0으로 나누기...)");
}
out.println("</body>");
out.println("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Forward, Redirect
responseTest01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>페이지 이동하기 연습</title>
</head>
<body>
<h3>forward방식, redirect방식 연습</h3><hr>
<form action="<%=request.getContextPath() %>/responseTest01.do" method="post">
forward방식 : <input type="text" name="username">
<input type="submit" value="확인">
</form>
<hr>
<form action="<%=request.getContextPath() %>/responseTest02.do" method="post">
redirect방식 : <input type="text" name="username">
<input type="submit" value="확인">
</form>
</body>
</html>
ResponseTest01.java (forward방식 이용)
package kr.or.ddit.basic.reqNresp;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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("/responseTest01.do")
public class ResponseTest01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
- forward
==> 특정 서블릿에 대한 요청을 다른 서블릿이나 JSP로 넘겨준다.
(같은 Request객체와 Response객체를 사용한다.)
==> URL주소는 처음 요청할 때의 주소가 변경되지 않으며 redirect보다 성능이 좋다.
==> 서버 내부에서만 접근이 가능하다.
==> 이동되는 페이지로 값을 넘기려면 Request객체의 setAttribute()메서드를 이용하여
데이터를 저장해서 보낸다.
형식) request객체변수.setAttribute("key값", 저장할데이터)
*/
//String userName = request.getParameter("username");
// Request객체에 데이터 저장하기
request.setAttribute("tel", "010-1234-5678");
//forward방식으로 이동하기
// 형식) request.getRequestDispatcher("이동할 문서의 경로");
// '이동할 문서의 경로'는 전체 URL중에서 ContextPath이후의 경로를 지정하면 된다.
// 아래 문서의 전체 URL주소 : http://localhost/webtest/responseForwardTest.do
RequestDispatcher rd = request.getRequestDispatcher("/responseForwardTest.do");
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
ResponseForwardTest.java
package kr.or.ddit.basic.reqNresp;
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;
@WebServlet("/responseForwardTest.do")
public class ResponseForwardTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 처음 요청할 때 가져왔던 파라미터값 구하기
String userName = request.getParameter("username");
// Request객체의 setAttribute()메서드로 저장했던 데이터는 getAttribute()메서드를 이용해서 가져온다.
// 형식) Request객체변수.getAttribute("key값");
String tel = (String) request.getAttribute("tel");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><head><meta charset=utf-8><title>forward방식연습</title></head>");
out.println("<body>");
out.println("<h3>Forward 방식 결과</h3><hr>");
out.println("<table border='1'>");
out.println("<tr><td>이름</td>");
out.println("<td>" + userName +"</td></tr>");
out.println("<tr><td>전화</td>");
out.println("<td>" + tel +"</td></tr>");
out.println("</table>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
ResponseTest02.java ( Redirect방식 이용)
package kr.or.ddit.basic.reqNresp;
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("/responseTest02.do")
public class ResponseTest02 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
- redirect방식
==> 다른 페이지로 제어가 넘어 가도록 한다.
==> 처음 요청 받은 문서에서 응답시 브라우저에게 '이동할 URL'을 전송하여 브라우저가
해당 URL로 자동으로 이동 시키는 방식을 말한다.
이 때의 이동은 무조건 GET방식으로 요청하기 때문에 URL의 길이에 제한이 있다.
==> 처음 요청할 때 만들어진 Request객체와 Response객체는 redirect할 때 삭제되고
새로운 Request객체와 Response객체가 만들어져서 재요청을 한다.
==> 현재 문서에 만들어진 데이터를 redirect방식으로 새로운 문서에 전달하려고 하면
'이동할 URL주소'뒤에 데이터를 붙여서 보내야 한다.
*/
// 이동할 URL주소 : http://localhost/webTest/responseRedirectTest.do
// redirect는 Request객체를 유지하지 못한다.( 브라우저에서 새롭게 요청하기 때문에...)
//request.setAttribute("key", "010-9999-7878");
// redirect방식으로 이동하기
// 형식) Response객체변수.sendRedirect("이동할 URL주소");
// '이동할 URL주소'는 전체 URL주소를 기술한다.
//response.sendRedirect(request.getContextPath() + "/responseRedirectTest.do");
// 데이터를 이동할 문서로 보내려면 GET방식으로 보낼 수 있다.
String name = request.getParameter("username"); // 클라이언트가 보낸 데이터를 받는다.
String tel = "010-9999-7878"; // 전달할 데이터
response.sendRedirect(
request.getContextPath() + "/responseRedirectTest.do?username=" + name + "&tel=" + tel );
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
ResponseRedirectTest.java
package kr.or.ddit.basic.reqNresp;
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;
@WebServlet("/responseRedirectTest.do")
public class ResponseRedirectTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// redirect 요청할 때 가져왔던 파라미터값 구하기
String userName = request.getParameter("username");
String tel = request.getParameter("tel");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><head><meta charset=utf-8><title>redirect방식연습</title></head>");
out.println("<body>");
out.println("<h3>sendRedirect 방식 결과</h3><hr>");
out.println("<table border='1'>");
out.println("<tr><td>이름</td>");
out.println("<td>" + userName +"</td></tr>");
out.println("<tr><td>전화</td>");
out.println("<td>" + tel +"</td></tr>");
out.println("</table>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Comments