[JAVA] Tomcat, contexte, paramètres de débogage dans la communauté IntelliJ

introduction

Un bon environnement augmentera l'efficacité du développement.

À l'origine, j'étais un utilisateur d'Eclipse, et Eclipse a tout fait sur le chemin de classe et les paramètres de Tomcat, mais après avoir rencontré IntelliJ, qui fonctionne bien, je ne pouvais pas abandonner cette sensation de netteté et j'ai dû changer. J'ai fait. Cependant, pour IntelliJ, vous devez acheter IntelliJ IDEA Ultimate (version payante) pour obtenir la «commodité» d'Eclipse, c'est le pouvoir de l'argent.

Je suis actuellement le principe IntelliJ Community (gratuit), pour les raisons suivantes: ・ Je souhaite acheter des livres et des cours, des pièces d'appareils et de matériel, etc. pour le montant que j'investis chaque mois dans la licence de la version payante. ・ Je veux définir la base dans une certaine mesure par moi-même

Ce dernier peut être similaire au sentiment d'essayer occasionnellement de créer un paquet avec les commandes vim et javac sans utiliser l'IDE.

objectif

Configurez grossièrement Tomcat et le débogueur dans IntelliJ Community. (1) Avec une application nommée sample-app (2) Utilisez MySQL local pour les ressources DB (3) Essayez de vous connecter à http: // localhost: 8080 / sample-app /.

OS est mac.

réduction

Comme il ne connecte que Tomcat, il est impliqué dans la configuration initiale du servlet java, du jsp et du cadre Spring. 0. javax.servlet

  1. pom.xml
  2. web.xml (paramètre bean) '' ``
  3. `` $ {nom-servlet} -servlet.xml``` (ou `ʻapplication-context.xml```)
  4. Paramètres pour l'analyse des composants, basée sur les annotations, le résolveur de vue, le mappage de fichiers statiques, etc. dans `` `servlet.xml```

Je voudrais omettre etc. et organiser principalement autour des paramètres de base de données et du débogage.

Créer un package pour une application Web avec IntelliJ

Premier

Sélectionnez et installez la version requise d'apache tomcat sur la Accueil officiel .

Parfois, il y a un problème que le tomcat existant et la dernière version de java ne correspondent pas, mais par exemple, si vous gardez un petit vieux Tomcat et mettez java8 et java9, Il peut être résolu en abaissant JAVA_HOME, qui a été mis à niveau à 9 dans les paramètres de la variable d'environnement, à 8.

File -> new -> Project... 1.png

Je veux utiliser maven, donc j'utiliserai l'application web de maven.

Entrez quelque chose Suivant, Suivant, Suivant ..

s1.png

Il m'est arrivé de le couvrir, mais il n'est pas nécessaire que ce soit le nom de l'application.

Selon Maven POM Reference

En bref, groupId peut être un nom qui inclut un nom d'institution qui peut être distingué des autres projets, et artifactId doit être un nom fixe pour le projet.

Je me souviens qu'on m'avait dit que je n'avais pas besoin d'être si particulier sur le développement personnel.

Chargeons pom dans la bibliothèque

Seul le pom est chargé à partir de l'état initial où le pom n'a pas encore été lu et n'est pas prêt à être déployé. Je pense que JUnit est écrit par défaut, mais je ne peux pas développer une application avec ça seul.

s2.png

Je l'ai déjà essayé et ajouté java-servlet et réimporté. Un java-servlet a également été ajouté aux bibliothèques externes et peut être référencé.

Déployer

Convertissez les fichiers .java en fichiers exécutables .class.

s3.png

Pendant le développement, nous le nettoyerons une fois, mais comme il n'y a encore rien, appuyez sur package pour générer un package cible exécutable. Je pense que le nom était le nom par défaut.

s4.png

C'est fait. Similaire au paramètre de sortie File-> Project Structure-> Complier.

La marque de l'ampoule indique que la version Ultimate est bonne lol ..

Le problème est de laisser Run-> Edit Configuratons ... le faire.

C'est exactement la même histoire, mais appuyez sur + en haut à gauche pour ajouter Maven et passez une commande qui peut faire nettoyer et empaqueter en même temps qu'une commande d'argument à l'avance.

s5.png

C'est un répertoire de travail, mais ce devait être le chemin absolu du répertoire de l'application. Dans mon cas, je l'ai mis dans le répertoire personnel de mon mac, donc je l'ai écrit de cette façon. De plus, le nom sample-config est approprié.

-Dmaven.test.skip = true est une option pour ignorer le test lorsque vous souhaitez raccourcir le temps de déploiement. Il semble que l'omission du test n'est pas recommandée à l'origine, mais à mesure que le nombre de fichiers augmente, le travail de déploiement lui-même devient lourd, donc Je l'utilise beaucoup.

s6.png

Et cela a été ajouté. Il est facile de procéder en un seul clic.

La ligne de commande est la plus simple

Obtenez la commande mvn de la maison officielle, installez-la,

$ cd {$APP_HOME}
$ mvn clean package -Dmaven.test.skip=true

Il est également pratique de frapper.

Paramètres de contexte et de ressource (base de données)

{$catalina_home}/conf/catalina/${host_name}/ Créez un fichier `` $ {APP_NAME} .xml '' directement en dessous.

{$CATALINA_HOME}Est votre propre apache-À l'emplacement de tomcat${HOST_NAME}Est d'accord avec localhost si local.



#### **`${APP_NAME}.Bien qu'il s'agisse de XML, exemple de l'application créée cette fois-Je l'ai nommé application, donc si vous l'exprimez avec un chemin absolu,`**
```Bien qu'il s'agisse de XML, exemple de l'application créée cette fois-Je l'ai nommé application, donc si vous l'exprimez avec un chemin absolu,



#### **`/Mon Tomcat/conf/Catalina/localhost/sample-app.Sera xml.`**

Si vous souhaitez mettre plusieurs applications dans un Tomcat, créez un fichier de paramètres pour chaque contexte.

{$CATALINA_HOME}/conf/Serveur directement en dessous.Il y a du xml, et ça marche même si je l'écris directement,


 Il s'agit d'un paramètre commun à toutes les applications, donc si vous souhaitez spécifier des paramètres pour chaque application individuelle, comme la connexion à la base de données, ne touchez pas Server.xml directement sous conf et `` `` {$ CATALINA_HOME} / conf / Catalina / $ {HOST_NAME } / ```Je pense qu'il vaut mieux créer un fichier de configuration pour chaque cocontext (application) directement sous`.

 Par exemple, écrivez les paramètres de connexion à la base de données (MySQL) dans Ressource et enregistrez-les.


#### **`sample-app.xml`**
```xml

<Context docBase="{$APP_HOME}/target/sample-app" path="/sample-app" reloadable="true">

  <Resource 
    name="jdbc/${jdbc_NAME}"
    type="javax.sql.DataSource"
    auth="Container"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://${DB_SERVER}/${DB_NAME}?userUnicode=true&amp;charactorEncoding=UTF-8&amp;autoReconnect=true"
    username="${USER}" password="${PASS}" 
    validationQuery="select CURRENT_TIMESTAMP"
  />

</Context>

Contexte: informations de configuration de l'application

{$APP_HOME}Est le chemin absolu du répertoire dans lequel l'application est en cours de développement.


 C'est `` `` {$ APP_HOME} / target / sample-app} '' directement en dessous, mais c'est l'endroit où le fichier de classe est éjecté à chaque fois que vous déployez, qui est défini dans IntelliJ.
 Je l'ai fait `` / target / $ {APP_NAME} `` ``. Si je peux spécifier l'emplacement où le fichier de classe sera enregistré, j'aimerais le nommer.
 Le standard est un chemin relatif depuis / webapp, mais cette fois je l'ai spécifié comme chemin absolu.

 * <b> path </ b> <br> Chemin de contexte. La valeur par défaut est la valeur de l'attribut docBase, elle doit donc être facultative si vous souhaitez utiliser un exemple d'application comme la valeur de l'attribut docBase comme cette fois ...
 * <b> rechargeables </ b> <br> S'il y a des mises à jour des fichiers .class ou .jar, c'est un indicateur qui détermine si Tomcat vérifiera s'ils sont automatiquement rechargés. Défini sur true pendant le développement. Cependant, je pense qu'il est préférable pour les performances de le réécrire sur false lorsque tout le développement est terminé.

## Ressource - Configurer la connexion à la base de données

 Ajoutez `` <Resource> ... </ Resource> '' pour le nombre de bases de données à utiliser.

 * <b> driverClassName </ b> <br> Nom de classe complet pour le pilote JDBC.
 * <b> type </ b> <br> Type de ressource. Lorsque vous utilisez une source de données, spécifiez `` `` javax.sql.DataSource```.
 * <b> auth </ b> <br> Méthode de contrôle des ressources. Lors de l'utilisation d'une source de données, spécifiez `` `` Container```
 * <b> nom </ b> <br> Il s'agit du nom donné à la source de données.

 > * Exemple de paramètres jndi (Java Naming and Directory Interface) et de servlet dans Spring Framework <br>
 C'est comme donner (lier) un objet. <br>

#### **`web.De xml<servlet-mapping>Spécifié dans<servlet-name>Si c'est un sampleApp, je pense que j'écrirais un fichier de configuration avec un nom comme celui-ci. application-context.Il peut être défini en utilisant xml.`**
``` > `` `` Bean id``` a spécifié le nom de la DataSource. Plus tard, lors de l'ajout du traitement des transactions, etc., de` `` ` Il est utilisé à la place de `` ref ''.

Si vous mettez `name =" jdbc / sampleDB "` dans `Resource``` plus tôt, vous obtiendrez` `java: comp / env / jdbc / sampleDB```.

  • url </ b>
    Si le serveur et le serveur de base de données sont tous deux locaux et que vous souhaitez vous connecter à une base de données appelée sample_DB dans MySQL, vous pouvez utiliser quelque chose comme `` jdbc: mysql: // localhost / sample_DB ''. .
    Si vous souhaitez utiliser un serveur de base de données externe, entrez les informations de connexion de ce serveur.
    Le paramètre? à la fin est une option pour encoder ou maintenir la connexion MySQL. est.
  • nom d'utilisateur et mot de passe </ b>
    Entrez le nom et le mot de passe que vous avez utilisés pour vous connecter à MySQL.
  • validationQuery </ b>
    Il s'agit d'une requête arbitraire à faible charge pour vérifier si une connexion est active lors de la récupération d'une connexion à partir du pool de connexions s'il n'y a pas de connexion pendant une longue période.

Cela ne couvre pas tous les attributs ... par exemple En supposant une utilisation personnelle des ressources locales au lieu de la base de données externe, maxIdle </ b> et les paramètres d'inactivité du pool de connexions J'ai omis maxActive </ b> pour le nombre maximum de connexions dans le pool.

  • Pool de connexion Le pool a ici le sens de conserver. Le pool de connexions peut conserver plusieurs connexions entre l'application et le serveur de base de données. Il s'agit d'une fonction permettant de réutiliser la connexion et de gérer l'état de connexion de la base de données. Close (release) est un processus permettant de renvoyer la connexion utilisée au pool pour la prochaine connexion.
  • inactif Il s'agit d'une connexion groupée (réservée).

Démarrez Tomcat

$ cd ${apache-emplacement de tomcat}/bin
$ sh startup.sh

À la fin

$ sh shutdown.sh

De temps en temps, je le redémarre accidentellement et le processus reste, donc dans ce cas

$ ps -ef | grep tomcat

Ensuite, donnez le nombre approprié `` tuer ''.

Vérifier avec le navigateur

s7.png

Ce que vous voyez est le jsp fourni par défaut ici. C'est la cible.

s8.png

Si vous essayez de supprimer target / sample-app / index.jsp, vous verrez qu'il manque la page 404. Vous pouvez le faire à nouveau en le déployant à nouveau.

Paramètres du débogueur

bin/setenv.sh Directement sous le répertoire bin directement sous le répertoire de apache-tomcat Créez setenv.sh.

$ cd ${apache-emplacement de tomcat}/bin
$ vi setenv.sh

Le contenu est comme indiqué ci-dessous.

export JPDA_ADDRESS=9999
export JPDA_TRANSPORT=dt_socket

9999 n'a pas de sens, car c'est un numéro de port qui ne semble pas être attribué ... C'est comme le déploiement et l'exécution sur le port 8080 et le débogage à distance sur le port 9999.

Run -> Edit Configurations... スクリーンショット 2018-02-08 2.58.41.png

Remplacez uniquement le numéro de port par 9999

s9.png

Démarrez Tomcat avec l'option jpda

$ cd ${apache-emplacement de tomcat}/bin
$ sh catalina.sh jpda start 

Puisqu'il s'agit d'un démarrage avec des options, vous n'avez pas besoin de faire $ sh startup.sh```.

Définissez et assurez-vous que le débogueur est défini

s10.png

Si vous mettez un point d'arrêt comme d'habitude et que vous faites apparaître le bogue, ce n'est pas grave.

La fin

Comme les réglages initiaux ne sont pas effectués quotidiennement, j'ai parfois eu du mal en cas d'urgence, je l'ai donc rédigé comme mon propre mémo.

Je pense que la meilleure façon de créer un environnement est de vous convenir. À cette fin, il peut être le premier à essayer diverses choses, y compris la version payante.

c'est tout

Journal de correction

Tous les noms d'échantillons ont été unifiés en «sample» pour une compréhension facile.