오류 : java.net.ConnectException: Connection refused: connect

 

원인 : 연결하려는 호스트 이름이나 포트번호가 잘못됨

 

해결 : 포트 확인 후, 내용을 수정한다.

깃허브에서 간단한 서블릿 프로젝트를 임포트했는데 빌드하고 나니 이런 에러들이 찍힌다.

 

The import javax.servlet cannot be resolved를 포함해서

GenericServlet cannot be resolved to a type

ServletException cannot be resolved to a type

ServletRequest cannot be resolved to a type

ServletResponse cannot be resolved to a type

WebServlet cannot be resolved to a type

 

모두 서블릿 관련 에러들이다.

 

Java SE에는 서블릿 패키지가 포함되어있지 않기 때문이다.

 

프로젝트의 build path 창에 들어가보면

Apache Tomcat v7.0의 Server Library를 포함하는데 현재 이클립스에는 톰캣7 서버가 등록되어 있지 않기 때문에 unbound라고 표시되어 있다.

 

해결 방법으로는..

 

1. 프로젝트의 Targeted Runtimes 정보를 변경한다.

프로젝트의 컨텍스트 메뉴에서 Properties를 클릭한다.

 

Targeted Runtimes에서 현재 이클립스에 등록되어있는 톰캣 서버 버전으로 변경한다.

[Apply and Close]를 클릭하여 적용한다.

 

다시 빌드하면 본 에러는 사라진다.

 

프로젝트의 build path 창을 확인해보면, 자동으로 Apache Tomcat v9.0 라이브러리가 build path에 추가됐음을 알 수 있다.

 

2. 톰캣 server runtime library 추가

서블릿 컨테이너인 톰캣은 Java EE 스펙의 일부인 서블릿을 지원하며 servlet-api 모듈을 포함하고 있다.

 

[Add Library]를 클릭한다.

 

Server Runtime을 선택하고 [Next >]를 클릭한다.

 

여기에 이클립스에 등록된 톰캣 서버가 표시된다.

톰캣 서버를 선택하고 [Finish]를 클릭한다.

 

펼쳐보면 톰캣에 포함된 라이브러리들이 build path에 추가되었음을 알수 있다.

역시 [Apply and Close]를 클릭하고 다시 빌드하면 해당 에러는 사라진다.

 

 

 

출처 : The import javax.servlet cannot be resolved 에러 해결 방법 (tistory.com)

우선 

[Window] - [Preferences]

로 들어가 주도록 하자



그러면 아래와 같은 창이 뜰텐데

 

[General] - [Workspace]

에서 Text file encoding 부분에서

그림과 같이 Other 을 클릭하고 UTF-8로 변경해주자



그 다음에는 

 

[Web] - [CSS Files] , [HTML Files], [JSP Files]

이 세개의 Encoding을 각각 UTF-8로 변경해주자





보통은 여기까지 4개만 딱 설정을 하면 충분한데 추가적으로

완벽하게 설정하고 싶다 하면 몇가지 더 해줘도 상관없는게 있다

 

[XML] - [XML Fiiles]

에 들어가서 위와 같이 Encoding  UTF-8로 변경해주자



그리고

[General] - [Content Types]

 

에 들어가서 Text를 클릭하고 하단 Default encoding 부분에 UTF-8을 입력하고 Update를 눌러주자



여기까지가 Preferences에서 해줄수 있는 인코딩 변경 방법인데 하나하나 찾기 귀찮으면

검색창 "enco" 라 치면 위에서 설정해준것들이 전부 나온다...ㅎ

enco라 치고 저렇게 목록 나오는거 설정해주자 찾기 귀찮으니



여기부터는 다른곳이다

보통 기본적으로 설정 되어있기때문에 굳이 안해줘도 되지만

한번 UTF-8로 되어있는지 확인해보자

 

[Project] - [Properties]

에 들어가주도록하자



그럼 아래와 같은 창이 나올텐데

[Resource] 에 들어가서 Text file encoding 을 확인해주자

 

저부분 Inherited from container (UTF-8)

이라고 되어있는데 이게 UTF-8이 아닌 사람이 있을수 있다.

UTF-8이 아니면 Other을 클릭해서 바꿔주면 된다.


 

 

 

출처 : [Eclipse]이클립스 한글 설정하기( 인코딩 UTF-8 설정 ) (tistory.com)

  • 프로젝트 설정 변경

프로젝트를 우클릭하고 Properties를 클릭합니다

   

사이드 메뉴에서 Project Facets를 찾아 클릭합니다

   

Dynamic Web Module, Java, JavaScript 체크박스를 선택하고 selected checkbox

OK를 누르면 도루묵이니 Further configuration available 항목을 클릭합니다

   

Build 항목이니 Next

   

실질적인 WebRoot를 지정하고 OK를 클릭합니다

잘못지정해주면 웹프로젝트로 인식이 안되거나 다른데다가 WEB-INF 폴더를 만들어버리니

경로에 주의 합니다 (참고로 maven 프로젝트라 src/main/webapp 이 WebRoot)

   

Apply 혹은 OK를 클릭해서 적용해줍니다

   

변경중...

   

(선택사항 적용 결과 확인이랄까...)

Deployment Assembly 메뉴에서 WEB-INF 등의 경로추가 확인 후 OK

   

Tomcat에 Server 추가를 다시 해보면

정상적으로 서버 추가가 가능해 집니다

 

 

출처 : Eclipse Server Project Facets 이클립스 프로젝트 Server 설정안될 때 (tistory.com)

보통의 홈페이지는 아래와 같이 공통적인 부분들을 갖는다.

공통된 페이지들을 매번 불러오면 비효율적이기 때문에

1번만 불러올 수 있도록 모듈화를 하고는 하는데 

페이지를 모듈화 하는 방법에는 대표적으로 2가지가 있다.

 

1. Tiles 기법

2. JSP 액션 태그 : <jsp:include page="포함할 페이지" flush='false'/>

<%@include %>지시자와 <jsp:include>액션태그

 

1) include 지시자    <%@include file="ex03_02_sub.jsp" %>
   ㄱ. main.jsp + sub.jsp 합쳐져서 하나의 서블릿 클래스가 생성 -> 출력 버퍼
   ㄴ. 공통적인 변수 또는 코딩이 있다면 사용 (마치 현재 페이지에 선언한 것 처럼)


2) jsp:include 액션태그    <jsp:include page="ex01.jsp" flush="false">
   ㄱ. main.jsp 서블릿 클래스 
        sub.jsp 서블릿 클래스 
        각각 만들어짐 (sub 실행될때 main 서블릿 잠깐 멈추고 sub 서블릿 끝나면 다시 main 실행)
        == main 서블릿 -> sub 서블릿 -> main 서블릿
   ㄴ. TOP/BOTTOM/LEFT 등 페이지의 Layout 잡을때 사용

결과물은 같지만 완전히 다르다.

 

  <jsp:include> include 디렉티브
처리시간 요청 시간에 처리 JSP 파일을 Java 소스코드로 변환할때 처리 
기능 별도의 파일로 요청 처리 흐름을 이동 현재 파일에 삽입
데이터 전달 방법 request 객체를 사용한 파라미터 전달
<jsp:param> 태그를 이용한 파라미터 전달
페이지 내부에서 변수를 선언한 후 변수에 값 저장
용도 화면의 레이아웃 이부를 모듈화할때 사용 공통변수를 지정할때 사용
간단하면서 중복이 많은 문장 표현할 때 사용

 

출처 :

https://cameldev.tistory.com/33  <jsp:include>ggfd

 

[Camel][JSP] 페이지 모듈화 ( <jsp:include> )

페이지 모듈화 웹 사이트를 구축할 때 페이지는 동일한 상단, 좌측 메뉴와 하단 푸터를 갖는 경우가 많습니다. 이때 액션 태그와 include 디렉티브를 이용해서 공통 화면을 모듈화 함으로써 코드

cameldev.tistory.com

https://daspace.tistory.com/253

강사님은 말하셨지 Parameter를 이해하라고~

하지만 수강 당시 나는 이해하지 못했고, 물러설 수 없는 지경에 왔다.

그래서 시작하는 GET & POST 방식의 이해

 

웹페이지에서 데이터를 전송할 때에는 2가지 방식이 있다. 

1. GET

2. POST

 

다음 예시를 통해 그 차이를 알아보자.


GET 방식

STEP1. 파라미터 값을 입력하는 get1파일을 작성해준다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>GET 방식 파리미터값 입력 페이지</title>
</head>
<body>
	<!-- form 태그 get 방식을 사용해서(method="get") get2.jsp로 데이터 전송을 한다.  -->
	<form action="get2.jsp" method="get">
	    이름 : <input type="text" name="name" size="10"><br>
	    주소 : <input type="text" name="address" size="30"><br>
	    취미 :
        	<!-- name은 같은데 value가 다른 점 주목  -->
	        <input type="checkbox" name="hobby" value="game">게임
	        <input type="checkbox" name="hobby" value="travel">여행
	        <input type="checkbox" name="hobby" value="reading">독서
	        <br>
	    <input type="submit" value="전송">
	</form>
</body>
</html>

STEP2. 파라미터 값을 받아주는 get2파일을 작성해준다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>GET 방식 파리미터값 출력 페이지</title>
</head>
<body>
    <!-- 파라미터는 name값으로 getParameter를 통해 가져온다 -->
    이름 : <%= request.getParameter("name") %><br>
    주소 : <%= request.getParameter("address") %><br>
    취미 : 
    <%
        // 체크박스는 배열로 처리해야 한다.
        <!-- value는 value값으로 getParameterValues를 통해 가져온다 -->
        String[] values = request.getParameterValues("hobby");
        if(values != null){
            for(int i=0; i<values.length; i++){        
    %>
        <%=values[i] %>
    <%                        
            }
        }
    %>
</body>
</html>

STEP3. 프로젝트를 서버에서 돌려준다.

STEP4. 그럼 이런 화면이 나타난다.

로컬에서 parameter라는 프로젝트의 get1.jsp를 불러왔기 때문에
링크가 http://localhost:8080/parameter/get1.jsp 로 노출되고 있다.

STEP5. 다음과 같이 적어주고 전송을 눌러준다.

STEP6. 받아온 파라미터 값을 확인한다.

이 때, URL을 확인하면 받아온 파라미터 값이 URL에도 들어가는 것을 확인할 수 있다.

GET 방식은 입력한 데이터 값을 URL에 붙여서 서버에 전송하는 것이다.

+ parameter에 한글을 추가하면 결과 페이지에서 한글이 깨질 때가 있다.

GET 방식일 경우 xml에 코드를 추가해줘야 한다. 이클립스를 실행시키면 Project Explorer에 Servers가 있을 겻이다. 여기에 있는 server.xml 파일을 연다. 참고로 톰캣이 설치된 폴더를 통해서도 server.xml에 접근이 가능하다. 아래 경로를 확인해 보면 server.xml이 있을 것이다.

server.xml을 보면 아래와 같은 부분이 있을 것이다.

<Connector URIEncoding="euc-kr" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

여기에 URIEncoding="euc-kr" 라는 코드를 추가하면 된다.

<Connector URIEncoding="euc-kr" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

POST 방식

STEP1. get1과 get2 파일을 복사하여 post1, post2로 바꿔준 후,  method도 get에서 post로 변경해준다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>POST 방식 파리미터값 입력 페이지</title>
</head>
<body>
	<!-- form 태그 post 방식을 사용해서(method="post") post2.jsp로 데이터 전송을 한다.  -->
	<form action="post2.jsp" method="post">
	    이름 : <input type="text" name="name" size="10"><br>
	    주소 : <input type="text" name="address" size="30"><br>
	    취미 :
	        <input type="checkbox" name="hobby" value="game">게임
	        <input type="checkbox" name="hobby" value="travel">여행
	        <input type="checkbox" name="hobby" value="reading">독서
	        <br>
	    <input type="submit" value="전송">
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>POST 방식 파리미터값 출력 페이지</title>
</head>
<body>
  <!-- 파라미터는 name값으로 가져온다 -->
    이름 : <%= request.getParameter("name") %><br>
    주소 : <%= request.getParameter("address") %><br>
    취미 : 
    <%
        // 체크박스는 배열로 처리해야 한다.
        String[] values = request.getParameterValues("hobby");
        if(values != null){
            for(int i=0; i<values.length; i++){        
    %>
        <%=values[i] %>
    <%                        
            }
        }
    %>
</body>
</html>

STEP2. 서버를 run해준 후, 입력 값을 넣어주고 전송을 눌러준다. 

STEP3. 다음과 같이 적어주고 전송을 눌러준다.

이 때, get방식과 달리 post방식은 값이 URL에 없는 것을 확인할 수 있다.

+ parameter에 한글을 추가하면 결과 페이지에서 한글이 깨질 때가 있다.  post방식일 경우, 파라미터를 받는 페이지에서 인코딩 처리를 해야 한다. 여기서는 post2.jsp 가 파라미터를 받는 페이지이므로 여기서 처리를 해야 한다.

 

<%
    // 인코딩
    request.setCharacterEncoding("euc-kr");
%>

<GET 방식>

  • 입력한 데이터를 URL에 붙여서 전송한다. 데이터가 다 보이므로 보안에 취약하다.
  • 전송할 수 있는 데이터는 256바이트를 넘을 수 없다.
  • 전송속도는 POST방식 보다 빠르다.

 

<POST방식>

  • 입력한 데이터를 본문안에 포함해서 전송한다.
  • 입력한 데이터가 URL에 보이지 않으므로 GET방식 보다 보안에 우수하다.
  • 전송할 데이터의 길이에 제한이 없다.
  • 복잡한 형태의 데이터를 전송할 때 유용하다.

이클립스에서 새 프로젝트와 JSP 샘플을 만들었는데 만들자마자 오류가 생긴다.

 

오류: The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

대충&nbsp; Java Build Path에&nbsp; http.HttpServlet을 찾을 수 없다는 뜻인거 같다

 

원인 : 서버가 없어서 오류가 생긴다고 한다. JSP는 서버와 동작을 하기 때문에 서버를 같이 묶어줘야 오류가 생기지 않는거 같다(궁예)

지금은 프로젝트에 JRE밖에 없다.

해결 : 서버를 추가해준다

properties > java build path > Add Library > Server Runtime > 서버 추가 > apply
서버 추가 완료
해결 : DONE

 

+ Recent posts