요르딩딩

Servlet&JSP 프로그래밍 (36강 ~ 45강) 본문

[강의]/[서블릿 JSP 강의] (뉴렉처)

Servlet&JSP 프로그래밍 (36강 ~ 45강)

요르딩딩 2024. 8. 21. 15:20
728x90
반응형
[36. 계산기 서블릿 완성하기]
@Webservlet("/calcpage")
public class Calc extend...
	protected void service(HttpServletRequest request...){
    
    Cookie[] cookies = request.getCookies();
    
    String exp ="0";
    if(cookies != null)
    	for(Cookie c : cookies)
        	if(c.getName().equals("exp")) {
            	exp =c.getValue();
                break;
            }
            
        ///
        out.write("~~~ exp");​
        out.write("<form action=/calc3\" method=\"post\">}); // 호출
        ...

@WebServlet("/calc3")
public class Calc3 extend HttpServlet {
	protected void service(HttpServlet ~):
    	Cookie[] cookies = request.getCookies();
        
        String value = request.getParameter("value");
        String operator = request.getParameter("operator");
        String dot = request.getParameter("dot");
        
        
        // 쿠키 읽어오기
        String exp = "";
        if(cookies != null)
    	for(Cookie c : cookies)
        	if(c.getName().equals("exp")) {
            	exp =c.getValue();
                break;
            }
            
        ...
        
        exp += (value == null)? "" : value;
        exp += (operator == null)? "" : operator;
        exp += (dot == null)? "" : dot;
        
        Cookid expCookie = new Cookie("exp", exp);
        
        response.addCookie(expCookie);
        response.sendReditrect("calcpage"); // 위치가 같기때문에 경로로 안해도됨.
[37. 쿠키 삭제하기]
- expCookie.setMaxAge(0); // 쿠키 지우는 방법​
Cookid expCookie = new Cookie("exp", "");
expCookie.setMaxAge(0); // 쿠키 지우는 방법​


[38. GET과 POST에 특화된 서비스 함수]

- @WebServlet("/calc")   // GET, POST 둘다 호출할 수 있습니다.
- req.getMethod() : html의 form에서 보낸 method를 읽을 수 있습니다.
- init() -> service(...) -> doGet(...) OR doPoset(...) 
     : do함수를 못찾으면 405Error 발생 -> do메소드 오버라이드 해주면 정상 

[html]
<!DOCTYPE>
<html>
...
<body>
   <form action ="calc" method="POST">
      <input type ="submit" value="">
   </form>
</body>
</html>


[controller]

@WebServlet("/calc") 
public ... (HttpServletRequest req ...){

   if(req.getMethod().equals.("GET"){
 	  ...
   } else if(req.getMethod().equals.("POST"){
   	...
   }
   
   super.service(req, resp); // 요청에따른 do함수를 찾는다. *** 못찾을시 405Error 발생
}

@Override
Protected void doGet(HttpServlet req, ...){ // 이부분을 추가하면 405에러 안남.
   로그
   }

@Override
Protected void doPost(HttpServlet req, ...){ // 이부분을 추가하면 405에러 안남.
   로그
   }
   
}


[controller : 공통부분 없애서 최적화]

@WebServlet("/calc") 
public ... (HttpServletRequest req ...){

@Override
Protected void doGet(HttpServlet req, ...){ // 이부분을 추가하면 405에러 안남.
   로그
   }

@Override
Protected void doPost(HttpServlet req, ...){ // 이부분을 추가하면 405에러 안남.
   로그
   }
 
}
[39. 계산기 프로그램 하나의 서블릿으로 합치기]
- 하나의 url로 get, post 둘다 처리가능합니다.
- 추가로 sendRedirect를 통해 자기자신을 다시 호출할 수도 있으며, 특정url만 쿠키를 받도록 setPath()도 
   지정할 수 있습니다.
@WebServlet("/calc") 
public ... (HttpServletRequest req ...){

@Override
Protected void doGet(HttpServlet req, ...){ // 이부분을 추가하면 405에러 안남.
   // Calculator.java 내용 가져오기
   }

@Override
Protected void doPost(HttpServlet req, ...){ // 이부분을 추가하면 405에러 안남.
   // Calc3.java 내용 가져오기 
   }
 
}

 

[40. JSP 시작하기 (Jasper를 이용한 서블릿 프로그래밍)]
- calculator.jsp 생성
- ${ } : 단순 html파일과는 다르게 jsp파일은 값을 계산해서 보여줄 수 있다.

- 배포하게되면, tomcat의 home 디렉토리에 넣야하는데, 이클립스 같은 경우는 Server Path에 임시 배포디렉토리를 사용한다. (왜냐 서버를 다양하게 사용할 수 있어야하니깐 임시를 만들어서 사용한다.)

- Jasper :JSP파일을 write함수가 붙은 서블릿코드(java)로 만들어준다

즉, html에 동적기능을 적용하려면 java파일로 만들어야하는데, html을 java파일로 만드는것은 공수가 큼.
그렇기떄문에 jsp파일은 html에 동적인 기능(java코드)을 추가하였고, 그러므로 컴파일이 필요하고,  컴파일을 통해 java파일/class파일로 만들어주는 역할을함.

- 코드블록 : <% %>

[jsp파일]

<%
int x = 3;
inㅅ y = 4;
%>

<!DOCTYPE html>

...

<html>

[41. JSP의 코드블록]
- 코드블록의 종류
   1. 출력코드 : 환영합니다.
   2. 코드블록 : <% %>
   3. y의 값은: <%= y%>
   4. 선언부 : <%! public int sum(int a, int b) { return a + b; } %>
   5. 초기 설정을 위한 Page 지시자 : <%@ page language="java" contentTye = "text.html; charset=UTF-8" pageEncoding="UTF-8" %>
[42. JSP 내장객체 간단히 알아보기]
- 내장객체 : Jasper가 만들어낸 서블릿안에 있는 미리 선언된 변수
   - request : HttpServletRequest
   - response : HttpServletResponse 
   - out : javax.servlet.jsp.JspWriter
   - session : javax.servlet.http.HttpSession
   - application : javax.servlet.ServletContext
[43. JSP로 만드는 Hello 서블릿]

[코드블록 사용 1]
<%@ page ...>

..
<body>
  <% for (int i=0; i<10; i ++){ %> // 한줄마다 <% %> 선언 필요
  	안녕 <br>
  <% } %> // 한줄마다 <% %> 선언 필요
</body>​

 

[코드블록 사용 2]

<%@ page ...>

<% // 코드블록
String cnt_ = request.getParameter("cnt");

int cnt = 100;
if(cnt_ !=null && !cnt_.equals(""))
	cnt =Integer.parseInt(cnt_);
%>

..
<body>
  <% for (int i=0; i<cnt; i ++){ %> // 한줄마다 <% %> 선언 필요
  	안녕 <br>
  <% } %> // 한줄마다 <% %> 선언 필요
</body>
[44. 스파게티 코드를 만드는 JSP]

- 호출 : http://127.0.0.1:8080/spag.jsp?n=3
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

<% 
	int num =0;
    String num = request.getParamter("n");
    if(num != null && !num_.equals(""))
    	num = Integer.parseInt(num_);
%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> Insert title here </title>
</head>
<body>
 <% if(num%2 != 0) { %>
 홀수 입니다.
 <% } %>
 <% else {%>
 짝수 입니다.
 <% } %>
 
 
</body>
</html>​
[45. JSP MVC model1]
- 코드에 대한 블록을 최소화 하자
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

// 입력과 제어를 담당: Controller (자바코드)**
<% 
    String num = request.getParamter("n");
    if(num%2 != 0) 
    	model = "홀수";
    else
    	model = "짝수";
%>

// 출력데이터 : Model**

// 출력 담당 : View (HTML코드)**
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> Insert title here </title>
</head>
<body>
	<%=model%>입니다.
</body>
</html>​
728x90
반응형
Comments