48-1. 1_Servlet
순서가 너무 헷갈린다!!!
0-0) 서버를 만들고
0-1) New Dynamic Web Project 생성
0-2) 서버를 켠다!! (Server탭의 서버에서 우클릭 후 add and remove로 프로젝트 add해줌)
1. html File
1-1) view에서 동적화면 작성을 한 후 a태그와 같은 요소로 지정된 주소(href속성) 경로 이동~
저번에는 Servlet을 만들어서 거기서 화면도 만들고 입력값도 받아오고 Stream을 통해 out.print 출력도 해줬음
Servlet은 Controller의 역할만 하고!!!!! JSP에서 일을 분담해준다~~
(JSP는 화면을, Servlet에서 응답할 로직을 만들어줌 )
***Servlet이 Controller고, JSP가 View 역할인 듯
Tomcat은 Servlet container에 Servlet의 classes를 가지고 있음!!!
2. JSP File
JAVA언어로 HTML을 작성할 수 있다
2-1) 저번에는, 문서형태와 문자셋을 설정해주었는데 JSP파일을 생성하면 자동으로 해준다~
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
( + )객체 쓰려면 여기에 import 직접 해줘야 함!
( + ) clude 하면~ 그 파일을 읽어줌!
현재의 JSP 파일에다 다른 파일(JSP, HTML)을 포함시켜 사용을 할 수 있다.
<%@ include file="01_ScriptingElement.jsp" %>
2-2) 화면을 보여주고 사용자에게 입력값을 받는다. (submit하면 action값 경로로 전송)
3. Servlet 생성
3-0) Servlet 생성 시 @WebServlet("/ action값의 경로로 들어올 주소 ")
3-1) 전달한 값 중에 한글이 있을 경우 인코딩 처리(POST방식일 경우)
인코딩 설정 : request.setCharacterEncoding("UTF-8");
3-2) 요청 시 전달한 값을 뽑기!! 및 데이터 가공 처리 => 변수에 기록
request.getParameter("키") : String형의 값
request.getParameterValues("키") : String[]
3-3) 요청 처리 (화면으로 전송)
3-4) 요청 처리 후 사용자가 보게 될 응답페이지 만들기 또는 JSP에게 위임
request의 attribute라는 영역에 응답페이지에 필요한 값 담기
=> request.setAttribute("nickName", nickName);
RequestDispatcher객체 생성(위임할 JSP파일의 경로 기술)
=> RequestDispatcher view = request.getRequestDispatcher("경로.jsp");
전달
view.forward(request, response);
4. JSP File
Servlet이 처리한 값을 사용자에게 보여줄 화면
JAVA 언어를 쓰려면 <% %> <%= %>를 사용한다.
>> post방식
1. WebContent > index.html
<body>영역에 추가
<h3><a href="view/requestTest_Post.html">Post방식 테스트</a></h3>
2. WebContent > view > requestTest_Post.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>안녕 나는 포스트야</title>
</head>
<body>
<h1>POST방식으로 요청 후 응답페이지 받아보기</h1>
<p>
특징.
1. POST방식으로 요청하면 BODY영역에 데이터를 포함시켜서 요청 <br>
=> 사용자가 입력한 값(데이터)들이 URL에 노출되지 않음 <br>
=> 보안유지가 가능함
=> 즉, 로그인이나 회원가입 같은 경우 POST방식이 적합함 <br><br>Web을 배워봅시다~
2. BODY영역은 전송하는 길이에 제약이 없음 <br>
=> 즉, 게시글 작성 같은 경우 POST방식이 적합함 <br><br>
3. 즐겨찾기 불가능하지는 않지만 전달되는 데이터가 URL에 노출되지 않기 때문에
=> 기존에 봤던 응답화면을 볼 순 없음 <br><br>
4. 최대 요청받는 시간이 존재함
</p>
<!-- localhost:8888/1_Servlet/test2.do -->
<form method="post" action="/1_Servlet/test2.do">
<ul>
<li>
이름 : <input type="text" name="name">
</li>
<li>
성별 :
남자 <input type="radio" name="gender" value="M">
여자 <input type="radio" name="gender" value="F">
</li>
<li>
나이 : <input type="number" name="age">
</li>
<li>
사는 도시 :
<select name="city">
<option>서울시</option>
<option>경기도</option>
<option value="GW">강원도</option>
<option>충청도</option>
<option>전라도</option>
<option>경상도</option>
<option>제주도</option>
</select>
</li>
<li>
키 : <input type="range" name="height" min="140" max="200">
</li>
<li>
좋아하는 음식(모두 고르시오):
빵 <input type="checkbox" value="빵" name="food">
치킨 <input type="checkbox" value="치킨" name="food">
피자 <input type="checkbox" value="피자" name="food">
곱창 <input type="checkbox" value="곱창" name="food">
아귀찜 <input type="checkbox" value="아구찜" name="food">
샤브샤브 <input type="checkbox" value="샤브샤브" name="food">
떡볶이 <input type="checkbox" value="떡볶이" name="food">
까르보나라 <input type="checkbox" value="까르보나라" name="food">
갈비탕 <input type="checkbox" value="얼큰갈비탕" name="food">
</li>
<li>
<input type="submit">
<input type="reset">
</li>
</ul>
</form>
</body>
</html>
3. com.kh.controller > RequestPostServlet.java
>> view 폼태그의 액션값과 controller의 URL매핑 주소가 같아야 함
<form method="post" action="/1_Servlet/test2.do">
@WebServlet("/test2.do")
package com.kh.controller;
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;
/**
* Servlet implementation class RequestPostServlet
*/
@WebServlet("/test2.do")
public class RequestPostServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RequestPostServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// doPost에서 작업해도 어차피 이쪽으로 오기 때문에 여기서 작업해~
// System.out.println("확인해보셔야죠~");
// 1. 데이터 가공
// 2. 응답화면 지정
// 0단계 )
// POST방식의 기본 인코딩 설정 ISO-8859-1 이상한 애로 설정
// POST방식 일때만 값을 뽑기전에 미리 UTF-8방식으로 인코딩 설정을 진행해야 함!!
request.setCharacterEncoding("UTF-8");
// 1단계 )
// request.getParameter() 또는 request.getParameterValues()로 값 뽑아내기
String name = request.getParameter("name"); // : String
// í = 홍
String gender = request.getParameter("gender");
int age = Integer.parseInt(request.getParameter("age"));
String city = request.getParameter("city");
Double height = Double.parseDouble(request.getParameter("height"));
String[] foods = request.getParameterValues("food");
System.out.println(name);
System.out.println(gender);
System.out.println(age);
System.out.println(city);
System.out.println(height);
if(foods == null) {
System.out.println("없음");
} else {
/*
for(int i = 0; i < foods.length; i++) {
System.out.println(foods[i]);
}
*/
System.out.println(String.join("-", foods));
}
// 2단계
// 처리 -> Service -> DAO -> DB
// ArrayList / int / VO
// 3단계
// 응답데이터
// 3_1. JSP이용해서 응답페이지 만들기
// JSP(JAVA Server Page) 비스므리한 친구들로는 PHP / ASP
// (젤빠름) / (젤쉬움) / (망함. 윈도우에서만 돌아감)
// 자바로 HTML쓰는 애
// 응답화면(JSP)에서 필요한 데이터를 보내줄 것(request에 담아서)
// Parameter영역은 getParameter("OOO") / setParameter가 없음.. 얘는 없음
// request에 attribute영역이 있음 => 키-밸류 세트로 묶어서 담을 수 있음
// request.setAttribute(키, 밸류); : 밸류가 Object(모든 값을 받기 위해서 => 다형성 적용)
request.setAttribute("name", name);
request.setAttribute("age", age);
request.setAttribute("gender", gender);
request.setAttribute("city", city);
request.setAttribute("height", height);
request.setAttribute("foos", foods);
request.setAttribute("msg", "조회를 성공하셨습니다~");
// 3_2. 현재 작업중인 doGet()에서 응답페이지를 만드는 과정을 위임해야 한다!
// 응답페이지를 JSP에게 위임(전달하기)
// 위임 시 필요한 객체 : RequestDispatcher
// 1) 응답하고자 하는 뷰(JSP) 경로를 지정! request.getRequestDispatcher("JSP경로");
// CPU는 한가지 일만 할 수 있는데, ready상태일 때만 일을 한다. 대기상태에서 준비상태로 만들어주는 디스패칭을 해주는 애
RequestDispatcher view = request.getRequestDispatcher("view/responsePage.jsp");
// 2) forwarding : forward() // 전달해주는 애
view.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);
}
}
4. WebContent > view > responsePage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 이 구문을 스크립틀릿(scriptlet)이라고 해서 자바코드를 쓸 수 있는 영역
// System.out.println("또 뻥치냐~~~~~~~~~~~~~~~~~?");
// 현재 이 JSP파일에 필요한 데이터들 => request객체의 attribute영역에 담겨있음!!
// request.getAttribute("키값")
// 위에서 부터 읽어내려가기 때문에 쓸 변수는 맨 위에 생성해주고 간다.
String name = (String)request.getAttribute("name");
int age = (int)request.getAttribute("age");
String gender = (String)request.getAttribute("gender");
String city = (String)request.getAttribute("city");
double height = (double)request.getAttribute("height");
String[] foods = (String[])request.getAttribute("foods");
String msg = (String)request.getAttribute("msg");
// System.out.println(name);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>개인정보 응답화면~</h1>
<!-- jsp는 java와 다르게 실행버튼을 다시 안눌러도 바로 반영됨 -->
<span><%= name %></span>님은<br>
<span><%= age %></span>살이며, <br>
<span><%= city %></span>에 삽니다. <br>
키는 <span><%= height %></span>cm 이고 <br>
성별
<% if(gender == null) { %>
<!-- 성별을 선택 안했을 경우 -->
<span>선택을 안했습니다.</span><br>
<% } else { %>
<% if(gender.equals("M")) { %>
<!-- 남자 선택 -->
<span>남자</span>입니다.<br>
<% } else { %>
<!-- 여자 선택 -->
<span>여자</span>입니다.<br>
<% } %>
<% } %>
좋아하는 음식
<% if(foods == null) { %>
<!-- 체크를 안했을 경우 -->
<% } else { %>
<!-- 체크를 했을 경우 -->
<ul>
<% for(int i = 0; i < foods.length; i++) { %>
<li><%= foods[i] %></li>
<% } %>
</ul>
입니다.
<% } %>
</body>
</html>
48-2. 2_JSP
include : header/footer 가져오는 용도로 많이씀!
(view에는 연산을 적게 하는 게 좋다??)
48-3. error500 페이지
1. 에러가 뜨면 보여줄 jsp파일 만들어주기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ㅈㅅ;;;;;;;;;;;</title>
<style>
h1{
text-align : center;
color : red;
margin-top : 200px;
}
</style>
</head>
<body>
<h1>문제가 발생했어요!!!!!!!!!!!!!</h1>
</body>
</html>
2. web.xml에 error-page추가하기
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>2_JSP</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<error-page>
<error-code>500</error-code>
<location>/view/error500.jsp</location>
</error-page>
</web-app>
* JSP를 실행할 때는 서버를 다시 시작하지 않아도 됨.
'WAS > WAS수업' 카테고리의 다른 글
#52. DB 테이블 설계, JSP/Servlet 회원(로그아웃, 회원가입) (0) | 2023.09.13 |
---|---|
#50. JSP/Servlet 회원(로그인) (0) | 2023.09.11 |
#49. JSP/Servlet 종합(JDBC연계) (1) | 2023.09.08 |
#47. Servlet (Get방식) (1) | 2023.09.06 |