servlet jsp
jsp에서 servlet 다시 jsp로 데이터 받기(기초)
머리방울
2022. 7. 24. 16:39
학생 성적 입력 프로그램을 활용해서 jsp에서 servlet 다시 jsp로
데이터를 받는 기초 작업을 해보고자 한다.
jsp화면이 4개이기에 servlet은 3개를 만들어줘야 한다.
1. 학생 성적 입력 프로그램 .jps만들기
먼저 jsp 첫화면 상단에 한글깨짐방지 코드를 넣는다!(까먹지 말 것!)
<% request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8"); %>
데이터를 넘길것이기 때문에 form태그활용하며 servlet으로 넘기기 때문에
action 뒤에는 servlet 파일 이름을 넣어준다. servlet은 확장자 없이 적으면 된다.
<form action="name" method="post">
<div>
<div>
<h2>학생 성적 입력 프로그램</h2>
</div>
<div>
이름 <input type="text" placeholder="학생명 입력" name="name">
<input type="submit" value="확인">
</div>
</div>
</form>
2. 첫번째 servlet 파일로 이동
servlet은 자바기반이기 때문에 파일 이름 첫글자는 대문자로 만들어 준다.
파일은 java Resources -> scr/main/java에서 만드는것 잊지 말 것!
나는 Score_name으로 만들었다.
servlet 첫화면을 열면 주석처리된 것들이 많다. 우리는 doPost()만 쓸 것이기 때문에
주석과 doPost() 안에 내용들을 다 지워준다.
1) jsp에서 데이터를 받고자 한다면
form action="name" 과 아래의 화면 이름을 같게 만들어 줘야 한다.
2) servlet에서도 한글깨짐 방지 코드 넣기
우리는 doPost()만 사용할 것이기 때문에 아래와 같이 코드를 넣는다.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
3) jsp에서 넘어온 데이터 받기
서블릿에서 받을때는 request.getParameter("name=이름으로 설정한 것")으로 받아 온다.
String name = request.getParameter("name");
4) 받은 데이터를 다음 jsp로 보내기
"name"로 받아온 것을 name으로 보내겠다!
request.setAttribute("name", name);
4) jsp 어느 파일로 받을건지 정하기
이 부분은 복붙해서 사용하기를 권장! 파일이름 지정 부분만 바꿔쓰면 되기 때문이다.
복사 붙여넣기할 때는 임포트를 꼭 해야 오류가 나지 않는다!!
RequestDispatcher dispatcher = request.getRequestDispatcher(" .jsp 파일 이름 입력 ");
dispatcher.forward(request, response);
나는 score_profile.jsp로 넘어가도록 만들었다.
RequestDispatcher dispatcher = request.getRequestDispatcher("score_profile.jsp");
dispatcher.forward(request, response);
3. 두번째 .jsp 파일 만들기
상단에 한글깨짐방지 코드 넣기!!
<form action="profile" method="post">
<input type="hidden" value="${name }" name="name" >
(★ 첫번째 jsp파일에서 넘어온 자료는 두번째 jsp 파일에서는 필요하지 않기에
type를 hidden으로 변경해준다. form 태그 안에서 input태그를 이용하면 자료를 넘길 수 있기에
input으로 첫번째 자료를 넣어주어야 한다.
jsp-> servlet -> jsp에서는 param을 작성하지 않고 내가 name=" " 으로 지정한 value 속성을 넣어준다.)
<div><h2> 학생 성적 입력 프로그램</h2></div>
<div> ${name} 학생의 기본정보를 입력합니다.</div>
<div> 학년 <input type="text" name="grade"> </div>
<div> 연락처
<select name="tel">
<option value="010">010</option>
<option value="011">011</option>
<option value="019">019</option>
</select>
<input type="text" name="tel">
<input type="text" name="tel">
</div>
<div>
성별
<input type="radio" checked name="gender" value="남">남
<input type="radio" name="gender" value="여">여
</div>
<div>
<input type="submit" value="확인">
<input type="button" value="뒤로가기" onclick="history.back(-1);">
</div>
</form>
4. 두번째 servlet으로 이동
1) form action 이름과 맞춰주기
@WebServlet("/profile")
2)한글 깨짐 방지 코드 입력
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
3) 두번째 jsp 데이터 받기
String name = request.getParameter("name");
String grade = request.getParameter("grade");
String gender = request.getParameter("gender");
String[] tel = request.getParameterValues("tel");
(★select 이용하여 데이터를 받기에 3가지 자료가 넘어오니까
3가지 자료 모두 받기 위하여 배열을 사용한다)
4)세번째 jsp로 데이터 보내기
request.setAttribute("name",name);
request.setAttribute("grade",grade);
request.setAttribute("gender",gender);
request.setAttribute("tel" , tel[0]+ "-" + tel[1]+ "-" +tel[2]);
(★jsp는 html기반하여 java사용하기 때문에 배열은 인식하지 못하기 때문에 문자열로 풀어줘야 한다.)
5) 세번째 jsp파일명 작성하기
RequestDispatcher dispatcher = request.getRequestDispatcher("score_score.jsp");
dispatcher.forward(request, response);
5. 세번째 jsp로 이동
<body>
<form action="score_score" method="post">
1) servlet에서 받은 자료 넘겨 받기
<input type="hidden" value="${name }" name="name">
<input type="hidden" value="${grade }" name="grade">
<input type="hidden" value="${gender }" name="gender">
<input type="hidden" value="${tel }" name="tel">
(헷갈렸던 부분인데 tel[0]+ "-" + tel[1]+ "-" +tel[2] 을 tel로 속성을 부여했으니 ${tel}하면 된다)
<div> <h2>학생 성적 입력 프로그램</h2> </div>
<div>${name } 학생의 성적을 입력합니다.</div>
<table>
<tr>
<td> 국어</td>
<td> <input type="text" name="kor"></td>
</tr>
<tr>
<td> 영어</td>
<td> <input type="text" name="eng"></td>
</tr>
<tr>
<td> 수학</td>
<td> <input type="text" name="math"></td>
</tr>
</table>
<div>
<input type="submit" value="확인">
</div>
</form>
6. 세번째 servlet으로 이동
1) 이름 맞춰주기
@WebServlet("/score_score")
2) 한글깨짐 방지 코드
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
3) jsp 데이터 받기
String name = request.getParameter("name");
String grade = request.getParameter("grade");
String gender = request.getParameter("gender");
String tel = request.getParameter("tel");
String kor=request.getParameter("kor");
String eng=request.getParameter("eng");
String math=request.getParameter("math");
(★jsp 자료를 문자열로 받아오기 때문에 다음 페이지에서는 평균이 필요하여
위의 세가지 자료를 정수로 변경하는 작업을 해야한다)
int a = Integer.parseInt(kor);
int b = Integer.parseInt(eng);
int c = Integer.parseInt(math);
double avg = (a + b + c)/3.0;
4)jsp로 자료 보내기
request.setAttribute("name", name);
request.setAttribute("grade", grade);
request.setAttribute("gender", gender);
request.setAttribute("tel", tel);
request.setAttribute("kor", kor);
request.setAttribute("eng", eng);
request.setAttribute("math", math);
request.setAttribute("avg", avg);
5) jsp 파일 지정
RequestDispatcher dispatcher = request.getRequestDispatcher("score_final.jsp");
dispatcher.forward(request, response);
7. 마지막 jsp로 이동
<h2>학생 성적 입력 프로그램</h2>
${name }학생의 정보입니다.<br>
이름 : ${name } <br>
학년 : ${grade } <br>
연락처 : ${tel } <br>
성별 : ${gender } <br>
국어 : ${kor } <br>
영어 : ${eng } <br>
수학 : ${math } <br>
평균 : ${avg } <br>