프로그래밍/자바(java) 융합개발자 2차

[자바 기초] 12일차 일지 - 데이터베이스 프로그래밍(JSP웹, DB프로그래밍, Apache Tomcat 설치하기, 8080 포트 오류 해결하기)

aSpring 2020. 12. 30. 15:45
728x90
728x90

오늘 우리가 할 것

1. 서버 만들기 - 서버는 1번만 만들면 된다(web server : 아파치 톰캣)

2. 프로젝트 만들기(Java가 아닌 JSP를 만들 것)

3. 소스파일 작성(jsp)

 

웹서버는 아파치 톰캣 -> 2, 3번이 웹 프로그램 : 이걸 연결할 것

 


[Apache Tomcat]

구글에서 아파치 톰캣 검색

 

개발자는 제일 최신버전 XX -> 신기능이라고 하지만 그렇게 유용한 기능이 아닐 수 있고 초보자에게는 +알파를 배우기에는 배보다 배꼽이 더 커질 수 있다 -> 가장 안정적인 버전을 다운받아서 사용하는 것이 좋다.

 

beta 버전은 아직 완성된 것이 아님 -> 버그가 많다 -> 여기서 버그가 나면 우리가 고쳐야 한다.

 

7버전은 너무 옛날 것

8버전은 두가지가 있다 - 8.0, 8.5

 

아파치 톰캣 

- 다운 -> 설치 -> 실행

원래는 JSP를 Run해서 별도로 돌리는데

우리는 이클립스에서 코딩을 함 -> 이클립스 안에서 톰캣을 돌려야 함(내부)

 

Tomcat 8

보통은 이걸 설치하면

여기서 돌아갈 것!

그러나 우리는 이클립스 내에서 돌려야하기 때문에 이걸 꺼줘야 한다.


 

[Apache Tomcat 설치]

우리는 8.5.61을 설치할 것

가장 위에 나와있는 zip을 설치해도 되지만 압축을 풀고 cmd창에 가서 경로 입력해서 실행을 시키는 등 복잡함

 

 

32-bit/64-bit Windows Service Installer 다운받기

Next, Agree .. 하고

Name을 8로 둬도 되고 8_5로 바꿔줘도 됨

자바가 

이런 식으로 자바가 설치된 위치에 설정 해야 함

독립적으로 돌아가고 있다는 표시

Start 버튼이 비활성화 된 상태

Stop을 누르면 독립적으로 돌아가는걸 꺼줄 수 있음

-> 꺼주면 중지가 되서 아이콘이 빨간색으로 바뀜 -> 확인 클릭

 

이클립스에서

1. 서버 만들기

New -> Other.. -> Server클릭 안에 Server -> Next -> Apache -> Tomcat v8.5(자기가 설치한 톰캣과 버전 맞추기) -> Next ->

아직 설치 안 한 상태라서 Tomcat installation directory에 아무것도 뜨지 않음(만약 옆에 Download and Install.. 버튼이 활성화가 되어있다면 클릭해서 바로 설치하면 됨, 뜨지 않으면 직접 Apache Tomcat에서 원하는 버전 설치)

설치를 했다면 Browse.. 눌러서 Apache를 설치한 경로 찾아줘야 함 Apache Software Foundation > Tomcat 8.5_Tomcat8_5 -> 폴더선택 -> Finish

 

Servers가 생김

 

안돼서 그냥 8.0으로 해서 설치!

했는데 Servers > Tomcat

 

2. 프로젝트 만들기(Java가 아닌 JSP)

New > Others

이름 web_test로 지정

 

안녕하세요를 치고 실행 시키면

이런 에러가 뜸

포트 8080이 사용중이라고 함 -> Oracle에서 이미 쓰고 있다.

-> 오라클의 포트를 바꿀 것

 

https://leeyongjin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-11g-express%EC%97%90%EC%84%9C-8080-%ED%8F%AC%ED%8A%B8-%EB%B3%80%EA%B2%BD

 

오라클 11g express에서 8080 포트 변경

1. sql plus 실행 > sqlplus /noglog 2. 관리자로 연결 SQL> conn /as sysdba 3. 현재 포트확인 SQL> select dbms_xdb.gethttpport() from dual; 4. 포트변경 내장프로시져 실행 SQL> exec dbms_xdb.sethttpport(9..

leeyongjin.tistory.com

 

위의 내용을 따라할 필요는 없고 SQL developer에 가서 바꿔줘도 됨

 

Windows > cmd에서 순서대로 따라해도 됨

1. cmd 에서 sqlplus/nolog 침

2. conn /as sysdba

3. select dbms_xdb.gethttpport() from dual;


4. exec dbms_xdb.sethttpport(9090);

 

5. 9090으로 바뀌었는지 다시 확인해봄

select dbms_xdb.gethttpport() from dual;

9090으로 바뀐 것을 확인할 수 있다.

 

그래도 계속 같은 오류가 떠서

1. cmd에서

2. netstat -ano -p tcp

나는 지금 9090으로 바꿔놓아서 저렇게 뜨는데 로컬주소 마지막 부분이 8080이라고 적인 PID를 복사해놓고

 

3. taskkill /f /pid 14848  (8080과 연관된 PID값 14848 삭제)

하면 된다는데...

 

나는 삭제가 되지 않음 ..ㅜㅜ

 

그래서

톰캣 누른 뒤에

저기 포트번호 8080이 계속 문제가 생기니까

8081로 변경!!!

 

드디어 실행이 되었다!!

 

https://changun516.tistory.com/49

 

[Tomcat] 'Starting Tomcat v8.5 Server at localhost' has encountered a problem. 오류

l 오류 잡기 'Starting Tomcat v8.5 Server at localhost' has encountered a problem 해결책 해당 오류는 Port number가 중복 되거나 잘못되었을시 생기는 문제입니다. 중복되지 않는 포트 번호를 설정해 줍니다..

changun516.tistory.com

 

 


ojdbc6를 찾아서

ctrl+c -> lib에다가 ctrl+v


 

2. JSP(웹) - DB프로그래밍

Server(톰캣) 위에다가 Dynamic Web Project를 돌리는데

WebContent 폴더가 있고 이 폴더에 booklist.jsp, bookview.jsp 소스파일 두 개를 만들 것

=> 이 전체를 Web Server라고 할 수 있다

 

주소를 치면 결과가 나온다.

DB -> JSP로 바로 연결 불가능

DB -> web 서버(설치만 하면 됨) -> JSP

           ㄴ> JSP 페이지를 돌리는 역할

 

ex) 윈도우 10 위에다가 엑셀이라는 프로그램을 설치한다. -> 윈도우 10이라는 운영체제가 없다면 엑셀을 설치할  수 없다.

 

웹서버 : 종류가 많지만 공부할 때는 아파치 톰캣(오픈 라이센스)을 가장 많이 쓰고 Node.js도 많이 쓴다.

①설치

②연동

 

프로젝트 만들기 (Dynamic Web 프로젝트)  (1/2)

만약 Dynamic Web Project가 안보이면 Other -> Web 에서 찾는다프로젝트 만들기 (Dynamic Web 프로젝트)  (2/2)

ojdbc6.jar 링크 : 우클릭 -> Build Path -> Add External Archives

ojdbc6.jar 링크

 코딩하기

 

<%@ page import="java.sql.*" contentType="text/html;charset=EUC-KR"%>" /* java.sql안에 있는 * 모든걸 가지고 오겠다. */
<%
 Class.forName("oracle.jdbc.driver.OracleDriver");
 String url="jdbc:oracle:thin:@localhost:1521:XE";   /* 1521은 DB의 주소 */
 Connection dbconn=DriverManager.getConnection(url, "madang", "madang"); /* 1 Connection 2 Statement 3 ResultSet을 가지고 오겠다 */
 Statement stmt = dbconn.createStatement();
 ResultSet myResultSet=stmt.executeQuery("SELECT * FROM Book");
 %>                                                                         /* ① Java코드 */
 <HTML>                         /* 화면(UI) 구현(디자인), 비주얼 담당 */
 
 <head>
 <meta http-equiv="content-type" content="text/html; charset=edu-kr">
 <title>** BOOK LIST **</title>
 </head>
 
 <body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
 <table border="1" cellspacing="0" width="400" bordercolor="#9AD2F7"
 			bordercolordark="white" bordercolorlight="#B9E0FA">
		<tr>
			<td width="150" height="20" bgcolor="#2E9F9">
				<p align="center">
				<span style="font-size:8pt"><b>BOOKNAME</b></span></p>
			</td>
			<td width="150" height="20" bgcolor="#2E9F9">
				<p align="center">
				<span style="font-size:8pt"><b>PUBLISHER</b></span></p>
			</td>
			<td width="50" height="20" bgcolor="#2E9F9">
				<p align="center">
				<span style="font-size:8pt"><b>PRICE</b></span></p>
			</td>
		</tr>                                                               /* ②HTML코드 */
 <%                                    /* Java : 데이터, 처리 담당 */
 if(myResultSet!=null){      
	 while(myResultSet.next()){
		 String W_BOOKID=myResultSet.getString("bookid");    /* W_~ 변수에 오라클 DB테이블에서 값을 가져와서 담음 */
		 String W_BOOKNAME=myResultSet.getString("bookname");
		 String W_PUBLISHER=myResultSet.getString("publisher");
		 String W_PRICE=myResultSet.getString("price");     /* bookid, bookname.. 이건 DB */
 %>
 <tr>
			<td width="150" height="20">
				<p><span style="font-size:9pt;">
				<a href="bookview.jsp?bookid=<%=W_BOOKID%>">  /* 클릭하면 bookview페이지로 넘어가는데 위에서 W_로 담은 걸 여기서 끼워넣어서 화면에 표시 */
				<font face="돋움체" color="black">
				<%=W_BOOKNAME%></font></a></span></p>
			 </td>
			<td width="150" height="20">
				<p align="center"><span style="font-size:9pt;">
				<font face="돋움체"><%=W_PUBLISHER%></font></span></p>
			 </td>
			 
			 <td width="50" height="20">
				<p align="center"><span style="font-size:9pt;">
				<font face="돋움체"><%=W_PRICE%></font></span></p>
			 </td>
		</tr>
<%
	 }
 }
 stmt.close();
 dbconn.close();
 %>
 </table>
 <table cellpadding="0" cellspacing="0" width="400" height="23">
 	<tr>
 		<td width="1350">
 			<p align="right"><b><a href="booklist.jsp">
 			<font size="1" face="돋움체" color="black">LIST</font></a></b></p>
 		</td>
 	</tr>
 </table>
</body>
</HTML>
 

 

실행 결과
책 이름을 클릭하면 페이지가 book view로 넘어감

 

 

-> 이것 자체가 웹 브라우저

저 주소를 chrome이나 이런 곳에 주소창에 검색해도 나옴!

 

<%@ page import="java.sql.*" contentType="text/html;charset=EUC-KR"%>   /* 서버에서 java.sql을 가져옴 */
<%
	Class.forName("oracle.jdbc.driver.OracleDriver");
	String url="jdbc:oracle:thin:@localhost:1521:XE";
		/* 11g express edition은 orcl 대신 XE를 입력한다*/
	Connection dbconn=DriverManager.getConnection(url, "madang", "madang");
	Statement stmt = dbconn.createStatement();
	String bookid=request.getParameter("bookid");   /* getParameter : 위에서 책 이름 클릭했을 때 해당하는 책의 bookid를 받아서 보여줌 */
	ResultSet myResultSet=stmt.executeQuery("SELECT * FROM Book WHERE bookid='"+bookid+"'");
	if(myResultSet!=null){
	 myResultSet.next();
%>
<html>

<head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title>** Book VIEW **</title>
</head>

<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<table border="1" cellspacing="0" width="400" bordercolor="#9AD2F7"
		bordercolordark="white" bordercolorlight="#B9E0FA">
	<tr>
	 <td width="150" height="23">
	 	<p align="center">
	  	<span style="font-size:9pt ;">책 제 목</span></p>
	  </td>
	  <td width="513">
	  	<p><span style="font-size:9pt;">
	  	<%=myResultSet.getString("BOOKNAME")%></span></p>
	  </td>
	</tr>
	<tr>
		<td width="150" height="23">
	 		<p align="center">
	 		<span style=font-size:9pt ;">출 판 사</span></p>
	 	<td width="513">
	 		<p><span style="font-size:9pt;">
	 		<%=myResultSet.getString("PUBLISHER")%></span></p>
	 	</td>
	 </tr>
	 <tr>
	 	<td width="150" height="23">
	 		<p align="center">
	 		<span style=font-size:9pt ;">가 격</span></p>
	 	</td>
	 	<td width="513">
	 		<p><span style="font-size:9pt;">
	 		<%=myResultSet.getString("PRICE")%></span></p>
	 	</td>
	 </tr> 		
</table>
<table cellpadding="0" cellspacing="0" width="400" height="23">
	<tr>
	 <td width="150">
	 	<p align="right"><span style="font-size:9pt;">
	 	<a href="booklist.jsp?">
	 	<font color="black">목록</font></a></span></p>
	 </td>
	</tr>
</table>
<%
  }
  stmt.close();
  dbconn.close();
 %>
</body>
</html>

실행하기

Made by 부산IT 윤요섭 강사님

 

 

Book view만 실행을 시키면 아래와 같은 에러가 난다

 

invalid number

-> 몇번 책의 내용을 보여달라는거야?! 하고 에러가 나는 것

 

if(bookid == null)
bookid = "1";

 

이런 식으로 추가해 주면 book view만 실행시켜 주어도 에러가 나지 않고

bookid 1번인 책의 내용을 보여줄 것

 

<%@ page import="java.sql.*" contentType="text/html;charset=EUC-KR"%>
<%
	Class.forName("oracle.jdbc.driver.OracleDriver");
	String url="jdbc:oracle:thin:@localhost:1521:XE";
		/* 11g express edition은 orcl 대신 XE를 입력한다*/
	Connection dbconn=DriverManager.getConnection(url, "madang", "madang");
	Statement stmt = dbconn.createStatement();
	String bookid=request.getParameter("bookid");
	
	if(bookid == null)
		bookid = "1";
	
	ResultSet myResultSet=stmt.executeQuery("SELECT * FROM Book WHERE bookid='"+bookid+"'");
	if(myResultSet!=null){
	 myResultSet.next();
%>
<html>

<head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<title>** Book VIEW **</title>
</head>

<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<table border="1" cellspacing="0" width="400" bordercolor="#9AD2F7"
		bordercolordark="white" bordercolorlight="#B9E0FA">
	<tr>
	 <td width="150" height="23">
	 	<p align="center">
	  	<span style="font-size:9pt ;">책 제 목</span></p>
	  </td>
	  <td width="513">
	  	<p><span style="font-size:9pt;">
	  	<%=myResultSet.getString("BOOKNAME")%></span></p>
	  </td>
	</tr>
	<tr>
		<td width="150" height="23">
	 		<p align="center">
	 		<span style=font-size:9pt ;">출 판 사</span></p>
	 	<td width="513">
	 		<p><span style="font-size:9pt;">
	 		<%=myResultSet.getString("PUBLISHER")%></span></p>
	 	</td>
	 </tr>
	 <tr>
	 	<td width="150" height="23">
	 		<p align="center">
	 		<span style=font-size:9pt ;">가 격</span></p>
	 	</td>
	 	<td width="513">
	 		<p><span style="font-size:9pt;">
	 		<%=myResultSet.getString("PRICE")%></span></p>
	 	</td>
	 </tr> 		
</table>
<table cellpadding="0" cellspacing="0" width="400" height="23">
	<tr>
	 <td width="150">
	 	<p align="right"><span style="font-size:9pt;">
	 	<a href="booklist.jsp?">
	 	<font color="black">목록</font></a></span></p>
	 </td>
	</tr>
</table>
<%
  }
  stmt.close();
  dbconn.close();
 %>
</body>
</html>

 


JSP

- Java   : 서버인 톰캣에서 해석함 / 데이터 처리 담당 -> 오라클 DB 테이블에서 값을 가지고 와서 

- HTML : 클라이언트인 웹 브라우저(eclipse, chrome 등..)에서 해석 / 화면(UI), 비주얼 담당

- CSS

- javascript

 

UI 구현 시간에 HTML, CSS, javascript를 배울 것

 

ex) 네이버 -> 소스코드, DB는 네이버회사의 컴퓨터 안에 들어있을 것

우리 집에서 접속(클라이언트) -> 주소를 검색 -> 네이버회사 컴퓨터 -> HTML코드는 내 컴퓨터의 웹브라우저에서 해석하고 자바 코드는 네이버회사 컴퓨터에서 돌아감

=> 서버와 클라이언트의 차이 

 

<%  %> -> 자바 코드

            -> 그냥 쓰면 HTML

 

 <%@  %> : 설정

<%     %> : 코드(내용)

<%=   %> : 변수(값)

HTML 중간 중간에 들어가있는 Java

 

whale에서 실행시킴 -> 이게 클라이언트
whale에서 F12

내가 입력한 것들을 볼 수가 있는데

차이점은 Java는 없고 HTML만 있다.

 

 

 


일단 DB는 오늘로 끝!

3개월차 쯤에 안드로이드 배우면서

DB 연결을 할 예정


2020/12/29 - [자바 프로그래밍] - [자바 기초] 11일차 일지 2 - 데이터베이스 프로그래밍(이클립스 설치)

 

[자바 기초] 11일차 일지 2 - 데이터베이스 프로그래밍(이클립스 설치, JAVA)

데이터베이스 프로그래밍  ㄴ> PL도 프로그래밍인데 오라클 안에서만 쓴다 -> 이걸 Java, Python이나 C 같은 곳에서 연동 1. DB 프로그래밍 - JAVA(일반 -> PC application)  - 일반  - 모바일(안드로이드, 아.

aspring.tistory.com

 

2020/12/30 - [정보] - Apache Tomcat 포트 오류 해결하기 'Starting Tomcat v8.0 Server at localhost' has encountered a ploblem. Port 8080 required by Tomcat v.80 Server at localhost is already in use.

 

Apache Tomcat 포트 오류 해결하기 'Starting Tomcat v8.0 Server at localhost' has encountered a ploblem. Port 8080 require

Port 8080을 이미 사용 중이라는 오류창이 뜨므로 오라클에서 8080을 사용하고 있는 것 방법 1, 2, 3이 있는데 저는 방법 1, 2 모두 안돼서 3으로 해결했습니다. 일단 방법 3가지를 먼저 소개할게요! 방

aspring.tistory.com

 

728x90
728x90