Month: September 2017


Palvelinohjelmointi – tehtäviä


Kurssin kotisivu

Tehtäviä GitHubissa

Huom. GitHubiin ei ole siirretty .properties -tiedostoja tietoturvasyistä. Näin ollen suurin osa tehtävistä ei toimi suoraan.

Huom2. Tietokantaa käyttävät harjoitukset antavat ensimmäisellä ajokerralla HTTP Status 500 virheilmoituksen, joka liittyy tietokantayhteyteen.

Harjoitukset toimivat kun ohjelman ajaa uudestaan.

Viikko 1

Jsp-sivu, joka sisältää lomakkeen, johon syötetään kirjan nimi, tekijätiedot ja ISBN-koodi. Luotiin servlet, joka poimii tarvittavat tiedot http-pyynnöstä ja tallentaa ne Kirja-olioon requestin attribuutiksi.

Sivu ohjaa http-pyynnön servletiltä toiselle jsp-sivulle, joka osaa tulostaa Kirja-olion tiedot html-muotoiltuna.

Kirja-Ohjelma

 

Viikko 2

 

PreparedStatement, SQL Injection

Jsp-sivu, joka lukee tietokannasta käyttäjänimiä. Käyttäjiä voi lisätä sekä poistaa tietokannasta.

Käyttäjänimet

 

Viikko 3

Maven, JUnit

Demo sisältää kaksi sovellusta, laskimen ja kellon. Laskin-luokan metodeita on testattu JUnit-yksikkötesteillä. SuomiKello-luokan metodeita on myös testattu yksikkötesteillä ja ulkoinen KelloLahde on rajattu testistä pois käyttäen Mock-oliota.

Viikkotentin harjoitusta varten Kello-sovellukseen on lisätty GmtIsoKello -luokka, joka näyttää GMT-ajan ISO-standardin mukaan. GmtIsoKello-luokan metodeita on myös testattu yksikkötestillä ja testi on lisätty AllTests-suiteen

Demo 11

 

Viikko 4

Spring Framework, Spring JDBC

Komentorivisovellus, joka hakee levyjen tietoja tietokannasta.

Viikkotentti 4 harjoitus 13 (GitHub)

 

Viikko 5

Spring Web MVC, Anonyymi sisäluokka, Callback, GeneratedKeyHolder

Lomake, jonka avulla käyttäjä luodaan tietokantaan. Kun lomakkeen avulla on luotu uusi henkilö tietokantaan, käyttäjä siirretään sivulle, joka hakee tietokannasta juuri lisätyn henkilön tiedot ja näyttää ne. Lisätty toiminnallisuus: henkilöt/lista -linkistä sivu hakee tietokannasta kaikkien henkilöiden tiedot.

Viikkotentti 5 harjoitus 11

 

Viikko 6

Internationalization (I18n), Localization (L10n), Bean validation (JSR 303), Custom annotation, Custom validator

Käyttäjä voi vaihtaa käyttöliittymän kieltä napin painalluksella. Kaikki kieliriippuvaiset tekstit on tallennettu kielikohtaisiin properties-tiedostoihin. Henkilön ominaisuuksia on laajennettu. Mikäli syötetty data ei ole validia, käyttäjä ohjataan takaisin lomakesivulle ja häntä opastetaan korjaamaan virheet.

Lisätty toiminnallisuus: Luotu demosovellukseen uusi validaattori kenttiin etunimi, sukunimi ja lahiosoite tarkastamaan, että merkkijono alkaa isolla kirjaimella. Toteutettu validointi uudella annotaatiolla, jonka nimi on @AlkaaIsollaKirjaimella.

Viikkotentti 6 harjoitus 12

 

Harjoitustehtävä

Spring Web MVC, Anonyymi sisäluokka, Callback,GeneratedKeyHolder, Internationalization (I18n), Localization (L10n),

Bean validation (JSR 303), Custom annotation, Custom validator

Käyttäjä voi kirjata järjestelmään painokirjauksia ja hakea kaikki tai tiettynä päivänä tehdyt kirjaukset. Validointia käytetään havaitsemaan tyhjät kentät ja väärässä muodossa annetut tiedot.

PainoOhjelma.v1


Apache Tomcat 8 asennus virtuaalipalvelimelle


Apache Tomcat 8 asennus virtuaalipalvelimelle

 

Tavoitteena oli asentaa Apache Tomcat 8 Palvelinohjelmoinnin kurssin harjoitustöiden esittelyä varten. Lähtötilanteessa käytössä oli virtuaalipalvelin, jossa oli asennettuna Ubuntu 16.04 LTS käyttöjärjestelmä ja LAMP-stack

WordPress-sisällönhallintajärjestelmää varten. Lähteenä käytettiin DigitalOceanin mainiota tutoriaalia.

 

Esivalmistelut

Tomcat vaatii Java Development Kitin asennuksen, joten se asennettiin ensimmäisenä.

$ sudo apt-get update
$ sudo apt-get install default-jdk

Seuraavaksi luotiin oma käyttäjä Tomcatille. Käyttäjä luotiin turvallisuussyistä ilman sudo-oikeuksia sekä mahdollisuuksia kirjautua sisään. Käyttäjän kotihakemistoksi annettiin /opt/tomcat/, minne Tomcat ohjelmisto asennettaisiin.

$ sudo groupadd tomcat
$ sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

Tomcat 8 asennus

Seuraavaksi haettiin Tomcat 8 uusimman version osoite ohjelman lataussivuilta. Asennusta varten ladattiin Core version tar.gz -paketti.

$ cd /tmp
$ curl -O http://www.nic.funet.fi/pub/mirrors/apache.org/tomcat/tomcat-8/v8.5.20/bin/apache-tomcat-8.5.20.tar.gz
$ sudo mkdir /opt/tomcat
$ sudo tar xzvf apache-tomcat-8.5.20.tar.gz -C /opt/tomcat --strip-components=1

Kansioiden käyttöoikeudet

Tämän jälkeen päivitettiin kansioiden käyttäjäoikeuksia. käyttäjälle tomcat annettiin omistajuus koko asennuskansiolle. tomcat-ryhmälle annettiin lukuoikeus conf-kansioon ja sen sisältöön ja suoritusoikeus itse kansioon.

Lopuksi tomcat käyttäjälle annetaan omistajuus kansioille webapps, work, temp ja logs.

$ sudo chgrp -R tomcat /opt/tomcat

$ sudo chmod -R g+r conf

$ sudo chmod g+x conf

$ sudo chown -R webapps/ work/ temp/ logs/

systemd asetukset

systemd asetuksia muokkaamalla Tomcat 8:a voidaan ajaa palveluna ja se voidaan asettaa käynnistymään automaattisesti. Tomcatille täytyy myös kertoa, mihin kansioon Java on asennettu (JAVA_HOME -polku)

$ sudo update-java-alternatives -l

Tarvittava JAVA_HOME polku oli kuvan mukainen polku, jonka perään liitettäisiin /jre kansio eli tässä tapauksessa:

/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre

Seuraavaksi luotiin Tomcat 8 asetukset systemd kansioon

$ sudoedit /etc/systemd/system/tomcat.service

Tiedoston sisältöön kopioitiin seuraavat tiedot, varmistaen että JAVA_HOME muuttuja viittasi oikeaan kansioon.

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

 

Seuraavaksi käynnistettiin Tomcat palvelu ja testattiin sen toimivuutta.

$ sudo systemctl daemon-reload
$ sudo systemctl start tomcat
$ sudo systemctl status tomcat

 

Palomuurin konfigurointi ja Tomcat serverin testaus

Tomcat käyttää porttia 8080, joka avattiin UFW-palomuurista liikennettä varten.

$ sudo ufw allow 8080

Tämän jälkeen voitiin testata serverin toimintaa siirtymällä osoitteeseen http://serverinosoite:8080

Tomcatin oletuskotisivu saatiin näkyviin, joten asennus oli onnistunut.  Manager App ja Host Manager sivut eivät vielä toimineet,

koska ne vaativat asetusten muokkausta. Tässä vaiheessa voitiin kuitenkin asettaa Tomcat palvelu käynnistymään automaattisesti järjestelmän käynnistyessä.

$ sudo systemctl enable tomcat

Lisäasetukset

Manager App ja Host Manager hallintaa varten Tomcatille täytyi seuraavaksi luoda käyttäjiä. Kuten kotisivulla näkyy, käyttäjiä hallitaan $CATALINA_HOME/conf/tomcat-users.xml -tiedostossa.

$ sudoedit /opt/tomcat/conf/tomcat-users.xml

Luotavalle käyttäjälle annettiin roolit manager-gui ja admin-gui, jolloin käyttäjällä pääsee hallitsemaan Manager App ja Host Manager toiminnallisuuksia. Käyttäjätiedot luotiin tomcat-users.xml -tiedostoon alla olevan kuvan mukaisesti

(luonnollisesti käyttäjätunnus ja salasana muutettiin…)

Oletusasetuksena Tomcat estää Manager App ja Host Manager toiminnallisuuksien käytön, jos niitä ohjataan suoraan serveriltä. Asetus otettiin pois päältä muokkaamalla kahta context.xml -tiedostoa.

$ sudoedit /opt/tomcat/webapps/manager/META-INF/context.xml
$ sudoedit /opt/tomcat/webapps/host-manager/META-INF/context.xml

Molemmista tiedostoista kommentoitiin ulos kuvan mukaiset kaksi riviä, jolloin Manager App ja Host Manager toiminnallisuuksia voi käyttää mistä tahansa. Vaihtoehtoisesti asetustiedostoista voi määritellä halutut IP-osoitteet, jotka voivat käyttää toiminnallisuuksia.

Asetusten muokkaamisen jälkeen Tomcat palvelu käynnistettiin uudestaan.

$ sudo systemctl restart tomcat

Tämän jälkeen sekä Manager App että Host Manager toimivat annetuilla käyttäjätunnuksilla. /opt/tomcat/webapps -kansioon siirretyt .war tiedostot voitiin ottaa käyttöön Manager App:in kautta.

 

 

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 3 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html

Simo Suominen