JSP
HTML주석
<!-- -->
JSP 주석
<%-- --%>
<form>태그의 속성
- action => <form>태그에서 구성한 데이터를 받아서 처리할 '문서명' 또는 '서블릿URL'
- method => 전송방식(GET 또는 POST), 기본값은 GET
- target => 응답이 나타날 프레임을 지정한다.
- enctype => 서버로 파일을 전송할 때는 이 속성에 'multipart/form-data'로 지정해야 한다.
<%@ 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명령을 사용할 수 있는 영역으로 '스트립트릿'이라고 한다.
String name = "오리";
%>
<%--
<%=변수나 수식 %> ==> JSP에서 변수나 수식의 결과를 출력할 때 사용한다.
==> 이것을 'Expression(표현식)'이라고 한다.
--%>
<h2><%= name %>의 Request연습<%=4-3 %></h2>
<form action="/webTest/requestTest01.do" method="get">
<table border="1">
<tr>
<td>이 름</td>
<td><input type="text" size="10" name="username"></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>
Request객체 메서드
클라이언트가 보내온 자료 받는 메서드
- Request객체.getParameter("name")
자료형 String
단일 데이터를 가져올 때 사용 - Request객체.getParameterValues("name")
자료형 String []
파라미터 명이 여러 개인 경우에 사용 배열값으로 받는다
기타 메서드
- 클라이언트 IP주소
getRemoteAddr() - 요청 메서드
getMethod() - ContextPath
getContextPath - 프로토콜
getProtocol() - URL정보
getRequestURL() - URI정보
getRequestURI()
서블릿 (java)
package kr.or.ddit.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;
/**
* Servlet implementation class RequestTest01
*/
@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방식으로 전달되는 데이터의 인코딩 방식 설정
// GET방식은 server.xml에서 URI인코딩방식 설정함
request.setCharacterEncoding("utf-8");
// 클라이언트가 보내온 자료 받기
// 형식) Request객체.getParameter("파라미터명")
// ==> 해당 '파라미터명'에 설정된 '파라미터값'을 가져온다.
// ==> 가져오는 '파라미터값'의 자료형은 'String'이다.
// text 타입
String name = request.getParameter("username");
// select태그 name값을 지정하면 value값을 가져옴
String job = request.getParameter("job");
// checkbox타입 체크한 항목만 전송
// 형식) Request객체.getParmeterValues("파라미터명")
// ==> 파라미터명이 같은 것이 여러 개 일 경우에 사용한다
// ==> 가져오는 '파라미터값'의 자료형은 'String[]'이다
String[] hobbies = request.getParameterValues("hobby");
// 처리 결과 출력하기
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.append("<html><head><meta charset='utf-8'><title>Request객체연습</title></head>")
.append("<body> <h2>Request 자료 처리 예제</h2>")
.append("<table border='1'>")
.append("<tr><th>이름</th><td>"+name+"</td></tr>")
.append("<tr><th>직업</th><td>"+job+"</td></tr>")
.append("<tr><th>취미</th><td>");
for(int i=0; i<hobbies.length; i++) {
out.append(hobbies[i]);
if(i!=hobbies.length-1) {
out.append(", ");
}
}
out.append("</td></tr></table>");
out.println("<br><hr><br>");
out.println("<h2>Request객체의 메서드</h2>");
out.println("<ol>");
out.println("<li>클라이언트의 IP 주소 : "+request.getRemoteAddr()+"</li>");
out.println("<li>요청 메서드 : "+request.getMethod()+"</li>");
out.println("<li>ContextPath : "+request.getContextPath()+"</li>");
out.println("<li>프로토콜 : "+request.getProtocol()+"</li>");
out.println("<li>URL정보 : "+request.getRequestURL()+"</li>");
out.println("<li>URI정보 : "+request.getRequestURI()+"</li>");
out.println("</ol>");
out.append("</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
서블릿을 활용한 계산 예제
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>
<hr>
<!-- 경로설정시 꼭 project이름부터 시작할 것 -->
<form action="/webTest/requestTest02.do" method="get">
<input type="text" name="num1">
<select name="cal">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
<option value="%">%</option>
</select>
<input type="text" name="num2">
<input type="submit">
</form>
<br>
<!-- <iframe name="if"></iframe> -->
</body>
</html>
servlet
package kr.or.ddit.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;
/**
* Servlet implementation class RequestTest02
*/
@WebServlet("/requestTest02.do")
public class RequestTest02 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
String cal = request.getParameter("cal");
double sum = 0.0;
String result = "";
if(cal.equals("+")) {
sum = num1+ num2;
} else if(cal.equals("-")) {
sum = (num1- num2);
} else if(cal.equals("*")) {
sum = num1*num2;
} else if(cal.equals("/")) {
if(num2==0) {
result = "잘못된 계산식 입니다";
} else {
// 둘다 정수형인 경우 정수형 결과값이 나오기 때문에 하나는 형변환 필요
sum = (double)num1/num2;
}
} else {
sum = num1%num2;
}
if(!(num2==0 && cal.equals("/"))) {
result = num1+" "+cal+" "+num2+" = "+sum;
}
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><head><meta charset='utf-8'><title>계산결과</title></head>");
out.println("<body><h1>계산 결과</h1><hr><br>");
out.println(result);
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
JSP나 서블릿이 실행되는 도중에 다른 문서로 이동하기
forward방식
특정 JSP문서나 서블릿에 대한 요청을 다른 서블릿이나 JSP로 넘긴다.
(이 때 HttpServletRequest객체와 HttpServletResponse객체를 공유하기 때문에
파라미터를 넘길 수 있다.)
문서가 이동해도 클라이언트의 웹브라우저의 나타나는 주소는 처음 요청할 때의 주소가 바뀌지 않는다.
같은 서버 내부에서만 접근이 가능하다.
** 데이터 공유하기
이동되는 페이지로 값을 넘기려면 Request객체의 setAttribute()메서드를 이용하여
데이터를 세팅하고 받는 쪽에서는 Request객체의 getAttribute()메서드를 이용하여
데이터를 읽어온다.
보낼 때 형식 ) Request객체.setAttribute("key값", 데이터);
==> 'key값'은 문자열로 지정하고, '데이터'는 모든 종류의 데이터가 가능하다.
받을 때 형식) Request객체.getAttribute("key값");
예제) 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>forward, redirect연습</h2>
<form action="/webTest/forwardTest01.do" method="post">
<h3>'/forwardTest01.do'에서 '/forwardTest02.do'로 이동하기</h3>
forward연습 : <input type="text" name="username">
<input type="submit" value="확인">
</form>
<br><hr><br>
<form action="/webTest/redirectTest01.do" method="post">
<h3>'/redirectTest01.do'에서 '/redirectTest02.do'로 이동하기</h3>
redirect연습 : <input type="text" name="username">
<input type="submit" value="확인">
</form>
</body>
</html>
예제) ForwardTest01
package kr.or.ddit.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("/forwardTest01.do")
public class ForwardTest01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("tel", "010-1234-5678");
request.setAttribute("age", 20);
// forward방식으로 문서 이동하기
// Request객체의 getRequestDispatcher()메서드에 이동할 서블릿이나
// JSP를 지정해주는데 전체 URI경로 중에서 ContextPath 이후의 경로를 지정해준다
// 예) 이동할 전체 주소가 '/webTest/forwardTest02.do'이면
// Request객체.getRequestDispatcher("/forwardTest02.do")
RequestDispatcher rd = request.getRequestDispatcher("/forwardTest02.do");
rd.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
예제) ForwardTest02
package kr.or.ddit.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;
/**
* Servlet implementation class ForwardTest01
*/
@WebServlet("/forwardTest02.do")
public class ForwardTest02 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// parameter자료 받기
String userName = request.getParameter("username");
// setAttribute()로 설정한 데이터 받기
String tel = (String)request.getAttribute("tel"); // 타입은 object 반드시 형변환 필요
int age = (int) request.getAttribute("age");
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><h3>forward 결과</h3>");
out.println("<table border='1'>");
out.println("<tr><th>이름</th><td>"+userName+"</td></tr>");
out.println("<tr><th>전화번호</th><td>"+tel+"</td></tr>");
out.println("<tr><th>나이</th><td>"+age+"</td></tr>");
out.println("</table></body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
redirect방식
- 단순한 다른 문서로의 이동이다
(이 때 Request객체와 Response객체를 공유하지 않기 때문에 직접 파라미터를 넘길 수 없다)
>> redirect는 Request객체를 유지하지 못한다 - 응답시 브라우저에게 '이동할 URL'을 전송하여 브라우저가 해당 URL로 새롭게 요청하는 방식이다
(이 때 GET방식으로 요청하기 때문에 URL의 길이에 제한이 있다) - redirect는 Response객체의 sendRedirect()메서드를 이용한다.
sendRedirect()메서드에 이동할 URL주소를 지정할 때는 '전체 주소'를 지정해 주어야 한다.
response.sendRedirect(request.getContextPath()+"/패턴이름");
예제) 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>forward, redirect연습</h2>
<form action="<%=request.getContextPath() %>/redirectTest01.do" method="post">
<h3>'/redirectTest01.do'에서 '/redirectTest02.do'로 이동하기</h3>
redirect연습 : <input type="text" name="username">
<input type="submit" value="확인">
</form>
</body>
</html>
예제) RedirectTest01
package kr.or.ddit.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("/redirectTest01.do")
public class RedirectTest01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
- redirect
단순한 다른 문서로의 이동이다
(이 때 Request객체와 Response객체를 공유하지 않기 때문에 직접 파라미터를 넘길 수 없다)
응답시 브라우저에게 '이동할 URL'을 전송하여 브라우저가 해당 URL로 새롭게 요청하는 방식이다
(이 때 GET방식으로 요청하기 때문에 URL의 길이에 제한이 있다)
*/
// redirect는 Request객체를 유지하지 못한다
request.setAttribute("tel", "010-1234-5678");
request.setAttribute("age", 20);
// redirect는 Response객체의 sendRedirect()메서드를 이용한다.
// sendRedirect()메서드에 이동할 URL주소를 지정할 때는 '전체 주소'를 지정해 주어야 한다.
// response.sendRedirect("/webTest/redirectTest02.do");
response.sendRedirect(request.getContextPath()+"/redirectTest02.do");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
예제) RedirectTest02
package kr.or.ddit.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("/redirectTest02.do")
public class RedirectTest02 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// parameter자료 받기
String userName = request.getParameter("username");
String tel = null;
int age = 0;
// setAttribute()로 설정한 데이터 받기
// redirect에서는 전달이 안되므로 null 오류가
// tel = (String)request.getAttribute("tel");
// age = (int) request.getAttribute("age");
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><h3>redirect 결과</h3>");
out.println("<table border='1'>");
out.println("<tr><th>이름</th><td>"+userName+"</td></tr>");
out.println("<tr><th>전화번호</th><td>"+tel+"</td></tr>");
out.println("<tr><th>나이</th><td>"+age+"</td></tr>");
out.println("</table></body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
데이터를 전달하는 redirect예제
데이터를 전하는 방식은 url에 정보를 포함하면 된다
"?username="+username+"&tel="+tel+"&age="+age
RedirectTest01
package kr.or.ddit.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("/redirectTest01.do")
public class RedirectTest01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//파라미터로 넘어오는 자료 받기
String username = request.getParameter("username");
String tel = "010-9999-9999";
int age = 20;
// redirect로 이동할 문서에 자료를 보내고 싶으면 GET방식으로 보낼 수 있다.
response.sendRedirect(request.getContextPath()+"/redirectTest02.do"
+ "?username="+username+"&tel="+tel+"&age="+age);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
RedirectTest02
package kr.or.ddit.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("/redirectTest02.do")
public class RedirectTest02 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// parameter자료 받기
String username = request.getParameter("username");
String tel = request.getParameter("tel");
int age = Integer.parseInt(request.getParameter("age"));
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><h3>redirect 결과</h3>");
out.println("<table border='1'>");
out.println("<tr><th>이름</th><td>"+username+"</td></tr>");
out.println("<tr><th>전화번호</th><td>"+tel+"</td></tr>");
out.println("<tr><th>나이</th><td>"+age+"</td></tr>");
out.println("</table></body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
'JAVA > HIGH JAVA' 카테고리의 다른 글
[JAVA] 쿠키(Cookie) (0) | 2024.05.30 |
---|---|
[JAVA] UseCase (0) | 2024.05.30 |
[JAVA] 서블릿(Servlet) (1) | 2024.05.28 |
[JAVA] Log4J (0) | 2024.05.27 |
5/24 Homework - 게시판 mybatis적용 (0) | 2024.05.24 |