Daily coding
Servlet : Java에서 데이터 보내는방식 1 ( sendRedirect ) 본문
web ( client ) <---- 통신 ----> Java ( server )
* web (client) ------> Java (Server)
: 클라이언트에서 데이터를 가지고 자바로 이동할 수 있는 몇가지 방법이 있다 ( 다음에 알아보자 )
마찬가지로, Java의 servlet에서 다른 곳으로 이동할 수 있는 방법이 존재한다.
가장 대표적인 2가지 방식은 sendRedirect 와 forward 이다.
sendRedirect 는 단순 이동시 주로 사용되는 방식이며,
데이터를 가지고 이동할 수 있으나 코드가 복잡해지기 때문에 데이터를 가지고 이동하기 위해서는
forward 방식을 사용한다.
또한, sendRedirect 는 반드시 doGet메소드로 이동하게 되며, Forward 방식은 client의 요청대로 메소드를 수행한다.
1. sendRedirect : 짐 (데이터) 없이 단순 이동일 때 주로 사용
response.sendRedirect("helloServlet");
// helloServlet 파일은 web.xml 파일에 등록이 되어야 함 ( 또는 @ (name space) 설정하기 )
response.sendRedirect ("index.html"); ====> html파일로 이동
response.sendRedirect ("index.jsp"); ====> jsp파일로 이동
response.sendRedirect (" index.jsp?name='이름' ");
* 위와 같은 방법으로 jsp파일로 다양한 데이터를 넘겨줄 수 있다.
html 파일은 서블릿으로 데이터 패키지를 사용할 수 없으나, jsp, ajax을 이용하여 데이터는 받을 수 있다
요즘 추세는 jsp 사용 안함, ajax로 함(Vue, React 등에서 사용)
jsp에서는
<% String name = request.getParameter("name"); %>
이런식으로 데이터를 받아 사용한다
(받은 데이터는 모두 String 타입)
< 데이터를 가지고 페이지 이동하기 >
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 인코딩 설정
// sendRedirect로 보낼 때 이름 깨지는 것 해결하기
req.setCharacterEncoding("utf-8");
String name = req.getParameter("name");
String sage = req.getParameter("age");
int age =0;
age = Integer.parseInt(sage);
if(sage==null || sage.trim().equals("")) {
resp.sendRedirect("index.html");
// 빈문자열 일 때 처리방법,
// 이렇게 하는 것보다는 html에서 값을 넘겨주기 전에 확인하는 작업을 거친다.
// 주로 html에서 먼저 작업을 한다
}else {
age = Integer.parseInt(sage);
}
String fruits[] = req.getParameterValues("fruits");
if(fruits == null || fruits.length <= 0 ) {
// null이거나 배열 길이가 0보다 같거나 작을때
// 다시 원래 html 파일로 되돌리기
resp.sendRedirect("index.html");
}
String fArr = ""; // 배열 데이터 전송을 위해 문자열에 모두 붙이기
for (int i = 0; i < fruits.length; i++) {
fArr = fArr + "&fruits="+ fruits[i];
System.out.println();
}
// sendRedirect : 단순 이동시 사용
resp.sendRedirect("ResultServlet?name="+URLEncoder.encode(name)+"&age="+age+ fArr );
}
< sendRedirect 받는 부분의 Servlet >
//Get
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("ResultServlet까지 도착");
// 이름 깨지는 것 해결하기
req.setCharacterEncoding("utf-8");
String name = req.getParameter("name");
String age = req.getParameter("age");
String fruits[] = req.getParameterValues("fruits");
resp.setContentType("text/html; charset=UTF-8");
PrintWriter pw = resp.getWriter();
pw.println("<html>");
pw.println("<head>");
pw.println("<title>제목</title>");
pw.println("<body>");
pw.println("<p>이름: "+ name +"</p>");
pw.println("<p>나이: "+ age +"</p>");
for (int i = 0; i < fruits.length; i++) {
pw.println("<p>좋아하는 과일: "+ fruits[i] +"</p>");
}
pw.println("</body>");
pw.println("</head>");
pw.println("</html>");
pw.close();
}
* 참고 : sendRedirect 이외의 링크이동시켜주는 함수
- setHeader : 링크걸어줌 Location은 고정 값
resp.setHeader("Location", "http://www.naver.com");
---> naver 사이트로 이동
- link 를 설정한 경우는 HttpServletResponse 설정을 해주어야 링크로 이동한다
resp.setStatus ( HttpServletResponse.SC_MOVED_PERMANENTLY );
< setHeader >
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// resp.setHeader() : url사용
String url = req.getParameter("url");
// link 를 설정한 경우는 HttpServletResponse 설정을 해주어야 링크로 이동한다
resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
// 링크 걸어주기
if(url.equals("naver.com")) {
// setHeader : 링크걸어줌 Location은 고정 값
resp.setHeader("Location", "http://www.naver.com");
}
else if(url.equals("google.com")) {
resp.setHeader("Location", "http://www.google.com");
}
else {
resp.setHeader("Location", "http://www.zum.com");
}
}
'Front-end > 비동기통신' 카테고리의 다른 글
Servlet : servlet 과 jsp 연결하기 (0) | 2020.01.18 |
---|---|
Servlet : Java에서 데이터 보내는방식 2 ( forward ) (0) | 2020.01.18 |
Servlet : 에러 만들기 및 xml <init- parameter> (0) | 2020.01.16 |
Servlet : 서버와 연결하기 2 ( Java Servlet 파일 만들기 ) (0) | 2020.01.16 |
Servlet : 서버와 연결하기 1 ( web.xml 이란?) (0) | 2020.01.16 |