JSP 기초 1

이정우·2021년 10월 20일
0

JSP

목록 보기
1/10

수업 환경 : 톰캣 7버전
이클립스 : 2021년 9월 버전
jdk : 17버전

톰캣과 이클립스를 연동해서 서버를 구축한 web프로그래밍을 어제부터 시작하였습니다. 하지만 원래 쓰던 이클립스에서는 404오류가 계속 떠서 10시간 가까이 문제점을 찾다가 다른 컴퓨터로 해보고 잘 되는걸 발견하여 이클립스를 1개 더 새로 깔고 실행하니 별 문제 없이 실행되었습니다. 아마 본래 쓰던 이클립스의 설정에서 뭔가 문제가 발생한걸로 예상됩니다.

프로젝트 생성 순서

  1. 다이나믹 웹 프로젝트
  2. Servlet or JSP 파일 등을 생성.

jsp만 쓰지 않고 굳이 servlet을 나눠서 쓰는 이유 : 가독성 면과 향후 협업에서 jsp파일에 자바 코드까지 다 쓰면 jsp 파일 보다가 잘 못 수정해서 큰 오류가 발생할 수 있기 때문에. servlet에 자바 코드를 넣어주고 jsp에는 html요소등을 넣어주면 jsp를 바꾼다고 큰 오류가 일어날 가능성은 낮음. 즉 협업 때 servlet은 유용.

기본적인 Servlet 타이핑 법

doGet메서드 안에... (여기서의 Get은 get, post 방식에서의 get)
HttpServletRequest는 클라이언트의 요청을 받아서 처리하고 HttpServletResponse에서 요청 결과를 클라이언트에게 응답해주는 메서드.

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html"); //클라이언트에게 응답할 페이지 정보를 셋팅. + respose 객체의 인코딩 형태도 바뀜. 순서 중요. 얘를 printwriter보다 밑에 쓰면 printWriter은 올바른 인코딩 형태를 적용받지 못함.
PrintWriter out = response.getWriter(); //출력 생성자 생성
out.print("< html>< body>< h1>");
out.print("Hello Servlet");
out.print("< /h1>< /body>< /html>");
out.close();
}

xml

html과 비슷하게 계층화 형태로 생겼는데 주목적은 자료의 저장, 전달 등을 목적으로 함.
과거에는 많이 쓰였지만 요즘은 json을 쓰는 추세로 바뀜. 클라이언트(사용자)가 html이나 json형태로 데이터를 서버로 주면 우리는 그 데이터를 받아서 사용하고 다시 건내주고 함. 이클립스의 Servers에 web.xml, server.xml 파일 등이 있음.

init, doGet, destroy 메서드

코드는 중간 중간 다 빼고 중요한 부분만 설명 적어놨습니다.

int initCount = 1;
int doGetCount = 1;
int destroyCount = 1;

public void init(ServletConfig config) throws ServletException {
System.out.println("init 메소드는 첫 요청만 호출됨 : " + initCount++);
}

init 메서드는 처음 웹 페이지에 요청이 들어올 때 한 번만 요청됨. 그렇기에 웹 페이지를 새로고침해도 count는 1에서 변하지 않음.

public void destroy() {} : 종료하면 한 번 호출됨.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } : 요청이 있을 때마다 호출됨. 새로 고침을 할 때마다 호출됨.

한글 입력

밑에 처럼 doGet메소드의 한글 인코딩 방식을 지정하지 않으면 한글 부분은 ???로 처리됨.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("< html>< body>< h1>");
out.print("Hello Servlet");
out.print("헬로우 서블릿");
out.print("< /h1>< /body>< /html>");
out.close();
}
한글을 입력하고 싶다면 인코딩 방식을 밑에와 같이 수정 해주자.
response.setContentType("text/html; charset=UTF-8");

get post 방식

get : 주소창 뒤에 정보가 표시됨.표시를 해줘야 하기에 글자 수 제한이 큼(일반적으로 약 256자라고 알려져 있으나 요즘은 1~2천자 이상도 가능은 하다고 함). 보안성 취약.
post : 패킷 내부에 정보를 전달. 정보 전달 양이 get보다 많음. 보안 우수

form 태그

form태그에서 여러 정보를 입력 받아 서블릿 컨테이너가 받아와 처리함.

주석 처리

< !--주석 방법 1--> hmtl에서 하는 방식.
<%-- 주석 방법 2 --%> jsp에서의 주석 방법
// 자바에서의 주석 방법.

쿼리 스트링

클라이언트가 서버에 값을 입력하면 서블릿 클래스에서 값을 얻어오는 방법. 즉, 사용자로부터 데이터를 입력 받아 서버를 거쳐 데이터를 조회하는 조회 방식.
-> 클라이언트와 서버 사이에 데이터 전송 방법이 쿼리 스트링.
get방식을 사용함. get 방식 쓰는 이유는 다른 웹 페이지로 이동시 원래 페이지의 정보를 갖고 올 수 없음. 전부 새로 고쳐짐. 예를 들어 네이버 검색에서 검색창에 이정우 를 치면 다음 페이지에서 이정우라는 값이 사라져 버림. 이렇게 페이지 간 정보 교환을 원활하게 하기 위해서 get 방식을 사용한 쿼리 스트링을 사용함. 구조는 네이버를 예로 보면 url에서 www.~~~?의 ?뒷 부분이 전부 쿼리 스트링. 예를 들어 where = next에서 where은 이름. next는 값. 여러 쿼리 스트링을 쓸 경우 & 사용.

JS 명령어로 뒤 페이지로 가기

< a href = 'javascript:history.go(-1)'>

GET방식에서 한글 입출력

인코딩 방식을 UTF-8로 해주고
server.xml 파일 > <Connector 찾으면 처음 나오는
< Connector connectionTimeout = 어저구 저저구...> 이 부분을 다음과 같이 수정.
<Connector URIEncoding = "UTF-8" connectionTimeout = 어저구 저저구...>

출처 : 국비 교육

profile
프로그래밍 공부 중!

0개의 댓글