YJ의 새벽

JSP (Java Server Pages) 란 ? 본문

SelfStudy/Server ( Servlet , JSP )

JSP (Java Server Pages) 란 ?

YJDawn 2023. 3. 20. 15:33

 

 

 

  • JSP

-- JAVA 코드가 들어가 있는 HTML 코드 

-- 서블릿보다 쉽고 작성하기 빠름.

-- 디자인부분 (html) 과 로직부분 (java) 로 분리시킬수 잇음.

-- .jsp 파일에 지시자 꼭 작성

<%@ page language="java" contentType="text/html; cherset=UTF-8"
    pageEncoding ="UTF-8" %>

-- <%@  %>  :  지시자 ( 알려주거나 지시하는 속성을 기입)

-- charset = UTF-8   :  현재 문서를 해석할 때 UTF-8 인코딩을 이용해서 해석  (해석방법안내)

-- pageEncoding = "UTF-8"  :  현재 문서가 UTF-8 인코딩으로 작성되어있음.  (문서가 작성된 형식 안내)

-- <%  %>  :  스크립틀릿 (Scriptlet)  JSP 에서 자바코드를 작성할 수 있는 영역

              --> JSTL 라이브러리 이용해 태그 형식 변겅

              ex  )  < c:if > JSTL < /c:if >

-- <%=   %>   :  표현식 (Expression)   :  자바코드의 값을 HTML 형식으로 출력 (자바의값을 화면에 보이게 함 )

              --> EL (Expression Language, 표현언어) 로 변경

              ex  )  ${ EL }

 

 

 

  • JSP 로 응답하기

-- Dispatcher  :  발송자 , 필요한 정보를 제공하는 자. 

-- RequestDispatcher  :  요청을 위임하는 역할의 객체 .

                            --> 요청에대한 응답화면을 만들어 클라이언트에게 출력하는 역할  을 위임하는 객체 .

-- req.getRequsetDispatcher ( " JSP 경로 " )     = webapp 폴더 기준

                --  HttpServletRequset 객체가 생성될때 

                     내부에 요청을 위임하는 객체를 생성하는 방법을 포함하고 있다.

-- forward  :  보내다, 전달하다 , 전송하다.

                -- forward는 페이지 이동이 아닌 JSP에게 req, resp 를 전달만 하는 것.

                 --> JSP 응답을 대신하는것 뿐 . 

                 --> 결론  :  페이지 이동 X  --> 주소창의 요청 주소도 변하지 않는다 . !! 

 

		// *********************** JSP 로 응답하기 

		RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/loginResult.jsp");
		
		req.setAttibure("키",값);   // (String key, Object value)
                                    // value 값이 String이라면, 업캐스팅 상태.
         
		dispatcher.forward(req, resp);    // req, resp 를 jsp 로 넘겨줌.

손님   -->  웨이터 (Servlet)  --> 알바 (dispatcher) =foward  -->  셰프 (JSP) 

 

 

 

 

 

 

 

 

 

**  EX 1     index.html  

    <!-- 
        로그인
        user01  /  pass01!   로그인시 성공
     -->
            <!-- 프로젝트명/서비스요청주소 -->
     <form action="/JSPProject1/login" method="post">
        ID : <input type="text" name="inputId">
        PW : <input type="password" name="inputPw">
        <button>로그인</button>
     </form>

 

**  EX 1     JAVA 클래스   ( LoginServlet.java )

@WebServlet("/login")    // <servlet>, <servlet-mapping> 태그 대체 어노테이션
public class LoginServlet extends HttpServlet {
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		req.setCharacterEncoding("UTF-8");     // post방식 데이터문자 인코딩처리

		String id = req.getParameter("inputId");
		String pw = req.getParameter("inputPw");

		System.out.println(id);
		System.out.println(pw);

		String result = null;

		if (id.equals("user01") && pw.equals("pass01!")) {
			result = "로그인성공";
		} else {
			result = "id/pw 불일치";
		}
	//	resp.setContentType("text/html; charset=UTF-8");
	//	PrintWriter out = resp.getWriter();
		
		// *********************** JSP 로 응답하기 
		
		RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/loginResult.jsp");
		
		req.setAttribute("r", result);	
		
		dispatcher.forward(req, resp);    // req, resp 를 jsp 로 넘겨줌.
	}
}

 

 

**  EX 1     loginResult.jsp   JSP 파일 .

<%@ page language="java" contentType="text/html; cherset=UTF-8"
	pageEncoding="UTF-8"%>

<!-- HTML 주석 : HTML 태그 ,CSS 등 HTML 요소만 주석처리 가능.-->
<%-- JSP 주석 : HTML 요소 + JSP 전용 태그--%>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>로그인 결과 페이지</title>
</head>
<body>
	<h1>로그인 결과</h1>
	
	<!-- jsp에서 자바코드의 값을 출력하는 방법 -->
	<%= request.getParameter("inputId") %>  <br>
	<%= request.getParameter("inputPw") %>  <br>
	
	<%
		// jsp 에서는 req, resp 를
		// request , response 으로 풀네임 작성해야 한다 !!!
		
		String res = (String)request.getAttribute("r");
		           // 다운캐스팅 필요
	%>
	
	                 <!-- res 변수 저장된값이 출력 -->
	<h3 style='color:green;'> <%= res %></h3>
	
	<button type="button" onclick='history.back()'>돌아가기</button>
</body>
</html>

user01 / pass01!&nbsp; 로그인

 

 

--->  정리해보자 .   

 html  에서  name 값을 

 java  로  받아와서  loginReslt.jsp  (html) 로 넘겨주고 

           dispatcher    -->  req.getRequserDispatcher("jsp파일경로") 

      -->  req.setAttribute("key",value)   -->   dispatcher.forward(req,resp);

 jsp 에서 html+자바 코드 작성.  

        -->    <%  String value = request.getAttribute("key")  %> 

        -->   <%=  value  %>

 

 

 

 

 

 

 

 

 

 

 

 

 

**  EX 2    index.html  

     <form action="/JSPProject1/pizzaOrder" method="post">
        피자 선택(1만원) : 
        <select name="pizza">
            <option>콤비네이션 피자</option>
            <option>고구마 피자</option>
            <option>쉬림프 피자</option>
            <option>하와이안 피자</option>
            <option>불고기 피자</option>
        </select>
        <br><br>
        사이즈
        <br>
        <label>
            R <input type="radio" name="size" value="R">
        </label>
        <br>
        <label>
            L(+2,000) <input type="radio" name="size" value="L">
        </label>
        <br><br>
        수량 : <input type="number" name="amount" min="1" max="10" value="1">
        <br><br>
        <button>주문하기</button>
     </form>

 

**  EX 2     JAVA 클래스   ( PizzaOrderServlet.java )

@WebServlet("/pizzaOrder")
public class PizzaOrderServlet extends HttpServlet {
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		req.setCharacterEncoding("UTF-8");
		
		String size = req.getParameter("size"); // R or L
		
		int amount = Integer.parseInt(req.getParameter("amount"));
	        // String --> int 변환 .
		
		// 기본(10000) + 사이즈( 0 or 2000 ) * 수량
		int temp=0;
		if( size.equals("L" )) {
			temp = 2000;
		}
		int total = (10000 + temp) * amount;

		
		
		// JSP 요청위임 객체생성
		RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/orderResult.jsp");
		
		req.setAttribute("tot", total);  // req에 total값 세팅
		dispatcher.forward(req, resp);  // req, resp 위임.
	}
}

 

**  EX 2     orderResult.jsp   JSP 파일 .

<%@ page language="java" contentType="text/html; cherset=UTF-8"
    pageEncoding ="UTF-8" %>
    
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>주문결과</title>
    <style>
    	#container{
    		width : 400px;
    		border : 1px solid black;
    		margin : auto;
    	}
    </style>
</head>
<body>
	<%
		int total = (int)request.getAttribute("tot");
		String pizza = request.getParameter("pizza");
		String size = request.getParameter("size");
		String amount = request.getParameter("amount");
	%>
	<div id ="container">
		주문한 피자 : <%= pizza %> <br>
		
		<% if(size.equals("L")){  %>
			Large
		<% } else { %>
			Regular
		<% } %>
		<br>
		수량 : <%= amount %> 판
		<h3> 총 합계 : <%= total %></h3>	
	</div>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

**  EX 3     index.html  

<form action="/JSPProject1/login2" method="post">
     <h2>회원가입 (JSP 버전)</h2>
     <table id="table1">
        <tr>
            <th>아이디</th>
            <td><input type="text" name="inputId"></td>
        </tr>
        <tr>
            <th>비밀번호</th>
            <td><input type="password" name="inputPassword"></td>
        </tr>
        <tr>
            <th>비밀번호 확인</th>
            <td><input type="password" name="inputPassword"></td>
        </tr>
        <tr>
            <th>이름</th>
            <td><input type="text" name="inputName"></td>
        </tr>
        <tr>
            <th>이메일</th>
            <td><input type="email" name="inputEmail"></td>
        </tr>
        <tr>
            <th>취미</th>
            <td><label>공부 <input type="checkbox" name="hobby" value="공부"></label>
                <label>게임 <input type="checkbox" name="hobby" value="게임"></label>
                <label>헬스 <input type="checkbox" name="hobby" value="운동"></label><br>
                <label>독서 <input type="checkbox" name="hobby" value="독서"></label>
                <label>영화 <input type="checkbox" name="hobby" value="영화"></label>
                <label>코딩 <input type="checkbox" name="hobby" value="코딩"></label>
            </td>
        </tr>
        <tr>
            <td></td>
            <td><button>회원가입</button></td>
        </tr>   
     </table> 
     </form>

 

 

**  EX 3     JAVA 클래스   ( LoginServlet2.java )

@WebServlet("/login2")
public class LoginServlet2 extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");

		String[] inputPassword = req.getParameterValues("inputPassword"); // password를 배열로 가져온다.

		int result=0;
		if ( inputPassword[0].equals(inputPassword[1])) {   // 비밀번호가 같으면 1을 
			result=1;
		}else {                                             // 비밀번호가 다르면 0을 리턴.
			result=0;
		}

		RequestDispatcher dispatcher = req.getRequestDispatcher("WEB-INF/views/login2Result.jsp");
		req.setAttribute("key", result);                  // 리턴값을 "key" 로 전달.
		dispatcher.forward(req, resp);
	}
}

 

 

**  EX 2     login2Result .jsp   JSP 파일 .

<body>
	<% 
		int result = (int)request.getAttribute("key");
		String inputId = request.getParameter("inputId");
		String[] inputPassword = request.getParameterValues("inputPassword");
		String inputName = request.getParameter("inputName");
		String inputEmail = request.getParameter("inputEmail");
		String[] hobby = request.getParameterValues("hobby");
	%>

	<% if ( result == 1) {  %>        <!-- 비밀번호가 같으면 리스트 출력 -->

    <li>아이디 : <%= inputId %></li>
    <li>비밀번호 : <%= inputPassword[0] %></li>
    <li>이름 : <%= inputName %></li>
    <li>이메일 : <%= inputEmail %></li>
    <li>취미 :
      <% if ( hobby != null){ %>  
     <% for ( int i =0 ; i < hobby.length ; i++){  %>    <!-- 취미값 받아오기 -->
    	     <%=  hobby[i]  %>
    	<%  } 
          } %>
    </li>
    	<h3><%= inputName %>님의 회원가입이 완료되었습니다</h3>	
	<% } else { %>                                 <!-- 비밀번호가 다르면 실패문구 출력 -->
	<h3> 회원가입이 실패되었습니다</h3> 
	<% } %>
	<br>
	<button type="button" onclick='history.back()'>돌아가기</button>
</body>

 

 

비밀번호 같으면 .
비밀번호 다르면.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments