본문 바로가기
코딩

2022.03.14_24일차_jsp(2)

by 흥뷰자 2022. 3. 16.

24일차 수업내용

JSP 페이지 구성요소들

 

1. 디렉티브태그

2. 스크립트

3. 내장객체

내장객체 중 Requset 

내장객체 중 Response

 




http://localhost:8080/web/JSP01.jsp
http://192.168.219.105:8080/web/JSP01.jsp
http://127.0.0.1:8080/web/JSP01.jsp

포트번호 바꾸기 : 

# 페이지 에러 
404 : jsp 파일 없다~ --> 파이이 존재하는지 여부, URL 주소, 경로상의 오타없는지 확인
500 : 대부분 자바 구문오류
-> 사용자가 보면 안되는 페이지로, '공사중' 같은 페이지 제작해서 연결해야 함.

## JSP 파일은 파일명 변경X (한번이라도 실행했으면 파일명을 변경하면 못찾게됨), 위치조정은 가능하지만 서버는 재부팅해야. 파일명을 잘못만들었다면, 맞는 이름의 파일을 새로 생성해서 내용물 복사하기!!



0. JSP 페이지 구성요소 // 들어가는 것들

디렉티브 태그 (Directive)
스크립트 : 스크립트릿(scriptlet), 표현식(expression), 선언부(declaration)
표현 언어 (EL Expression Language) :
내장 객체 (Implicit Object)
정적 데이터 : 일반 텍스트등
표준 액션 태그 (Action tag)
커스텀 태그 (Custom tag)와 표준태그 라이브러리(JSTL)


1. 디렉티브 태그 (3개 태그)
page : JSP 페이지에 대한 정보 설정
include : JSP 페이지의 트정영역에 다른 문서를 포함 (페이지 합칠 때) 페이지 합치기
taglib : JSP 페이지에서 사용할 태그 라이브러리 설정 (외부 태그 라이브러리 쓸 때)

<%@ 디렉티브태그명 속성1='값1' 속성2='값2' %>

페이지 디렉티브 태그 살펴보기  
1) page  
JSP 페이지 설정 정보 지정
문서타입, 출력버퍼크기, 에러페이지 등
페이지 최상단에 선언 권장
속성 다양
- language 해당 페이지, 문서에서 사용할 언어 = "java" 무조건. 
- contentType 페이지 내용물 타입 "문자/html"(마임타입, 슬래시로 연결 application/json) chareset =UTF-8 쓸문자. 인코딩 포함 타입까지 들어감.
- pageEncoding 페이지 인코딩만 설정 . 위에 적혀있으면 생략해도 됨
- import 페이지에서 사용할 내용
- session 디폴트값 true 세션할지 말지. 로그인 상태가 세션~
- buffer="8kb" 화면에 보여줄 내용물 임시저장소크기. autoFlush와 함께 생략 가능~~ 디폴트라
- autoFlush 버퍼 다 차면 화면에 뿌려주는여부. 디폴트 true. false로 하면 버퍼 다 차면 에러남  오전 10:34 2022-03-14 자바 안에 뭐가 껴들어간 형태?? jsp는  // 자바코드의 결과를 출력 new date /스크립트 출력문 : 자바코드를 출력 



<!-- html주석 : 페이지 소스보기 하면 내용물이 다 보임 : 실제 브라우저에서 읽어들인다는 뜻. 느려질 수 있음 -->
<%-- jsp주석 : 페이지 소스보기해도 내용물이 인보임 : 브라우저가 읽지 않는다는 뜻, 권장. --%>

에러메세지는 console에서도 꼭 확인하기 나중에 에러 많이 내는 경우 필요. 


- isThreadSafe = 멀티스레드허용여부~~ 웹에서는 요청마다 스레드이기 때문에 true해야 함. 디폴트임. 
- info 화면에 출력안되는 페이지 관련 메모 작성하는 속성  
- errorPage = "error.jsp" 에러발생시 이동할 페이지
- isELIgnored = "false"  표현언어 웹상에서 사용하는 언어 jsp뿐만 아니라 웹에서 쓰는 모든 언어에서 쓸수있는 범용적 언어라 다 쓸수있음 . 기본값. 쓰겠다~
- deferredSyntaxAllowedAsLiteral="false"
el : #{값}, ${변수} 화면에 출력~~ 앞에 방식 #{변수}를 문자열로 처리할지 여부를 지정 서블릿2.4에서 뒤만지정, 2.5에서는 둘다 지원/ 서블릿 버전 출력  <<


2) include 
외부파일의 내용을 현재페이지에 포함 : 복붙개념. 
머리글, 바닥글같은 공통된 부분을 
별도의 jsp파일로 만들어 모듈화시켜 include로 붙일 때 편함.
코드 유지 보수 재사용 가능성 향상
위치는 붙이고 싶은 곳에 제약없이 사용가능.

<%@ include file = "파일명" %> 

주의사항! 인코딩 설정이 동일해야 에러가 안남. 

3) taglib
표현언어, JSTL, 사용자 정의태그 등 외부 태그 라이브러리를 
설정하응 태그. 페이지 상단에 위치해야 쓰고싶은데다 다 쓰겠지.

<%@ tablib prefix="태그식별자" uri="외부라이브러리경로" %> //외부 태그들 라이브러리목록을 인포트하듯이 써. 상단에

uri : 외부 태그의 설정 정보를 가진 라비르러리 경로 주소
prefix : 태그를 식별하기 위한 고유 이름

ex) 태그 사용시  //실제 사용 예시는 뒤에가서
<태그식별자 : 태그명 ....> // 태그식별자는 병칭처럼 사용하기 쉽게 하기위함



2. 스크립트 요소 

  // jsp에서만 초반에 잠깐 보고 감. 뒤에 태그라이브러리에서 다 되어서 쓸일없지만.... 
: HTML 코드에 자바 코드를 넣어 프로그램이 수행하는 기능 구현
서블릿 클래스로 변환할 때, JSP컨테이너가 자바 코드가 삽입되어 있는 스크립트 태그를 처리하고 나머지는 HTML코드나 일반 텍스트로 간주함.

(3가지) 선언부, 스크립트릿, 출력문
선언부  <%! %> : 클래스 영역 : 메서드 밖에 뭔가 작성한것과 같은 효과. 사용 거의 안함. 자바클래스로 만드는게 더 유용.. 
스크립트릿 <% %> : 메서드 영역 : 자바 코드 실행. 가운데 자바의 영역. 셋중 가장 많이 씀. 여기에 변수를 만들면 지역변수가 됨. 메서드 안에 변수만드는 것처럼.
출력문 <$=  %> : 값을 출력. 자바변수 안에 있는 값이나, 메서드 호출해서 리턴된 값을 화면에 출력하거나, 객체의 toString의 값을 출력할 때 . 아까 Date출력했던거... html코드와 섞어서.. 짬뽕. 사용 가능. 

<< 써보기 jsp05.jsp 


서블릿파일 확인  <<<  jsp06.jsp



3. 내장객체 implicit object 서빌릿 파일 안에 선언된 변수들 .... 


: JSP 페이지에서 사용할 수 있도록 JSP 컨테이너에 미리 정의된 객체.
import 문 없이 , 또한 객체 생성 없이 바로 사용가능. //이미 서블릿으로 변환 될때 다 만들어진 상태로 돌아가게 됨. 
JSP 페이지가 서블릿으로 번역될 때 JSP 컨테이너가 자동으로
내장객체를 멤버변수, 메서드 매개변수 등 각종 참조변수(객체)로 포함시킴.
_jspService() 메서드에서 사용 가능

1) 종류
request : 웹브라우저 HTTP 요청 관련 정보를 저장 : 실제 클래스 javax.servlet.http.HttpServletRequest로 만들어진 객체 ///한번요청응답할때까지 유효
response : 웹브라우저 HTTP 응답 정보를 저장  : javax.servlet.http.HttpServletResposnse
out : 출력 관련 객체  : javax.servlet.jsp.jsp.jspWriter
session : 웹 브라우저 정보 유지를 위한 세션 정보를 갖고 있는 객체 : javax.servlet.http.HttpSession (로그인처리. 로스인상태 유지하려면 써야하는 클래스) ///브라우저가 종료될때까지
application : 웹 어플리케이션 컨텍스트 정보를 저장하고 있는 객체. (컨텍스트 : 설정 관련) : javax.servlet.ServletContext ///프로젝트종료까지
pageContext : JSP 페이지 관련된 정보를 저장  : javax.servlet.jsp.PageContext
page : JSP 페이지로 구현한 자바 클래스, JSP 페이지 자체를 나타낸다. : java.lang.Object
config : JSP 페이지 설정 정보를 저장 ( 어플레케이션은 웹프로젝트자체정보, config 하나의 jsp관련정보) : javax.servlet.ServletConfig
exception : JSP 페이지 예외 발생을 처리해줄 수 있는 메서드들을 다 가지고 있다. : java.lang.Throwable



4. request 내장객체 (내장이라 임포트 같은게 필요없음)


브라우저에서 서버의 JSP 페이지 요청시 요청에 대한 정보를 담고 있는 객체. 자동으로 다 담겨있으니까 끄집어내서 쓰기만하면됨

1) 가져올 수 있는 정보들 (by메서드)
클라이언트(브라우저)와 관련된 정보 
서버와 관련된 정보 읽기 기능

요청 파라미터, 요청 헤더, 쿠키
속성(Attribute) 처리 기능도.. (속성-값)형태로 담아서 보내줄수 있음



클라이언트 서버 정보

관련 메소드 예 해당 jsp페이지를 요청할 때 관련된 정보들이 담겨있다 
 


*주소쳐서 요청하는 건 모두 get방식 

 

getContextPath(), getRequestURI() 메서드는 자주 씀 

❗보내지 않은 값을 출력하게 되면  null이 출력됨

 

 

2) 요청 파라미터 처리  <<
: 요청 파라미터의 형태는 name 속성값=입력데이터의 형태로 전송되며
form : input tag의 name속성의 값을 키로 request 객체를 이용해
주소창 : 이름=값&이름=값
전송된 값을 꺼낼 수 있다.



java.util.Map getParameterMap()
: 브라우저가 전송한 파라미터의 맵을 구함. <파라미터 이름, 값>

페이지 데이터들고가기 << form.jsp 
넘어가서 데이터 꺼내오기 << pro.jsp  
get방식 아니고 post방식으로 보내야 비밀정보가 가려져서 넘어감~~~  <<

?id=pika&pw=1122  주소를 타이핑 해서도 데이터가 넘어감~

 

클라이언트가 전송한 요청 파라미터 

주요메서드 (스프링에서는 안쓰지만 중요)    
리턴타입 (값이 없으면)    
String (null) getParameter(String 파라미터 name) 파라미터name 의  값, 여러개는 첫번째만 담
String[] (null, length==0) getParameterValues(String name) 해당 파라미터 모든 값 배열로
❗❗입력안해서 null이 넘어오는 경우 에러체크 해야 
new Array가 아니라 그냥 null이라 .length 빈배열도 안만들어진거라 NullPointException발생. 500에러 
java.util.Enumeration<> getParameterNames() 이름 목록 리턴
hasNext() iterator이용.
java.util.Map getParameterMap() 전송 파라미터 맵<이름,값>으

파라미터 정보 1개만 가져오기

요청할때 넘기는 파라미터는 pro페이지로 함께넘어간다. 
전송은 폼의 인풋태그 name값 = 입력값
또는 주소창의 쿼리파라미터
또는 버튼클릭으로 


 
 

폼페이지와 액션으로 실행되는 프로페이지를 만든다. (처리페이지에서 값으로 db다녀오고 보여주는 페이지는 아니다)


입력한 값이 넘어와
콘솔창에 찍힌다.

파라미터 정보 배열로 가져오기 주의사항    

수정전 수정후
담기 전에 값이 있는지 없는지 체크해야 한다. 코드가 어떤 오류를 발생시킬지 모르기 때문에 의도적으로 NullPointerException 문제인지 체크할 수 있게 된다. 

아니면 담고 나서 널체크를 하든지

 

.

넘긴 파라미터 출력 방법 

콘솔로 출력 System.out.println();
페이지로 출력 <h3> pets : <%=s%> </h3>
<% out.println(s) %>
폼페이지 (잇풋 태그 내부 값)로 출력 <input type="text" name="id" value= "<%=id%>" />
잇풋 라디오버튼의 경우 <input type="radio" name="dog" value="dog" <%if(pets != null){ for(String p:pets){ if(p.equals("dog")){%>checked<%}}} %> />

넘긴 파라미터 이름 목록 

util.Enumeration 타입으로 반환 결과
출력 할 땐 내장 클래스의 메서드들을 사용하게 된다.
util패키지 있으니까 임포트가 필요하다








3) 전송 방식 : GET / POST <<

# GET
URL 경로뒤에 물음표와 함께 파라미커를 붙여 데이터 전송 가능
이를 쿼리 스트링이라고 한다. 각각 파라미터는 앰퍼센드(&)기호로 구분.
브라우저에 따라 한글은 이상한 문자로 표현 RFC 2396 규약에 정의된 규칙에 따라 인코딩해서 전송.
URL 쿼리로 파라미터를 전송하므로 폼을 사용하지 않아도 데이터도 전송 가능.
브라우저, 웹서버 또는 웹컨테이너에 따라 전송할 수 있는
파라미터 값의 길이 제한이 있을 수 있다.

# POST
URL 경로 뒤에 파라미터가 보이지 않는다. 
데이터 영역을 이용해서 파라미터를 전송하여, 
전송할 파라미터의 길이 제한이 없다. 동영상 이미지 파일도 보낼 수 있다.

<<form1.jsp  

4) 요청 파라미터 인코딩

[ 캐릿터셋 세팅 ]

# Client <----- Server : <%@ page 인코등 UTF-8 %> 여기서 처리
# Client -----> Server : 다른곳에서 처리

# POST 방식
request.setCharacterEncoding("UTF-8");
# 사용자가 보내준 파라미터 값을 꺼내기 전에 한번 먼저 실행시켜주어야 한다.

# GET 방식
Servers > Tomcat9 .... > server.xml > 63라인 > <Connector ...태그에 
URIEncoding="UTF-8" 속성추가 저장!
(이클립스 서버당 한 번만 추가해주면 계속 유지됨)

# 파라미터 전송 방식에 따른 인코딩 결정 규칙
<a>태그에 쿼리 문자열 추가 : 웹 페이지 인코딩 사용
Form 태그 method="get"  : 웹페이지 인코딩 사용
브라우저 주소에 직접 쿼리 추가 : 웹브라우저마다 다름



5. response 내장 객체


: request와 반대기능. 사용자의 요청을 처리한 결과를 브라우저로 전달하는 정보 저장 객체

1) 기능
리다이렉트 하기
헤더 정보 입력
2) 리다이렉트 : 페이지 이동 메서드
다른 페이지로 강제 이동하도록 리다이렉션 메서드 제공

void  sendRedirect(String url);

//로그인이 되면 바로 메인페이지로 돌아오게 하는 경우 사용한다. 속도가 빨라서 로그인 누르자마자 메인으로 간것같은 효과.

6. out 내장객체
웹 브라우저에 데이터를 전송하는 출력 스트림 객체

7. application 내부객체
: 어플리케이션과 관련된 기본 객체
초기 설정 정보읽기, 서버 정보 읽기, 웹 어플리케이션이 제공하는 자원 읽기...

1) 웹 어플리케이션 초기화 파라미터 읽기

#1. 웹어플리케이션 전체에 사용할 수 있는 초기화 파라미터 지정
/WEB-INF/web.xml파일에 <context-param> 태그로 초기화 파라미터를 지정

* web.xml : 웹 어플리케이션을 위한 설정 정보를 담고 있는 파일
WEB-INF폴더 안에 위치해야 함.
어플리케이션 객체에서 값 꺼내보기 <<jsp08.jsp 


  <context-param>
   <description>파라미터 설명(옵션)</description>
   <param-name>파라미터이름</param-name>
   <param-value>파라미터값</param-value>
  </context-param>


# 메서드
String getInitParameter(String name) : 이름이 name인 초기화 파라미터값을 읽어옴. 없으면 null
Enumeration<String> getInitParameterNames() : 초기화파라미터의 이름 목록 가져오기 

<<목록을 가져와보기 

8. 에러페이지 세팅

웹 어플리케이션 실행 도중에 발생할 수 있는 오류에 대비한 예외 처리 코드를 작성하여 비정상적인 종료를 막기 위한 세팅.

1) 웹 에러 종류

404 : Not Found : 요청 경로 오류.
500 : Internal Server Erro : 요청 페이지의 로직 오류( 자바쪽에서 문제 생겼을 때)

[2XX] : Success 성공 관련 코드
200 : 성공 : 서버가 요청한 페이지를 잘 처리 제공했다.
[3xx] : Redirect 이동 관련 코드
[4xx] : Client Error 관련 코드
400 : Bad Request : 요청이 이상함. 입력란에 이상한 데이터나, JSON이 와야하는데 엉뚱한게 온 경우
405 : Method Not Allowed 해당메서드 안되요~ 허용되지 않음
[5xx] : Serve Error 관련 코드
503 : Service Unavailable : 서비스 지원 불가. 웹서버는 살아있는데 DB서버가 죽었다든가...

2) 예외처리 방법

- try/catch/finally : 자바 언어의 예외처리 구문 이용
- page 디렉티브 태그 이용한 예외처리
- web.xml파일을 이용한 예외 처리

# web.xml
<error-page>
<error-code>...</error-code> 또는 <exception-type>...</exception-type>
<location>에러발생시 띄워줄 피이지 경로</location>
jsp08.jsp 




-> 본인이 만든 회원가입 폼 페이지 jsp로 옮겨오고, pro페이지 만들어서 데이터 뽑아서 화면에 출력











'코딩' 카테고리의 다른 글

2022.03.16_26일차_스프링(1)  (0) 2022.03.16
25일차  (0) 2022.03.16
2022.03.11_23일차_jsp(1)  (0) 2022.03.16
2022.03.09_21일차_sql(1)  (0) 2022.03.16
2022.03.07_20일차_javascript(3)ㅡㅡㅡㅡㅡ  (0) 2022.03.09

댓글