[JAVA] J'ai créé un serveur Web avec Razpai pour regarder des anime

Motivé

Il y a beaucoup d'animations sur le disque dur, mais il est difficile de connecter le disque dur à l'ordinateur et de le regarder, alors rendons-le visible depuis le navigateur.

environnement

Puisque l'endroit où l'animation est enregistrée n'est pas un NAS mais juste un disque dur, on suppose que le disque dur est un NAS utilisant Raspberry Pi. La procédure pour transformer un disque dur en NAS n'est pas illustrée ici.

HDD(NAS)Emplacement


/mnt/hdd/HD-V3/Anime/

Introduction de tomcat

La procédure sur ce site est super facile à comprendre, alors suivez ici. Paramètre d'environnement Raspberry pie Tomcat-8

Si vous suivez les principes de base tels qu'ils sont écrits, cela fonctionnera sans problème. Cependant, si vous le faites avec wget exactement de la même manière, cela ne fonctionnera pas car apache-tomcat-8.5.4.tar.gz n'est plus disponible. Depuis 8.5.31 était à jour, je pense que vous devriez télécharger apache-tomcat-8.5.31.tar.gz sur Windows et l'envoyer à Raspai avec scp ou quelque chose. Il semblait que j'utilisais gedit (?) Pour éditer le script, mais c'était comme ça, alors j'ai écrit le script dans mon nano préféré. Si vous suivez les étapes du lien ci-dessus, tomcat ira dans / usr / local / tomcat. Cette fois, je vais poursuivre l'histoire avec Tomcat ici.

emplacement de tomcat


/usr/local/tomcat/

Structure de répertoire, hiérarchie

Le travail est effectué dans un dossier appelé espace de travail. tomcat semble spécifier le nom du dossier pour mettre le fichier de classe de l'application Web. Si vous créez une application avec une hiérarchie basée sur elle, la hiérarchie sera la suivante. 2018-05-08 (2).png À l'origine, cette fois, il semble que je vais créer un dossier de ma propre application sous tomcat / webapps /, mais comme le NAS est sur une couche supérieure, je ne veux pas créer d'application Web sous webapps. C'est pourquoi l'espace de travail est placé sur le disque dur.

emplacement de l'espace de travail


/mnt/hdd/HD-V3/Anime/workspace/

L'espace de travail n'est pas sous les applications Web, vous devez donc le dire à tomcat. Écrivez comme suit. Le nom du fichier doit être le nom du répertoire. (Il semble y avoir un moyen de l'écrire dans server.xml, mais cela n'a pas fonctionné.)

/usr/local/tomcat/conf/Catalina/localhost/workspace.xml


<Context path="/workspace" docBase="/mnt/hdd/HD-V3/Anime/workspace" />

Modification de web.xml

Écrivez la structure de page de l'espace de travail.

/mnt/hdd/HD-V3/Anime/workspace/WEB-INF/web.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<servlet>
	<servlet-name>cookie1</servlet-name>
	<servlet-class>cookie1</servlet-class>
</servlet>

<servlet>
	<servlet-name>cookie2</servlet-name>
	<servlet-class>cookie2</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>
		cookie1
	</servlet-name>
	<url-pattern>
		/servlet/cookie1
	</url-pattern>
</servlet-mapping>

<servlet-mapping>
	<servlet-name>
		cookie2
	</servlet-name>
	<url-pattern>
		/servlet/cookie2
	</url-pattern>
</servlet-mapping>

</web-app>

Création du programme principal

J'avais initialement prévu d'utiliser des cookies, donc ce nom est utilisé, mais je ne l'ai pas utilisé dans le programme. cookie1.java Obtenez la liste des noms de fichiers dans / mnt / hdd / HD-V3 / anime / workspace / anime /, ajoutez-la au menu déroulant, sélectionnez un titre et passez à cookie2.java.

cookie1.java


import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.File;

public class cookie1 extends HttpServlet {     
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws  IOException, ServletException {
	         response.setContentType("text/html; charset=utf-8");
	         PrintWriter out = response.getWriter();
                 request.setCharacterEncoding("UTF-8"); 
                 out.println("<html><head>"); 
                 out.println("<title>cookie1</title>");
                 out.println("</head><body>");
                 out.println("<h1>Wiki Anime DB</h1><hr>");
		          String root="/mnt/hdd/HD-V3/Anime/workspace/anime/"; 
				  File dir=new File(root);
				  File[] list=dir.listFiles();
				  out.println("Nombre de titres:"+list.length+"<br>");
      	         out.println("<form action=\"/workspace/servlet/cookie2\" method=\"GET\">");
      	         out.println("Nom: <input type=\"text\" name=\"name\" size=32>");
       	         out.println("<br>");         
       	         out.println("<input type=\"submit\" value=\"Génération de code\">");   
				 out.println("<br>");  
				 out.println("<select name=\"anime\">");
				 for(int i=0;i<list.length;i++){
					 String dst=list[i].toString();
					 dst=dst.replace(root,"");
					 out.println("<option value=\""+dst+"\">"+dst+"</option>");
				 }
				 out.println("<select>");       
       	         out.println("</form>"); 
       	         out.println("</body></html>"); 
        }
} 

cookie2.java Sur la base du titre d'animation reçu de cookie1.java, seuls les fichiers avec l'extension .mp4 | .MP4 dans la hiérarchie un niveau en dessous de ce dossier sont générés en les prenant en sandwich avec des balises vidéo.

cookie2.java


import java.io.*; 
import java.net.*;
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.File;
 
public class cookie2 extends HttpServlet {     
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws  IOException, ServletException {
	        response.setContentType("text/html; charset=utf-8");
	        PrintWriter out = response.getWriter();
            request.setCharacterEncoding("UTF-8");
            String aname=request.getParameter("anime");
            String eaname=URLDecoder.decode(aname,"UTF-8");
            String root="../anime/";
            String root_t="/mnt/hdd/HD-V3/Anime/workspace/anime/";
            out.println("<html><head>");
            out.println("<title>cookie2</title>");  
            out.println("</head><body>");      
            out.println("<h1>"+eaname+"</h1><hr>"); 
            out.println("Dossier d'anime sélectionné="+eaname+"<br>");
	        out.println("<form action=\"/workspace/servlet/cookie1\" method=\"GET\">");
	        out.println("<input type=\"submit\" value=\"Revenir\">");     
            out.println("</form>"); 
            File dir=new File(root_t+eaname);
				  File[] list=dir.listFiles();
                  out.println("Fichier="+list.length+"<br>");
                  for(int i=0;i<list.length;i++){
                      String dst=list[i].toString();
                      dst=dst.replace(root_t+eaname+"/", "");
                      if(dst.indexOf(".mp4")!=-1  || dst.indexOf(".MP4")!=-1){
                        dst=root+eaname+"/"+dst;
                        out.println(dst+"<br>");
                        out.println("<video src=\""+dst+"\" preload=\"none\" controls></video><br>");
                      }
				  }
	        out.println("</body></html>");
	  }
}

compiler

Vous devez compiler en ajoutant servlet-api.jar avec l'option classpath.

/mnt/hdd/HD-V3/Anime/workspace/WEB-INF/classes/


$ javac -classpath "/usr/local/tomcat/lib/servlet-api.jar" cookie1.java
$ javac -classpath "/usr/local/tomcat/lib/servlet-api.jar" cookie2.java

Mise en garde Initialement, la compilation a échoué car /usr/local/tomcat/lib/servlet-api.jar ne dispose pas des autorisations.

Autorisation


$sudo chmod 755 /usr/local/tomcat/lib/servlet-api.jar

J'ai accordé les autorisations, puis je l'ai compilé et cela a fonctionné.

Courir

python


$ sudo /etc/init.d/tomcat start

écran cookie1

2018-05-08.png

écran cookie2

2018-05-08 (1).png

Tâche

  1. Le nombre d'articles n'est pas dans l'ordre croissant
  2. Il y a trop de titres et il est difficile de les trouver dans le menu déroulant

Mais pour le moment, ZOY vous permet de regarder l'animation sur le disque dur plus confortablement depuis votre smartphone.

Recommended Posts

J'ai créé un serveur Web avec Razpai pour regarder des anime
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
J'ai fait une application WEB avec Django
J'ai essayé de créer une caméra de surveillance à détection de mouvement avec OpenCV en utilisant une caméra WEB avec Raspberry Pi
[Travail électronique] J'ai fabriqué un détecteur de son tactile Suica avec Raspberry Pi
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
J'ai créé un serveur syslog prêt à l'emploi avec Play with Docker
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --2 introduction PHP
J'ai parlé à Raspberry Pi
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et créez un serveur Web ―― 1. Introduction à Apache
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
J'ai essayé de créer un bouton pour Slack avec Raspeye + Tact Switch
Compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --3. Utilisez MySQL
Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai essayé de connecter Raspeye et conect + avec l'API Web
J'ai essayé d'automatiser [une certaine tâche] à l'aide d'une tarte à la râpe
Je vous ai fait exécuter des commandes depuis un navigateur WEB
J'ai fait une loterie avec Python.
Construire un serveur VPN avec Raspberry Pie
J'ai créé un démon avec Python
Utiliser une webcam avec Raspberry Pi
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai créé un chat-holdem de serveur de jeu de poker en utilisant websocket avec python
Créer un environnement Tensorflow avec Raspberry Pi [2020]
J'ai fait un compteur de caractères avec Python
Capteur humain amélioré fabriqué avec Raspberry Pi
J'ai fait un script pour afficher des pictogrammes
Faire une minuterie de lavage-séchage avec Raspberry Pi
J'ai fait une carte hexadécimale avec Python
J'ai créé une API Web
J'ai fait un jeu de vie avec Numpy
J'ai fait un générateur Hanko avec GAN
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Créez un compteur de voiture avec Raspberry Pi
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
J'ai essayé de communiquer avec un serveur distant par communication Socket avec Python.
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
J'ai créé une application Web en Python qui convertit Markdown en HTML
Remarque: je souhaite faire de la domotique avec Home Assistant + Raspberry Pi + capteur # 1
[Django] a créé un champ pour saisir des dates avec des nombres à 4 chiffres
J'ai créé un outil pour convertir Jupyter py en ipynb avec VS Code
J'ai créé un robot pour publier sur Twitter en grattant sur le Web un site dynamique avec AWS Lambda (suite)
J'ai fait un package npm pour obtenir l'ID de la carte IC avec Raspberry Pi et PaSoRi
J'ai fait un robot de remplacement de tampon avec une ligne
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
Contenu Web Python réalisé avec le serveur bon marché Lolipop
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
Je veux faire un jeu avec Python
J'ai essayé L-Chika avec Razpai 4 (édition Python)