jsp 구성요소 , test 라이브러리 : j 유닛 - Spring 수업 노트

 

jsp(java server page)

jsp 는 화면 구성에 사용(html 안에 java 코드를 생성한다. )

요청에 따라 동적으로 컨텐츠(html , json , xml 등)를 생성/ 전달

jsp 는 화면 구성에 사용 ( html 안에 java 코드를 사용)

jsp 도 servlet 으로 변환되는 과정을 거친다.

servlet 랑 jsp 거의 유사함 (jsp 는 servlet으로 변환됨 )

servlet 은 로직 처리시에 사용 → MVC framework(spring, struts등 ) 사용

경로 :

Command line argument: -D:\A_TeachingMaterial\6.JspSpring\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\ROOT\org\apache\jsp

가면 class 로 보면 java 코드를 자동으로 out.print 를 해서 자동으로 jsp 코드로 변경해 주었다는 것을 알 수 있다.

출처 : https://aroundck.tistory.com/11

jsp 는 여러번 요청을 하더라도 위의 위치에 새로 만들어지지 않는다.

jsp 는 서버 요청을 할때 (클래스가 만들어져 있지 않으면 새롭게 변환을 하고 ) 생성이 된다.

-jsp 는 Servlet 으로 변환되어 서비스 된다. Servlet-Container(tomcat) 이 jsp 를 서블릿으로 변환하는 과정에서 사용하는 폴더는 work 폴더

-tomcat 도 개발자가 만든 프로그램으로 비정상적으로 동작할 때가 있음

-개발자가 jsp 파일을 수정하였음에도 수정 내역이 반영되지 않을 경우

-work 폴더에 생성된 jsp 변환파일들(java, class) 을 삭제 해주면 서버 연결할 때 새롭게 만들어 준다.

-jsp를 서블릿으로 변환하는 시기는 해당 jsp 에 대해 최초 요청이 일어 났을 경우에 변환

-서블릿으로 생성이 된 이후 같은 파일에 대한 요청은 이미 변환된 파일로 서비스 (파일이 계속 생성이 되는것이 아니라 1번 생성이 된후 거기에 계속 요청변환되는것,,,,)

jsp 구성요소

  1. 지시자 : page 의 설정 정보
  2. 스크립틀릿 : JAVA 코드 == > 나중에 JSTL(Java Standard Tag Library) 로 변경할 예정이다.

<% Date date = new Date(); %> 3. 표현식 : 문자열로 출력 ==> EL(Expression Language , 표현언어 )

<%=date %> 4. 주석 5. 선언부 : 변수나 method 선언 , jsp 는 화면, 컨텐츠를 생성하는 역할 변수나 method 는 로직 처리시 주로 사용

jsp 가 변환된 클래스에서

  1. public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)

→ 미묘하게 서블릿에서 쓰는 service 와 다름

2)if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) { response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD"); return; } → get, post, head 방식만 사용가능

test 라이브러리 : j 유닛4.13

클래스를 테스트해야 한다 → 중요 : RUN AS JUNIT 으로 실행해서 테스트 한다.

tendency 에 의존성을 추가해야한다.

<!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>test</scope> </dependency>

scope 가 test → 운영을 할때 동작을 하지 않고 테스트 할 때 동작을 한다.

web-inf → lib 에는 안생긴다.

Marven Dependencies 에서 harmcrest 도 같이 생긴다.

JUnit Test Case 만들기 → 이름은 테스트할 클래스 + Test

@Test public void test() { fail("Not yet implemented"); }

한개 생성된게 차이점이다.

Test : junit 으로 실행

메인이 존재하지 않는다. 이클립스, 메이븐등에서 자동으로 실행되서 main 이 없다.

errors가 나오면 : 실행이 잘 되지 않았을때 ( assetEquals 랑 관련되지 않음)

failures 가 나오면 : assetEquals 를 통과하지 못했을때 → 실행은 된다.

모든 과정통과 : 녹색마크

실패 메시지 : java.lang.AssertionError: expected:<120> but was:<720>

해석 : 120을 기대치로 넣었지만 실제적인 값은 720 이다.

tomcat(구체화) → 일반화/추상화 : servlet container → service 를 호출하는 주체가 된다.

-servlet 을 테스트하기는 힘들다.

→ interface 타입 httpaServletRequest

요청부분에서 인자가 두개 response, request

// getattribute, getsession, setattribute 등등 → 서버가 필요함 .

테스트하기가 힘들어짐 (서버에 의한 요청, 반응이 되는데 ) 이렇게

외부환경에 의존하고 있으면 테스트하기가 어려워진다.

참고 :

bash 에서 :

통과를 못하면 → war 안만들어짐

$ mvn package -Dmaven.test.skip=true

이렇게 쓰면 test 를 거치지 않음

정리할것

factorial

재귀함수(메소드) : 자기 자신을 호출하는 함수(메소드) 팩토리얼 수열 n , n! ->

maven package 시 test 코드 실행 스킵 mvn package - Dmaven.test.skip=true ;;;

HttpServletRequest : 사용자가 요청을 보낼때의 정보(파라미터, 해더정보, 쿠기를 은닉화한 객체 ) 누가 생성? : servlet container 가 생성 (ex) 톰캣 ) service(doXXX) 메소드의 인자 service(doXXX) 주요 사용 용도

  1. 파라미터 정보 확인 인위 조작이 불가 getParameter는 존재하지만 setParameter 메소드는 없음 ==> request 클래스의 Wrapper 클래스를 이용하여 파라미터 조작가능
  2. 헤더 정보 확인
  3. 속성(Attribute) 정보 설정, 조회 개발자가 인위 조작 가능
부가적 
4. ContextPath 확인 

	서블릿 + 정적인 자료인 컨텐츠(js, css, image 등 ) 들의 집합 
	
	webApplication = (유사) contextPath 
	
	request.getContextPath() 를 통해 contextPath 문자열을 얻어올 수 있다. 
	
	서버 하나에 여러개의 웹 어플리케이션을 서비스 하는 것이 가능하다.
	==> url 요청시 어떤 웹 어플리케이션을 의미하는지 구분이 필요하다. 
	
	http: //도메인/CONTEXT_PATH/경로 
	
	
	==> css, javascript , image 파일의 경로를 설정할 때 사용  
		
	jsp 라는 이름으로 contextPath가 설정된 웹어플리케이션의 경우
	webapp/image/brown.png 파일의 경로를 다음과 같이 설정할 수 있다.
	<img src="/jsp/image/brown.png" > 
	
	
	==> jsp 라는 이름의 컨텍스트 패스를 수정할 경우 링크와 관련된 부분을 모두 수정해야하는 문제점이 발생
	
		request.getContextPath() 메서드를 이용해 유지 보수 문제 해결 가능
		<img src="<%=request.getContextPath()%>/image/brown.png"/>
		
		
		
webapp/jsp/request.jsp

jsp 파일 내용 : request 객체에서 제공하는 메소드와, 메소드의 리턴값을 확인 

<body>
	request.getContextType() : 리턴값을 출력 <br> 
	request.getMethod() : 리턴값을 출력 <br> 
	request.getRequestURI() : 리턴값을 출력 <br>
	request.getContextPath() : 리턴값을 출력 <br>
	request.getServerPort() : 리턴값을 출력 <br>
</body>

댓글